Androidでカメラを作る ~ その6:10倍ズーム機能を付ける

2021年10月7日

カメラアプリ「WF-Camera」は、ズーム機能を搭載していません。それは、多くのスマートフォンのカメラが光学式ズームを持たないからです。また、デジタルズームは画像の劣化が激しく、あまり実用的ではありません。

しかし、不意に狙っている鳥が現れて、写真を撮りたいけど撮れないことが良く起こりました。そのような時は、画像が汚くてもいいから写真として残したいです。そこで、WF-Cameraに10倍ズーム機能を搭載することにしました。

1.プログラミング

                CameraManager cameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
                CameraCharacteristics characteristics = cameraManager.getCameraCharacteristics(cameraId);
                Rect m = characteristics.get(CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE);

                int oneWidth = m.width() / 10;
                int oneHeight = m.height() / 10;

                int centerWidth = m.width() / 2;
                int centerHeight = m.height() / 2;

                Rect zoom = new Rect((centerWidth - oneWidth / 2), (centerHeight - oneHeight / 2), (centerWidth + oneWidth / 2), (centerHeight + oneHeight / 2));
                mPreviewCaptureRequestBuilder.set(CaptureRequest.SCALER_CROP_REGION, zoom);

10倍にするにあたり、画面中央の縦横1/10サイズを指定して実現させます。Camera2にはクロップサイズを指定する命令があるので、画面中央1/10サイズの矩形を指定します。そうすると縦横1/10サイズを実画面に拡大することから、10倍の画像になります。当然、画質は荒いです。

2.実際に撮影してみる

実際に撮影してみました。

パークゴルフ場1.0倍

木々に囲まれた快適なパークゴルフ場ですが、目的の被写体がまるで分かりません。

パークゴルフ場10倍

撮りたいのは、ゴールポストでした。被写体は分かるようになりましたが、画像の劣化が否めません。

池にいるカモ1.0倍

池にいるカモ?を撮影してみました。桟橋の先にいますが、小さくて良く分かりません。

池にいるカモ10倍

10倍にすると、はっきりとカモの姿が分かります。これだけ大きく映れば、写真の主題として成り立つと思います。

しかし、画像はやはり劣化しています。

3.総括

10倍モードは、倍率としては満足できるものになりました。これだけ拡大できれば、手で持つのに苦労する高倍率のカメラレンズに引けを取りません。

しかし、画質の劣化は予想通りですが起こってしまい、写真としての価値はありません。それでも、1.0倍で撮った写真をソフトウェアで10倍に拡大する手間を考えると、10倍モードで記録として写真を撮るのであれば、価値があると思います。

10倍モードを使う場面はありそうなので、WF-Cameraに搭載します。(ver 0.15で搭載しました)