ループを使用したDepth From Focus

概要

ファイル: \examples\Processing\Loop\DepthFromFocus\DepthFromFocus.vad
\examples\Processing\Loop\DepthFromFocus\DepthFromFocus_NoiseReduction.vad

デフォルトプラットフォーム: imaFlex CXP-12 Quad

簡単な説明

ループを使用して、画像シーケンスからフォーカス画像、インデックス深度マップ、および画像コントラストを計算します。

VisualAppletsのデザイン「DepthFromFocus.vad」は、部分的デフォーカス画像のシーケンスから完全にフォーカスされた画像を計算します。デザイン 「DepthFromFocus_NoiseReduction.vad」では、さらにフォーカスされた画像のノイズを軽減する機能が提供されます。 シーケンスのすべての画像について、カメラのフォーカス設定、画像平面の位置、またはオブジェクトの位置(軸方向)が変更されます。 これを行う際、観察するオブジェクトの一部は常にフォーカスが合っている状態にする必要があり、画像のその他の部分はデフォーカスされます。 さらにこのデザインでは、対応する画像インデックスマップとともに、画像シーケンスの最高ローカルコントラストが計算されます。 このマップは、フォーカスされた出力画像の現在のピクセルがどの画像から取得されたかに関する情報を提供します。 これにより、観察されたオブジェクトの形状を計算することが可能になります。 フォーカスされた画像、画像インデックスマップ、およびコントラストは、赤、緑、青のカラー値としてPCに送信されます。 このデザインは、marathonVCLボード用のCameraLink Base構成のモノクロカメラ向けに実装されています。

理論的背景

部分的デフォーカス画像のシーケンスから完全にフォーカスされた画像を計算するために、すべての単一画像についてローカルコントラストが計算されます。 このコントラストはハイパスフィルターを使用して決定されます:

式 46


現在の画像のローカルコントラストが、この位置における前の画像のローカルコントラストよりも高い場合、現在の画像のピクセル値が使用されます。 そうでない場合は、前の画像のピクセル値が使用されます。この手順は、画像シーケンス全体に対して繰り返されます。 完全にフォーカスされた画像のすべてのピクセルについて、 最高ローカルコントラストを持つ対応する画像のインデックスが保存されます。この情報は、ユーザーに (例えば薄いレンズにおいて、焦点距離と画像距離が既知の場合に)観察されたオブジェクトの形状を復元する可能性を提供します。

VisualAppletsでの実装

図 366に基本的なデザイン構造を示します。モノクロカメラからの部分的デフォーカス画像のシーケンスについて、 完全にフォーカスされた画像、ローカルコントラスト、および最高ローカルコントラストを持つ画像のインデックスマップが、RGBカラーコンポーネントとしてDmaToPCを介してPCに送信されます。 計算はHierarchicalBox DepthFromFocus内で実行されます。

基本設計構造

図 366. 基本的なデザイン構造


図 367に、HierarchicalBox DepthfromFocusの内容を示します。 トランスポートパラメータ IntParamTranslator_TranslateSequenceLength、IntParamReference_ReferenceImageWidth、および IntParamReference_ReferenceImageHeightを使用すると、ボックスDepthFromFocus内の必要なすべてのオペレーターで画像シーケンスの長さ、画像幅、高さを設定することができます。 これを行うには、ボックスDepthFromFocusを右クリックし、「プロパティ」を選択して対応するパラメータを設定するだけです。

HierarchicalBox 内で HighpassFilter ローカルコントラストは、 カーネル上のフィルターを使用して計算されます( 式 46に基づく)。 このボックスの上部出力リンクは現在のピクセル値です。このボックスの下部出力リンクは現在のローカルコントラストです。 オペレーター RxImageLink_Rx2_LoopContrast/TxImageLink_Tx2_LoopContrast は、画像シーケンスから最高ローカルコントラストを計算するループの開始と終了を表します。 画像シーケンスでの計算を開始する際のループの初期条件として、同期および計算の理由から、ブランク画像がHierarchicalBoxに挿入されます。 InitAndResetContrast.

HierarchicalBox DepthFromFocusの内容

図 367. HierarchicalBox DepthFromFocusの内容


HierarchicalBox CompareContrastでは、現在のローカルコントラストが、シーケンス内の前の画像のこの位置におけるローカルコントラストと比較されます。 図 368にこのボックスの内容を示します。現在のローカルコントラストが前の画像のコントラストよりも高い場合、 現在のローカルコントラストがこのHierarchicalBoxの下部出力リンクに転送されます。そうでない場合は、前のローカルコントラストの値が転送されます。 ボックスCompareContrastの上部出力リンクは、インデックス0(現在のコントラストの方が強い)または1(前のコントラストの方が強い)です。

HierarchicalBox CompareContrastの内容

図 368. HierarchicalBox CompareContrastの内容


HierarchicalBox SelectDepthIndex(コンテンツについては図 SelectDepthIndex のコンテンツ">369 を参照)のループ RxImageLink_Rx1_LoopIndexOfBest/TxImageLink_Tx1_LoopDepthIndex において、現在処理中の画像が最も高い局所コントラストを持つ場合、現在の画像インデックス(オペレーター ModuloCount_SequenceIndexCount)が選択されます。そうでない場合は、前の画像の画像インデックスがこのボックスの出力リンクに転送されます。この手順は画像シーケンス全体に対して繰り返されます。その結果として、シーケンス内で最も高い局所コントラストを持つ画像インデックスが計算されます。空の画像挿入による初期条件は、ボックス InitAndResetDepth で実行されます。

HierarchicalBox SelectDepthIndex のコンテンツ

図 369:HierarchicalBox SelectDepthIndex のコンテンツ


画像シーケンスから完全に焦点の合った画像が、ループ RxImageLink_Rx0_LoopPixelValue / TxImageLink_Tx0_LoopPixelValue 内で計算され、その計算はボックス SelectPixelValue で実行されます。そのコンテンツを図 370 に示します。現在の局所コントラストが前の画像の局所コントラストよりも高い場合、現在の画素値が IF オペレーターの出力に転送されます。この手順は画像シーケンス全体に対して繰り返されます。シーケンスの終了時に、完全に焦点の合った画像がボックス LastImageOfSequenceOnly の入力に転送されます。

HierarchicalBox SelectPixelValue のコンテンツ

図 370:HierarchicalBox SelectPixelValue のコンテンツ


図 371 にこのボックスのコンテンツを示します。現在最も高い局所コントラストを持つ画素値、対応する画像深度インデックス、および現在最も高い局所コントラストが、RGB カラー成分として結合されます。完全に焦点の合った画像、最も高い局所コントラスト、および対応する画像深度インデックスを持つ最後の RGB 画像のみが、ボックスの出力および DMA 転送を介して PC へ転送されます。

HierarchicalBox LastImageOfSequenceOnly のコンテンツ

図 371:HierarchicalBox LastImageOfSequenceOnly のコンテンツ


VA デザイン「DepthFromFocus_NoiseReduction」では、アダプティブ Median filter を使用して、結果のフォーカス済み画像内の局所ノイズを軽減する機能があります。このフィルターは HierarchicalBox AdaptiveMedian 内にあります。現在の画素に局所ノイズがある場合は、局所 Median が選択されます。現在の位置に局所ノイズがない場合は、現在の画素値が選択されます。局所ノイズは、ローパスフィルターとアダプティブしきい値 IS_GreaterThan_Threshold によって判定されます。この方法により、局所構造のコントラストが失われるのを防ぎながら、ノイズを軽減することができます。