在 VisualApplets 中的实现

在图 372 中,您可以看到用于计算 HOG 特征的 VA 设计的基本设计结构。 对于来自 CameraLink Base 配置相机的灰度图像,方向梯度直方图(Histogram of Oriented Gradients)是在 HierarchicalBox HOG 中计算的。 在设计 "HOG_9Bins_Histogram.vad" 中,该直方图通过 DMA 发送至 PC。在 VA 设计 "HOG_4Bins_HistogramMax.vad" 和 "HOG_9Bins_HistogramMax.vad" 中,最大分量被 转发至 PC。接下来,我们将解释 "HOG_4Bins_HistogramMax.vad" 的设计结构。另外两个设计与此类似。 我们将针对相应的问题解释设计中可能存在的差异。默认平台为 marathon VCL。该设计的实现可以轻松适配 其他平台或相机配置。

VA 设计 "HOG_9Bins_Histogram.vad"、"HOG_9Bins_HistogramMax.vad" 和 "HOG_4Bins_HistogramMax.vad" 的基本设计结构

图 372. VA 设计 "HOG_9Bins_Histogram.vad"、"HOG_9Bins_HistogramMax.vad" 和 "HOG_4Bins_HistogramMax.vad" 的基本设计结构


您可以在图 373 中查看 HierarchicalBox HOG 的内容。

HierarchicalBox HOG 的内容

图 373. HierarchicalBox HOG 的内容


对于原始输入图像,x 方向和 y 方向的梯度在 HierarchicalBox GradientFilter 中计算。其实现如图 47 所示。算子 FIRkernelNxM 生成一个 3x3 核。算子 FIRoperatorNxM_VerticalEdges 和 FIRoperatorNxM_HorizontalEdges 根据公式 47 选择 x 方向和 y 方向的梯度。

HierarchicalBox GradientFilter 的内容

图 374. HierarchicalBox GradientFilter 的内容


对于这些梯度,根据公式 48 计算的幅值和方向在 box MagnitudeOrientation 中实现(内容和结构见图 375)。box 中的详细注释 有助于理解所实现的公式。

HierarchicalBox MagnitudeOrientation 的内容

图 375. HierarchicalBox MagnitudeOrientation 的内容


像素在 8x8 像素单元中的分组是在 HierarchicalBox ExtractBlocks 中进行的。该 box 的输出链接以 64 像素大小的行形式转发 单元的梯度幅值和方向。此信息是计算方向梯度直方图的输入, 该计算在 HierarchicalBox Histogram 中进行。您可以在图 376 中查看其内容。

HierarchicalBox Histogram 的内容

图 376. HierarchicalBox Histogram 的内容


在这里,梯度方向分配(可位于以下区域内: 更改为 )在框 SplitOrientations中执行,分配到四个 bin 中。这些 bin 是 , , 和 。 对于设计 "HOG_9Bins_Histogram.vad" 和 "HOG_9Bins_HistogramMax.vad",九个 bin( 更改为 中的任意值,步长为 )。 将梯度方向分配到特定 bin 的方式是:计算该方向对于该 bin 的权重。例如,加权并因此 分配到 bin 1 的过程是 ,如图 377.

HierarchicalBox Bin1 的内容

图 377. HierarchicalBox Bin1 的内容


此处权重 根据公式 49 针对 bin 1 进行计算。在此示例中, bin 之间的角度距离为 (算子 CONST_Phi_45Deg 在 box Sub45Deg)。bin 1 的角度 bin 方向 同样为 (算子 CONST_Chi_45Deg)。随后,每个 bin 的加权因子将与梯度幅值相乘(参见图 376)。在 box HistogramColumn_0 更改为 HistogramColumn_3 中,根据公式计算各直方图列的内容(对应每个 bin), 50 其计算方式为所有图像像素上加权梯度幅值的总和。随后,通过使用算子将直方图列进行合并,生成梯度方向直方图(Histogram of Oriented Gradients) MergeKernel_Histogram。 由于每个 Kernel 组件的最后一个像素才是直方图列的真实值,因此它在 box 中被选中 LastPixelOnly。为了考虑 局部梯度的变化,每个单元格的梯度方向直方图(Histogram of Oriented Gradients)被组合成每个块 2x2 个单元格的块, 重叠度为 (参见本节的理论部分)。单元格 组合成块的操作在以下 box 中执行: ConcatenateWithNeighbors. 参见图中的内容。 378.

HierarchicalBox ConcatenateWithNeighbors 的内容

图 378. HierarchicalBox ConcatenateWithNeighbors 的内容


对于每个包含方向梯度直方图信息的单元(由单个像素表示),每个 bin 的直方图 列通过 算子 SplitKernel 进行分离。对于每个内核分量,使用算子 PixelNeighbours1xM 和 LineNeighboursNx1 计算 x 和 y 方向上的下一个单元邻居。算子 FIRoperatorNxM 将 2x2 单元的信息相加。 此处不执行归一化。作为替代实现,可以通过将算子 Const_Enable 设置为零来省去将单元分组为块的步骤。计算出的方向梯度直方图的最大值在 box GetHistogramMax 中选择(参见图 373)。其内容如图 379 所示。在设计 "HOG_9Bins_Histogram.vad" 中,省去了直方图最大值的选择。

HierarchicalBox GetHistogramMax 的内容

图 379. HierarchicalBox GetHistogramMax 的内容


最后,直方图的最大值或直方图本身在 box Visualize 中(参见图 373)显示为 红线。 在此 box 中(路径:box Draw、EnableOriginal),您可以通过设置参数 ModuloCount_Period(计帧数)、Is_InRange(设置帧范围)和 Const_Enable 或始终显示(将 Const_Enable 设置为 1),在若干帧中将原始图像与 HOG 特征一起可视化。最后一步是经由算子 DmaToPC_DMA0 将 HOG 特征传输到 PC。在此,HOG 特征可用作支持向量机(SVM)或卷积神经网络(CNN)中 Object Detection 的描述符。