被写界深度合成をしてみる。

皆さんは「被写界深度合成(フォーカス・スタッキング:Focus Stacking)」という技術をご存じでしょうか?

カメラをよく触っている人なら「ピントを合わせる」という操作はなじみ深いと思います。ピントが合っている対象はくっきりと写り、それ以外の部分はぼやけます。通常の写真撮影において、この「ぼけ(被写界深度の浅さ)」は奥行きを感じさせたり、主役を際立たせたりする強力な表現技法です。

しかし、昆虫や植物の標本写真のような学術的な記録や、「手前の対象と奥の対象、両方にピントを合わせたい」といった場合には、この「ぼけ」が障害になってしまいます。ここで活躍するのが被写界深度合成です。 ピント(奥行きの深度)を少しずつずらして撮影した複数枚の画像から、それぞれ「ピントが合っている部分」だけを上手く抽出し、1枚に合成します。これにより、手前から奥まで全体にピントが合った(パンフォーカスな)画像を生成できるというものです。

被写界深度合成を実装してみた

スマホのAI補完と、厳密な合成の違い

最近のスマートフォンは非常に高性能で、あまり設定を意識しなくてもいい感じの画像を出力してくれます。AIを使った自動補完や超解像技術を組み合わせることで、擬似的に「全体にピントが合ったような」画像を生成することも可能です。 しかし、これらはノイズなどから推論して生成している部分があるため、学術用途などの「完全に現実を切り取った記録」とは言えないケースも存在します。

Webベースで被写界深度合成アプリを作ってみた

仕組みの理解も兼ねて、ブラウザ上で動作する被写界深度合成アプリを自作してみることにしました。

実際に合成を試すには、ピント位置を精密にずらした画像群(フォーカスブラケット撮影された画像)が必要です。自分で撮影しても良いのですが、きれいに撮るためにはカメラを完全に固定し、ピントリングを微細に調整し続ける必要があり、機材の都合上かなりハードルが高くなります。

そこで今回は、スタンフォード大学が公開しているデータセット「Lytro Light Field Archive」を利用することにしました。 ここには、撮影後にソフトウェア上でフォーカスを自由に変更できる特殊なカメラ「Lytro Illum(ライトフィールドカメラ)」で撮影されたデータがアーカイブされています。

Stanford大学のLytro Light Field Archive

Lytro Light Field Archive “Flowers & Plants”

参考:Lytro Light Field Archive “Flowers & Plants” [https://lightfields.stanford.edu/flowers_plants.html]

Lytro Light Fieldカメラから複数深度の画像を作る。

参考画像として、スタンフォード大学のアーカイブからピントをずらした画像を作りました。
詳細はこちらの記事で:【Lytro Light Field】Lytro DesktopでLFPファイルを開く方法|ライトフィールド画像のピント調整とJPEG書き出し

サンプルとして、奥から手前まで順にフォーカスの深さが違う画像を20枚用意。

被写界深度合成のために用意したフォーカスが手前の方にあっている画像
奥の方にピントが合った画像
被写界深度合成のために用意したフォーカスが奥の方にあっている画像
手前の方にピントが合った画像

被写界深度合成をしてみる

実装した被写界深度合成の仕組みを(超簡略化して)まとめると、以下の3ステップになります。

  • 画像の特徴点マッチング(位置合わせ) 撮影時の微細なズレや、ピント移動に伴う画角の変化(フォーカスブリージング)を補正するため、画像同士の基準位置を正確に合わせます。
  • ピントの評価値算出 ラプラシアンフィルタなどを利用してエッジ(輪郭)の強さを計算し、各画像における「ピントが合っている度合い」を数値化します。
  • 最良部分の抽出と合成 全体を位置合わせした状態で、同じ座標ごとに評価値が最も高い(一番ピントが合っている)ピクセルを抽出し、境界が自然になるようにブレンドします。

結果 (鮮明になった画像)

被写界深度合成してみた画像

被写界深度合成後の画像

結果を見ると、手前から奥まで全体がぼやけずに鮮明に写った画像を作成することができました。

まとめ

今回は、複数の画像からピントが合った部分だけを抽出して1枚の画像にする「被写界深度合成」のアルゴリズムを実装してみました。

個人的に一番面白かったのは、個別の知識が「実用的な技術」として繋がったことです。 画像処理を学んでいると、「ラプラシアンフィルタ」や「特徴点マッチング」、「ブラー(ぼかし)」といった要素技術を個別に触る機会は多いと思います。しかし、それらが単なるフィルター遊びで終わるのではなく、上手く組み合わせることで「パンフォーカス画像を生成する」という非常に実践的で強力なプログラムになるプロセスは、実装していて非常にワクワクしました。

被写界深度合成は、全体をくっきり見せる必要がある昆虫や植物の標本写真(マクロ撮影)の世界では欠かせない技術として広く使われています。普段何気なく見ている図鑑の綺麗な写真の裏でも、今回実装したような画像処理技術が活躍していると思うと、少し見え方が変わって面白いですね。

関連記事

今回合成に使用した「ピントをずらした画像群」は、Lytro Light Fieldカメラの特殊なデータ(.lfpファイル)から抽出したものです。 手元にカメラがなくても、アーカイブデータから様々なフォーカスの画像を生成する手順について以下の記事でまとめていますので、興味があればこちらもぜひご覧ください。

「具体的にどうやってピントを評価しているの?」「プログラムをゼロから書いてみたい」という方向けに、ラプラシアンフィルタ等を用いたアルゴリズムのフルスクラッチ実装記事

  • ゼロから実装する被写界深度合成
    (記事は現在利用できません: ID 9007)

ここまで読んでいただきありがとうございます。

では、次の記事で。 lumenHero