Depth From Focus Using Loops

簡短描述

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

預設平台: imaFlex CXP-12 Quad

簡短說明

利用迴圈從一組影像序列中計算出聚焦影像、折射率深度圖以及影像對比度。

VisualApplets 設計「DepthFromFocus.vad」可根據一組部分失焦的 影像序列,計算出完全對焦的影像。設計 「DepthFromFocus_NoiseReduction.vad」則額外提供了降低對焦影像中雜訊的功能。 對於序列中的每張影像,都會變更相機的對焦設定、影像平面位置或物體位置(在軸向 方向上)。在此過程中,被觀測物體的某一部分 應始終處於對焦狀態,而影像中的其他部分則處於失焦狀態。此外,在此 設計中,會透過對應的影像索引圖,計算影像序列中 最高的局部對比度。 此圖可提供資訊,說明 當前 對焦輸出影像中的像素取自哪一張影像。這使得計算所觀測物體的形狀成為可能。 對焦影像、影像索引 圖以及對比度,會以紅、綠、藍三種色彩值傳送至電腦。此設計已針對採用 CameraLink Base 配置的 marathonVCL 板卡上的灰階攝影機進行實作。

Theoretical Background

為了從一組部分失焦的影像中計算出完全對焦的影像,會先計算每張 影像的局部對比度。 此對比度是透過高通濾波器來確定的:

方程式 46。


若當前影像在此位置的局部對比度高於前一張影像的局部對比度,則採用 當前影像的像素值。 否則則採用前一張影像的像素值。此程序會針對完整的影像序列重複進行。 對於完全對焦的 影像中的每個像素,都會儲存其對應且局部對比度最高的影像之索引。此資訊讓使用者能夠 (例如對於薄透鏡,若已知焦距 及成像距離)還原所觀測物體的形狀。

在 VisualApplets 中的實作

圖366顯示了基本設計結構。對於來自灰階攝影機的一系列部分失焦影像, 會將一張完全對焦的影像、局部對比度,以及局部對比度最高的影像之索引圖, 透過 DmaToPC 傳送至 PC。 計算是在 HierarchicalBox 中進行的 DepthFromFocus中進行。

基本設計結構

圖 366. 基本設計結構


在圖367中,您可以看到 HierarchicalBox 的內容 DepthfromFocus。 透過傳輸參數 IntParamTranslator_TranslateSequenceLength、 IntParamReference_ReferenceImageWidth 以及 IntParamReference_ReferenceImageHeight ,您可在此方塊中設定所有必要運算子所需的影像序列長度、影像寬度及高度 DepthFromFocus中,可設定圖像序列長度、圖像寬度及高度。操作時,只需在該方塊上 DepthFromFocus方塊上,選取「屬性」,並設定 相應的參數。

在 HierarchicalBox 高通濾波器 局部對比度是透過對一個圖像套用濾波器來計算的 根據 方程式 46. 此方塊的上方輸出連結為當前像素值。此方塊的下方輸出連結為當前的局部對比度。 運算子 RxImageLink_Rx2_LoopContrast/TxImageLink_Tx2_LoopContrast 代表迴圈的起點與終點 用於從影像序列中計算出最高的局部對比度。當開始對 一組影像序列進行計算時,作為迴圈的初始條件, 會基於同步與計算考量,在 HierarchicalBox 中插入一張空白影像 InitAndResetContrast.

HierarchicalBox 的 DepthFromFocus 屬性內容

圖 367. HierarchicalBox 的DepthFromFocus內容


在 HierarchicalBox 中 CompareContrast 會將當前的局部對比度與該序列中上一幀影像在相同位置的局部對比度進行比較。 圖368顯示了此方塊的內容。若當前的局部對比度高於前一張影像中的值, 則當前的局部對比度會被傳遞至此 HierarchicalBox 的下層輸出連結;反之,則會傳遞 前一次的局部對比度值。此方塊的上層輸出 連結 CompareContrast 的輸出連結,其值為 0(當前對比度較強)或 1(前一幀對比度較強)。

HierarchicalBox 中的「比較與對比」內容

圖 368. HierarchicalBox 的內容:比較與對比


在 HierarchicalBox 中 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 傳輸至個人電腦。

HierarchicalBox 的內容:僅限序列中的最後一張圖片

圖 371. HierarchicalBox 的內容:僅限序列中的最後一張圖片


在 VA 設計「DepthFromFocus_NoiseReduction」中,可透過自適應中值濾波器來降低 生成的對焦影像中的局部雜訊。 您可以在 HierarchicalBox 中找到此濾波器 AdaptiveMedian中。若當前像素存在局部雜訊,則選用局部中值;若 當前位置無局部雜訊,則選用當前像素值。局部雜訊是透過低通 濾波器與自適應閾值 IS_GreaterThan_Threshold來判定。透過此方法,既能避免局部結構的對比度流失,又能有效降低雜訊。