在 VisualApplets 中實作

在圖 372 中,您可以看到用於計算 HOG 特徵的 VA 設計的基本設計結構。 對於來自 CameraLink 基本配置相機的灰階影像,會在 HierarchicalBox HOG 中計算定向梯度直方圖 (Histogram of Oriented Gradients)。 在設計「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 的權重。舉例來說,權重計算以及因此 ,如圖所示。 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。為了考慮 局部梯度變化,每個儲存格的方向梯度直方圖會組合成大小為每個區塊 2x2 個儲存格的區塊, 重疊為 (見本節的理論部分)。儲存格組合成 區塊的操作是在 box 中執行 ConcatenateWithNeighbors。請參閱圖中的內容。 378.

HierarchicalBox ConcatenateWithNeighbors 的內容

圖 378. HierarchicalBox ConcatenateWithNeighbors 的內容


對於包含定向梯度直方圖資訊的每個儲存格(由單個像素表示),每個 bin 的直方圖 欄位會使用 operator SplitKernel 進行分離。對於每個 kernel 元件,x 和 y 方向上的下一個儲存格相鄰項會透過 operator PixelNeighbours1xM 與 LineNeighboursNx1 計算。 operator FIRoperatorNxM 將 2x2 儲存格的資訊加總。 此處不執行正規化。作為替代實作,可以透過將 operator 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 特徵一起視覺化顯示多個影格。 作為最後一步,HOG 特徵會透過 operator DmaToPC_DMA0 傳輸至 PC。 在此處,HOG 特徵可用作支援向量機 (SVM) 或卷積神經網路 (CNN) 中 Object Detection 的描述元。