在图 394 中,您可以看到用于计算 HOG 特征的 VA 设计的基本设计结构。 对于来自 CameraLink 基本配置相机的灰度图像,方向梯度直方图在 HierarchicalBox HOG 中进行计算。 在设计 "HOG_9Bins_Histogram.va" 中,该直方图通过 DMA 发送到 PC。在 VA 设计 "HOG_4Bins_HistogramMax.va" 和 "HOG_9Bins_HistogramMax.va" 中,最大分量被 转发到 PC。接下来我们将解释 "HOG_4Bins_HistogramMax.va" 的设计结构。另外两个设计与此类似。 我们将针对相关问题解释设计中可能存在的差异。默认平台为 marathon VCL。设计实现可以轻松调整 以适应其他平台或相机配置。
图 394. VA 设计 "HOG_9Bins_Histogram.va"、"HOG_9Bins_HistogramMax.va" 和 "HOG_4Bins_HistogramMax.va" 的基本设计结构
您可以在图 395 中看到 HierarchicalBox HOG 的内容。
对于原始输入图像,x 方向和 y 方向的梯度在 HierarchicalBox GradientFilter 中计算。其实现如图 47 所示。算子 FIRkernelNxM 生成一个 3x3 核。算子 FIRoperatorNxM_VerticalEdges 和 FIRoperatorNxM_HorizontalEdges 根据公式 47 选择 x 方向和 y 方向的梯度。
对于这些梯度,根据公式 48 计算幅值和方向,并在盒子 MagnitudeOrientation 中实现(内容和结构见图 397)。盒子中的详细注释 有助于理解所实现的公式。
像素分组为 8x8 像素的单元是在 HierarchicalBox ExtractBlocks 中执行的。该盒子的输出链接以 64 像素大小的行形式转发 单元的梯度幅值和方向。此信息是计算方向梯度直方图的输入, 该计算在 HierarchicalBox Histogram 中执行。您可以在图 398 中看到其内容。
在这里,梯度方向分配(可位于以下区域内:
更改为
)在框 SplitOrientations中执行,分配到四个 bin 中。这些 bin 是
,
,
和
。
对于设计“HOG_9Bins_Histogram.va”和“HOG_9Bins_HistogramMax.va”,存在九个 bin(
更改为
中的任意值,步长为
)。
将梯度方向分配到特定 bin 的方式是:计算该方向对于该 bin 的权重。例如,加权并因此
分配到 bin 1 的过程是
,如图
399.
此处权重
根据公式
49 针对 bin 1 进行计算。在此示例中,
bin 之间的角度距离为
(算子 CONST_Phi_45Deg 在
box Sub45Deg)。bin 1 的角度 bin 方向
同样为
(算子 CONST_Chi_45Deg)。随后,每个 bin 的加权因子将与梯度幅值相乘(参见图 398)。在 box
HistogramColumn_0 更改为 HistogramColumn_3 中,根据公式计算各直方图列的内容(对应每个 bin),
50 其计算方式为所有图像像素上加权梯度幅值的总和。随后,通过使用算子将直方图列进行合并,生成梯度方向直方图(Histogram of
Oriented Gradients) MergeKernel_Histogram。
由于每个 Kernel 组件的最后一个像素才是直方图列的真实值,因此它在 box 中被选中
LastPixelOnly。为了考虑
局部梯度的变化,每个单元格的梯度方向直方图(Histogram of Oriented Gradients)被组合成每个块 2x2 个单元格的块,
重叠度为
(参见本节的理论部分)。单元格
组合成块的操作在以下 box 中执行: ConcatenateWithNeighbors. 参见图中的内容。
400.
对于包含方向梯度直方图信息的每个单元(由单个像素表示),每个 bin 的直方图 列使用算子 SplitKernel 进行分离。对于每个内核分量, 使用算子 PixelNeighbours1xM 和 LineNeighboursNx1 计算 x 和 y 方向上的下一个单元邻居。 算子 FIRoperatorNxM 将 2x2 个单元的信息相加。 此处不执行归一化。作为替代实现,可以通过将算子 Const_Enable 设置为零来省略将单元分组为块的操作。 计算出的方向梯度直方图的最大值在盒子 GetHistogramMax 中选择(参见图 395)。 其内容如图 401 所示。在设计 "HOG_9Bins_Histogram.va" 中,省略了直方图最大值的选择。
最后,直方图的最大值或直方图本身在盒子 Visualize(参见图 395)中以红线形式可视化。 在此盒子中(路径:盒子 Draw,EnableOriginal),您可以通过设置参数 ModuloCount_Period(计算帧数)、Is_InRange(设置帧范围)和 Const_Enable 或者始终(将 Const_Enable 设置为 1)来将原始图像与 HOG 特征一起可视化若干帧。 作为最后一步,HOG 特征通过算子 DmaToPC_DMA0 传输到 PC。 在此处,HOG 特征可用作支持向量机 (SVM) 或卷积神经网络 (CNN) 中Object Detection的描述符。

上一页

