实施VisualApplets

图372展示了用于计算 HOG 特征的 VA 设计的基本结构。对于 CameraLink 基本配置下相机拍摄的灰度图像,在 HierarchicalBox HOG中计算方向梯度直方图。该直方图通过 DMA 发送到 PC,具体实现见设计“HOG_9Bins_Histogram.vad”。在 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. HierarchicalBiox HOG的内容


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

HierarchicalBox GradientFilter 的内容

图 374. 分层盒梯度滤波器的内容


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

HierarchicalBox MagnitudeOrientation 的内容

图 375. 分层框的内容幅度方向


在 HierarchicalBox ExtractBlocks中,像素被分组为 8x8 像素的单元格。该框的输出链接以 64 像素长的线条形式传递单元格的梯度幅值和方向。这些信息用于计算方向梯度直方图,该计算在 HierarchicalBox Histogram中完成。您可以在图376中查看其内容。

HierarchicalBox Histogram 的内容

图 376. 分层框直方图的内容


在此,梯度方向分配(其区域可处于 变为 )在框 SplitOrientations中划分为四个 bin。这些 bin 为 , , 和 对于设计“HOG_9Bins_Histogram.vad”和“HOG_9Bins_HistogramMax.vad”,有九个箱( 变为 范围内的任意值,步长为 )。 梯度方向分配到特定区间的方式是:计算该方向对于该区间的权重。例如,权重及因此分配到区间 1(即 )的情况如图 377.

HierarchicalBox Bin1 的内容

图 377. HierarchicalBox Bin1的内容


在此处,权重 。最后,将各个颜色分量合并(参见图 49 是为区间 1 计算的。在此示例中,区间之间的角度距离为 CONST_Phi_45Deg (算子 (位于 盒 Sub45Deg中)。区间 1 的角度区间方向 也是 (算子 CONST_Chi_45Deg)。然后,每个区间的加权因子与梯度幅值相乘(参见图 376)。在盒 HistogramColumn_0 变为 HistogramColumn_3 中,根据公式计算每个直方图列(针对每个区间)的内容,即所有图像像素的加权梯度幅值的总和。方向梯度直方图随后通过使用算子 50 合并直方图列来生成 MergeKernel_Histogram。 只有每个核分量的最后一个像素才是直方图列的真实值,因此它在盒中被选定 LastPixelOnly。为了考虑局部梯度变化,每个单元的定向梯度直方图(Histogram of Oriented Gradients)被组合成每个块 2x2 个单元大小的块,重叠度为 (参见本节的理论部分)。单元向块的组合是在方框 ConcatenateWithNeighbors中执行的。其内容见图 378.

HierarchicalBox ConcatenateWithNeighbors 的内容

图 378. HierarchicalBox ConcatenateWithNeighbors的内容


对于每个包含方向梯度直方图信息的单元格(由单个像素表示),使用运算符SplitKernel将每个 bin 的直方图列分开。对于每个核分量,使用运算符PixelNeighbours1xM和LineNeighboursNx1计算 x 和 y 方向上的相邻单元格。运算符FIRoperatorNxM将 2x2 单元格的信息求和。此处未执行归一化。作为一种替代实现,可以通过将运算符Const_Enable设置为零来省略单元格分组到块中。在GetHistogramMax框中选择计算出的方向梯度直方图的最大值(参见图373 )。其内容如图379所示。在设计“HOG_9Bins_Histogram.vad”中,省略了直方图最大值的选择。

HierarchicalBox GetHistogramMax 的内容

图 379. HierarchicalBox GetHistogramMax的内容


最后,直方图的最大值或直方图本身以红线形式显示在“可视化”框中(参见图373 )。在该框中(路径:框“绘制” ,启用原始图像),您可以通过设置参数ModuloCount_Period (帧数)、 Is_InRange (帧范围)和Const_Enable (常量启用或始终启用,即Const_Enable设置为 1)来可视化若干帧的原始图像以及 HOG 特征。最后,HOG 特征通过运算符DmaToPC_DMA0传输到 PC。此处,HOG 特征可用作支持向量机 (SVP) 或卷积神经网络 (CNN) 中的目标检测描述符。