あらいさん日記(仮)

あらい日記

活動の記録

Focal Stackを用いたボケ量の操作

概要

 カメラのピント位置をずらしながら撮影した複数の画像である,Focal Stackを用いて,被写界深度の操作を行いました.被写界深度の操作を行うことで,撮影後に自由にボケ量を操作することができます.ボケ量は撮影の際にレンズの絞りを操作することでも実現できますが,合成することで物理的にはありえない絞り値で撮影したようなボケを再現できます.

被写界深度

 被写界深度(Depth of Field)とは,ピントを合わせた部分の前後のピントが合っているように見える範囲のことです.絞りを開いて撮影したボケが多い写真は被写界深度が浅く,逆に絞りを閉じて撮影した全面にピントが合うような写真ほど被写界深度が深い,と言います.特に,被写体深度を深くすることで,全面にピントが合ったようにした写真をパンフォーカスと言ったりします.被写界深度は絞り値の他に,焦点距離や撮影距離も関係します.

深度合成

 被写体の全てにピントが合ったような写真を獲得する手法として,深度合成があります.カメラのピント位置をずらしながら撮影した複数の画像(Focal Stack)を,合成することであたかも全ての面でピントがあったような画像を生成することができます.深度合成はいくつかソフトウェアが存在するので*1,それを使うと簡単に合成することができます.また,OLYMPUSのOM-D E-M1には「深度合成モード」というのがあり,カメラ内で深度合成ができるそうです *2.このように,ピント位置をずらした複数の画像を使うことで,全ての面にピントがあった画像を生成することができます. 

被写界深度の操作

 ピント位置をずらしながら撮影した複数の画像を使って合成することで,被写界深度を自由に操作することができるようになります.今回は,Jacobsらのテクニカルレポート*3を参考に実際のシーンの被写界深度の操作を行いました.

 被写界深度の操作方法について簡単に説明します.下の図は撮影した画像を合成するための手順です.

f:id:raccoon15:20181106134223j:plain

合成の手順

 まず,ピント位置をずらしながら撮影した入力画像(Image)から距離画像(Depth Map)を推定します.入力画像において,ボケがなく,もっともエッジが大きいとき,そのピクセルはピントが合っていると言えます.各入力画像に対してラプラシアンフィルタなどで勾配とり,勾配の大きさが最大になっているときにピントが合っているとして,距離と対応させることで距離画像を生成できます.

 次に距離画像(Depth Map)と入力画像のピント面の距離(Focus Distance)から,各入力画像のボケ量(Defocus Blur)を求めます.このボケ量Cは次式で表せられます.

C=\frac{f}{2N}(1-\frac{S}{\hat{S}})

f焦点距離Nは絞り値,Sは撮影した際のレンズの中心からセンサまでの距離,\hat{S}はピントが合う場合のレンズの中心からセンサまでの距離です.Sとレンズからピント面までの距離Zの関係は次式で表せられます.

\frac{1}{f} = \frac{1}{S} + \frac{1}{Z}

これらの式を用いることで,各入力画像のボケ量の大きさを求めることができます.

 任意のピント位置Z^*,絞り値N^*を入力して,合成のためのボケ量(Requested Defocus)を求めます.このボケ量は先ほど示したボケ量Cと類似の式を用いることで,算出することができます.

 最後に,Requested Defocusに一番近いDefocus Blurを選択することで,ユーザが入力したピント位置,絞り値の画像を合成することができます.

実験方法

 実験に使用したカメラはCanon EOS 6D,レンズはEF50mm F1.8 IIです.レンズは前回の記事で紹介した改造レンズで,フォーカスリングを自由な位置に回転させることができます.

raccoon15.hatenablog.com

 下の図に撮影の様子を示します.対象とするシーンはテクスチャの多い庭です.

f:id:raccoon15:20181106005856j:plain

撮影の様子

対象のシーンについて,無限遠から最短撮影距離までピント面を移動させて20枚の画像を撮影しました.絞りは開放絞り値であるf/1.8で撮影しました.

実験結果

 撮影した画像からの中から,手前の植物にピント面があるときの画像を下の図に示します.

f:id:raccoon15:20181106013000j:plain

撮影シーン(f/1.8)

被写界深度の操作を行い,合成を行った結果を示します.まず,パンフォーカス(|C^*|=0)の場合の合成結果です.図から,手前から奥まで全ての面でピントが合っている画像が得られていることがわかります.

f:id:raccoon15:20181106012828j:plain

合成結果(パンフォーカス)

次に,絞り値をf/5.6とした場合の合成結果です.絞りを大きくすると,被写界深度が深くなり,ボケの量が減ります.f/1.8で撮影したシーンの図と比べると,奥のボケが少し減っていることがわかります.

f:id:raccoon15:20181106012834j:plain

合成結果(f/5.6)

最後に,絞り値をf/1.0とした場合の合成結果です.f/1.0というのは,撮影に用いたレンズではありえない値ですが,合成することで実現できます.f/1.8で撮影したシーンの図と比べると,奥のボケが増えていることがわかります.

f:id:raccoon15:20181106012837j:plain

合成結果(f/1.0)

このように,複数のピント面の画像から被写界深度を自由に操作することができました. 

 合成の過程で生成した距離画像も示します.この画像は,手前ほど黒く,奥ほど白い色として表しています.日差しが差し込んで,白トビしている石の部分では,推定がうまくいっていないですが,他の部分は概ね良さそうです.

f:id:raccoon15:20181106012840j:plain

距離画像の推定結果

*1:Focus stacking - Wikipedia

*2:特別企画:「深度合成」がブツ撮りを変える! - デジカメ Watch

*3:JACOBS, D. E., BAEK, J., AND LEVOY, M. 2012. Focal stack compositing for depth of field control. In Stanford Computer Graphics Laboratory Technical Report