Androidでカメラを作る ~ その5:シャッター速度と絞りを手動で行う
写真撮影はすべて機械にお任せもできますが、私がカメラを使う時は、シャッター速度や、絞り、露出補正などを使う場合が多いです。
そこで、Androidのカメラアプリケーションでも、個別指定ができるようにします。
1.シャッター速度と絞りを設定するわけは?
そもそも、なぜシャッター速度や絞りを指定する必要があるのでしょうか?それにはいくつかの理由がありますが、一番大きいのは、被写界深度を調節するためです。
被写界深度はピントが合っている範囲のことをいいます。そして、シャッター速度が速いと被写界深度は浅くなり、遅いと被写界深度は深くなります。もっと簡単に言うと、シャッター速度が速いとフォーカスが合う範囲が狭くてボケが大きい写真になり、遅いと全体にピントが合った写真になります。
要は、どこまでピントの合った写真にするかを、シャッター速度と絞りで決めるわけです。そして、シャッター速度を速めれば光の取り込みが少なくなるので絞りを開けて光の量を増やし、遅くすれば光の取り込みが多くなるので、絞りを狭めて光の量を減らします。この組み合わせを人が行うのは難しいので、普通はプログラムAEという機能で、自動的に組み合わせを作ります。
このようなカメラと同じことが、スマートフォンでも出来るのでしょうか?
2.スマートフォンは絞りの設定ができない?
Androidスマートフォンで使われているカメラ機構では、シャッター速度を問題なく変えられます。しかし、絞りに関しては、多くのスマートフォンが1つの設定しかできません。また、絞りの設定ができるスマートフォンでも、設定できる個数は2つとかで少ないです。
私の使っているスマートフォンで絞りを取得してみると、f1.8しか絞りの値がありません。これでは、シャッター速度を変えられても絞りの設定が変えられませんから、適正な露出の写真が撮れません。
しかしスマートフォンのカメラアプリケーションでは、絞りが固定されていても、いろいろな手段で適正な露出を得ているようです。また、ボケを実現するために距離をセンサーで測って、ソフトウェアで実現するものがあります。さらに、写真を複数枚撮影してAIを駆使して画像を適正にするなど、画像エンジンによる写真の合成が行われています。
対して、カメラ専用機でも画像エンジンにより写真の合成が行われていますが、あくまでもセンサーで受信した光を尊重しています。いくら写真の見栄えが良くても、映した時と違った写真になれば、それは写真ではなくなると思うのです。私がカメラ専用機にこだわる点は、そこにあります。
3.それでもマニュアルモードを用意してみる
このように、スマートフォンでシャッター速度や絞りを設定するのは、あまり意味がない気がします(※)。それでも、シャッター速度とISOを設定するマニュアルモードを用意することにしました。
ISOは感度を現す数値で、数値が高いほど感度が上がって暗くても写真が撮れるようになります。しかし、感度が上がると画像が荒くなってしまい、ノイズが目立つ写真になってしまいます。特に、スマートフォンに搭載されるセンサーはサイズが小さいので、ISOを上げると汚い写真になります。
機種によって大きく違いが出ますが、実用的な感度はISO400くらいまでです。
CaptureRequest.Builder captureBuilder ;
// captureBuilderのインスタンスを得る処理を入れてください
// マニュアルAE指定
captureBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_OFF);
captureBuilder.set(CaptureRequest.SENSOR_SENSITIVITY, ISOの値);
captureBuilder.set(CaptureRequest.SENSOR_EXPOSURE_TIME, シャッター速度[単位が違うことに注意]);
// captureBuilder.set(CaptureRequest.LENS_APERTURE, 絞りの値);
このようなコードで、手動でシャッター速度やISOを指定できるようにしました。
手動で撮影する様子を、一番最初のキャプチャ画像で用意しました。露出が決して適切とは言えません。それでも、ISO100の状態でシャッター速度を160分の1まで上げることにより、それなりの画像に仕上げています。
このように、シャッター速度とISOの設定だけでは、写真として完成させるには厳しいです。
※スマートフォンに搭載されるセンサーは小さいので、シャッター速度や絞りを変えてもボケの量があまり変わりません。これも理由の一つになります。
4.ここで一度完成とします
ここまでスマートフォン用のカメラアプリケーションを作ってきました。実際に使ってみて、最低限の機能しかないけれど、それなりに撮れることが分かりました。
そして、当初の目標である、間違ってボタンを押してしまう問題が大きく解消されて、自分には便利なカメラとなりました。これで、ホームボタンや戻るボタンが昔のように物理ボタンであれば最高なんですが、もうそんな機種は出てこないのでしょうね。
とりあえず、これまでの実装でgoogle playストアに登録したいと思います。ほんとにこっそり登録します。