使用循环的 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。该设计是针对 marathon 板卡上的 CameraLink Base 配置灰度相机而实现的。

理论背景

为了从部分散焦的图像序列中计算出完全聚焦的图像,需要计算单幅图像的局部对比度。 该对比度通过高通滤波器确定:

公式 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 的输出链接。 此过程会在整个图像序列中重复进行。作为结果,将计算出序列中具有最高局部对比度的图像索引。 插入空白图像的初始条件在 box InitAndResetDepth 中执行。

HierarchicalBox SelectDepthIndex 的内容

图 369. HierarchicalBox SelectDepthIndex 的内容


通过在 box SelectPixelValue 中执行计算,在循环 RxImageLink_Rx0_LoopPixelValue/ TxImageLink_Tx0_LoopPixelValue 中计算出图像序列中完全对焦的图像。图 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 来确定的。通过这种方法,可以防止局部结构的对比度丢失,同时又能降低噪声。