使用迴圈的 Depth From Focus

簡要說明

檔案: \examples\Processing\Loop\DepthFromFocus\DepthFromFocus.vad
\examples\Processing\Loop\DepthFromFocus\DepthFromFocus_NoiseReduction.vad

Default Platform: imaFlex CXP-12 Quad

短說明

使用迴圈從影像序列計算對焦影像、索引深度圖及影像對比度。

VisualApplets 設計「DepthFromFocus.vad」可從一系列部分失焦的影像中計算出完全對焦的影像。設計「DepthFromFocus_NoiseReduction.vad」則額外提供了降低對焦影像中雜訊的功能。針對序列中的每張影像,相機的對焦設定、影像平面位置或物件位置(在軸向方向)都會改變。在此情況下,所觀察物件的一部分應始終保持對焦,而影像的所有其他部分則處於失焦狀態。此外,在此設計中,會計算影像序列的最高區域對比度以及相應的影像索引圖。此圖可提供關於對焦輸出影像中目前像素取自哪張影像的資訊。這提供了計算所觀察物件形狀的可能性。對焦影像、影像索引圖和對比度會作為紅、綠、藍色彩值傳送至 PC。該設計是針對 CameraLink Base 設定中的黑白相機以及 marathonVCL 板卡所實作。

理論背景

為了從一系列部分失焦的影像中計算出完全對焦的影像,會計算每張單一影像的區域對比度。此對比度透過高通濾波器決定:

方程式 46。


如果目前影像中的區域對比度高於前一張影像中該位置的區域對比度,則使用來自目前影像的像素值。否則,使用來自前一張影像的像素值。此程序會針對完整的影像序列重複進行。對於完全對焦影像中的每個像素,都會儲存具有最高區域對比度的相應影像索引。此資訊為使用者提供了解原由(例如對於薄透鏡,若焦距和影像距離已知)以還原所觀察物件形狀的可能性。

在 VisualApplets 中的實作

圖 366 顯示了基本設計結構。對於來自黑白相機的部分失焦影像序列,完全對焦的影像、區域對比度和具有最高區域對比度的影像索引圖會作為 RGB 色彩分量透過 DmaToPC 傳送至 PC。計算在 HierarchicalBox DepthFromFocus 中執行。

基本設計結構

圖 366. 基本設計結構


在圖 367 中,您可以看到 HierarchicalBox DepthfromFocus 的內容。透過傳輸參數 IntParamTranslator_TranslateSequenceLength、IntParamReference_ReferenceImageWidth 與 IntParamReference_ReferenceImageHeight,您可以設定方塊 DepthFromFocus 中所有必要運算子中的影像序列長度、影像寬度和高度。為此,只需在方塊 DepthFromFocus 上按一下滑鼠右鍵,選取「properties」,然後設定對應的參數。

在 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 的內容


在迴圈 RxImageLink_Rx1_LoopIndexOfBest/TxImageLink_Tx1_LoopDepthIndex 中的 HierarchicalBox SelectDepthIndex(內容見圖 369)中,若當前圖像具有最高局部對比度,則會選取當前圖像索引(運算子 ModuloCount_SequenceIndexCount)。否則,前一幅圖像的圖像索引將被轉發至此 Box 的輸出 Link。此程序會對整個圖像序列重複執行。其結果是計算出序列中具有最高局部對比度的圖像索引。插入空白圖像的初始條件是在 Box InitAndResetDepth 中執行的。

HierarchicalBox SelectDepthIndex 的內容

圖 369. HierarchicalBox SelectDepthIndex 的內容


序列中完全對焦的圖像是在迴圈 RxImageLink_Rx0_LoopPixelValue/TxImageLink_Tx0_LoopPixelValue 中計算得出的,其計算是在 Box SelectPixelValue 中執行。圖 370 顯示了其內容。若當前局部對比度高於前一幅圖像中的局部對比度,則當前畫素值將被轉發至 IF 運算子的輸出。此程序會對整個圖像序列重複執行。在序列結束時,完全對焦的圖像將被轉發至 Box LastImageOfSequenceOnly 的輸入。

HierarchicalBox SelectPixelValue 的內容

圖 370. HierarchicalBox SelectPixelValue 的內容


圖 371 顯示了此 Box 的內容。具有當前最高局部對比度的畫素值、對應的圖像深度索引以及當前最高局部對比度會組合成 RGB 色彩分量。只有包含完全對焦圖像、最高局部對比度及對應圖像深度索引的最後一個 RGB 圖像才會被轉發至 Box 的輸出,並透過 DMA 傳輸至 PC。

HierarchicalBox LastImageOfSequenceOnly 的內容

圖 371. HierarchicalBox LastImageOfSequenceOnly 的內容


在 VA 設計 "DepthFromFocus_NoiseReduction" 中,可以透過適應性 Median Filter 降低所得對焦圖像中的局部雜訊。您可以在 HierarchicalBox AdaptiveMedian 中找到此濾波器。若當前畫素存在局部雜訊,則會選取局部 Median。若當前位置沒有局部雜訊,則會選取當前畫素值。局部雜訊是透過低通濾波器與適應性閥值 IS_GreaterThan_Threshold 來確定的。透過此方法,可以防止局部結構的對比度遺失,同時降低雜訊。