0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Last updated at Posted at 2025-08-24

0. 被写界深度合成とは?

一部の領域にピントが合った画像群から、全領域にピントがあった画像(全焦点画像)を合成する処理。

入力画像群

近距離フォーカス 中距離フォーカス 遠距離フォーカス

合成結果

fused_pyramid.jpg

0.1. 被写界深度とボケ

  • 被写界深度(Depth of Field, DOF) とは、カメラでピントが合っているように見える空間(距離範囲)のこと
  • 被写界深度は主にレンズの絞り(F値)で決まる
  • 被写界深度が狭くなるほど、ピント面以外は大きくボケる

0.2. フォーカスブリージング

  • 単焦点レンズでもピント面を動かすとレンズの位置調整が行われるため、画角がわずかに変化する(フォーカスブリージング
  • ピントを近くに合わせると画角が狭くなり、遠くに合わせると画角が広がる傾向がある

1. 合成処理の流れ

  1. 画像アラインメント
  2. フォーカスマップ計算
  3. 画像合成
    1. 重み付き平均合成
    2. ピラミッド合成

1.1. 画像アラインメント

  • フォーカスブリージングによって発生する微小な画角変化に対応する必要がある
  • 画像間のアフィン変換(拡大縮小・回転・並進・せん断)を推定することで、基準画像にアラインメントする
  • 最も画角が狭い近距離フォーカス画像を基準とし、他の画像をアライメントする

アラインメント結果

  • 上がアラインメント前、下がアラインメント後の画像
近距離フォーカス 中距離フォーカス 遠距離フォーカス

1.2. フォーカスマップ計算

  • 各画像に対してラプラシアンフィルタを適用し、エッジの強さ(ピントが合っている度合い)を評価
  • ガウシアンフィルタによってエッジを広げ、フォーカスマップを生成
近距離フォーカス 中距離フォーカス 遠距離フォーカス

1.3. 画像合成

1.3.1. 重み付き平均合成(単一スケール)

  • 入力画像毎のフォーカスマップを重みとして使う
  • 各画素毎に重み付き平均することで、1枚の全焦点画像を合成

1.3.2. ピラミッド合成(マルチスケール)

  • 入力画像からラプラシアンピラミッドに分解
  • 1.2.で生成したフォーカスマップをガウシアンピラミッドに分解
  • 各スケールごとに重み付き平均し、合成ラプラシアンピラミッドを構築
  • 合成ラプラシアンピラミッドを再構成して全焦点画像を取得

image.png

合成結果

  • 単純な加重平均合成では、エッジ部分(猫の目の領域等)にアーティファクトが発生しやすい
  • マルチスケール情報を活用したピラミッド合成では、大域的な構造は粗い階層で合成され、局所的な構造は細かい階層で合成されるため、エッジ領域でもアーティファクトの少ない画像合成が可能
重み付き平均合成 ピラミッド合成

2. 実装例

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?