使用循环的 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”则额外提供了降低对焦图像噪声的功能。对于序列中的每幅图像,相机的焦距设置、像平面位置或物距(在轴向方向)都会发生变化。在此过程中,被观测物体的一部分应始终保持对焦,而图像的其他部分则处于散焦状态。此外,该设计还会计算图像序列的最高局部对比度以及相应的图像索引 map。该 map 提供了当前对焦输出图像中的像素取自哪幅图像的信息。这使得计算被观测物体的形状成为可能。对焦图像、图像索引 map 和对比度作为红、绿色和蓝色分量发送到 PC。该设计针对 CameraLink Base 配置下的黑白相机以及 marathonVCL 板卡进行了实现。

理论背景

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

公式 46。


如果当前图像中的局部对比度高于上一图像在此位置的局部对比度,则使用当前图像的像素值。 否则,使用上一图像的像素值。对整个图像序列重复此过程。 对于完全对焦图像中的每个像素, 会保存具有最高局部对比度的对应图像的索引。这些信息使用户能够(例如对于薄透镜,如果焦距 和物距已知)恢复被观测物体的形状。

在 VisualApplets 中的实现

图 366 展示了基本设计结构。对于来自黑白相机的部分散焦图像序列,完全对焦的图像、局部对比度和具有最高局部对比度的图像的索引 map 会作为 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 的内容


在循环 RxImageLink_Rx1_LoopIndexOfBest/TxImageLink_Tx1_LoopDepthIndex 内的 HierarchicalBox SelectDepthIndex(内容见图 369)中,如果当前图像具有最高局部对比度,则会选择当前图像索引(算子 ModuloCount_SequenceIndexCount)。 否则,上一幅图像的图像索引将被转发至该 box 的输出链。 此过程将对整个图像序列重复进行。最终计算出该序列中具有最高局部对比度的图像索引。 通过插入空白图像来进行的初始条件设置在 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 来确定的。 通过这种方法,既可以防止局部结构的对比度丢失,又能减少噪声。