在 VisualApplets 中的實作

在圖400中,您可以看到用於計算 HOG 特徵的 VA 設計的基本結構。 對於來自採用 CameraLink 基本配置的相機所拍攝的灰階影像,其定向梯度直方圖(HOG)是在 HierarchicalBox 中計算的 HOG中計算。 該直方圖會透過 DMA 傳送至 PC,此過程發生於「HOG_9Bins_Histogram.va」設計中。在「HOG_4Bins_HistogramMax.va」 及「HOG_9Bins_HistogramMax.va」這兩項 VA 設計中,最大值分量會 傳送至 PC。 以下將說明「HOG_4Bins_HistogramMax.va」的設計結構。其結構與 其他兩個設計類似。針對各設計中的相關問題,我們將說明可能存在的差異。 預設平台為marathon VCL。這些設計的實作可輕鬆調整 以適應其他平台或相機配置。

VA 設計「HOG_9Bins_Histogram.va」、「HOG_9Bins_HistogramMax.va」及「HOG_4Bins_HistogramMax.va」的基本設計架構

圖 400. VA 設計「HOG_9Bins_Histogram.va」、「HOG_9Bins_HistogramMax.va」及「HOG_4Bins_HistogramMax.va」的基本設計結構


您可以查看 HierarchicalBox 的內容 HOG 的內容,請參閱圖401。

HierarchicalBox HOG 的內容

圖 401. HierarchicalBioxHOG的內容


對於原始輸入影像,x 方向和 y 方向的梯度是在 HierarchicalBox GradientFilter 中計算的。其實作方式如圖 47 所示。FIRkernelNxM 算子會產生一個 3x3 核心。FIRoperatorNxM_VerticalEdges 和 FIRoperatorNxM_HorizontalEdges 算子則根據方程式 47 來選取 x 方向和 y 方向的梯度。

HierarchicalBox GradientFilter 的內容

圖 402. HierarchicalBoxGradientFilter的內容


針對此梯度,已根據式(48)將其模值與方向實作於該方塊中 大小與方向 中實現(內容與結構請參見圖403)。方框內的詳細註解 有助於理解所實作的公式。

HierarchicalBox 的「大小與方位」內容

圖 403. HierarchicalBox 的MagnitudeOrientation內容


將像素分組為 8x8 像素的方塊,此操作是在 HierarchicalBox 中執行的 ExtractBlocks中進行。此盒子的輸出連結會將 單元格的梯度幅值與方向,以 64 像素寬的線條形式傳遞出去。這些資訊將作為輸入,用於 計算定向梯度直方圖, 該運算在 HierarchicalBox Histogram中進行。您可參閱圖404 了解其內容。

HierarchicalBox Histogram 的內容

圖 404. HierarchicalBox直方圖的內容


在此,梯度方向(可位於 設為 區域中)的分配會在 SplitOrientations算子中執行至四個 bin。這些 bin 為 , , 進行明確的生命週期管理即呼叫 . 針對「HOG_9Bins_Histogram.va」與「HOG_9Bins_HistogramMax.va」這兩個設計,共九個區間( 設為 步長為 )。 梯度方向對特定 bin 的分配方式是計算該方向對該 bin 的權重。例如,針對 bin 1 的權重計算以及因此產生的分配(即 ),如圖 405.

HierarchicalBox Bin1 的內容

圖 405. HierarchicalBoxBin1的內容


在此,bin 1 的權重 根據方程式 49 進行計算。在這個範例中,bin 之間的夾角距離為 CONST_Phi_45Deg (operator (位於 box Sub45Deg中)。 bin 1 的角度 bin 方向也是 (operator CONST_Chi_45Deg)。然後,各個 bin 的加權因子會乘以梯度幅值(見圖 404)。在 boxes HistogramColumn_0 設為 HistogramColumn_3 中,根據方程式計算每個直方圖行(針對每個 bin)的內容,即所有影像像素的加權梯度幅值總和。接著,透過使用 50 operator 合併直方圖行來產生 Histogram of Oriented Gradients。 MergeKernel_Histogram. 由於只有每個核心元件的最後一個像素才是直方圖欄位的真實值,因此會在方塊中選取該像素 LastPixelOnly. 為了納入 區域梯度變化的考量,每個儲存格的梯度方向分佈圖(Histogram of Oriented Gradients)會組合成大小為 2x2 個儲存格的區塊, 重疊區域為 (請參閱本節的理論部分)。儲存格組合成 區塊的操作是在方塊中執行 ConcatenateWithNeighbors。其內容請參見圖 406.

HierarchicalBox ConcatenateWithNeighbors 的內容

圖 406. HierarchicalBox 的「ConcatenateWithNeighbors」內容


對於每個包含「定向梯度直方圖」資訊的單元格(由單一像素表示),該直方圖 中各區間的欄位會以 運算子分隔 SplitKernel運算子分隔。針對每個核函數分量,會使用運算子 PixelNeighbours1xM 及 LineNeighboursNx1運算子來計算。 FIRoperatorNxM 會將 2x2 個單元的資訊加總起來。 此處不會進行正規化。作為另一種實現方式,可透過設定運算子 將單元分組為區塊的步驟省略 ,方法是將運算子 Const_Enable 設為零,即可省略將單元分組為區塊的步驟。計算出的定向梯度直方圖的最大值將被選取並存入方塊 GetHistogramMax 中選取計算出的方向梯度直方圖的最大值(參見圖 401)。其內容如圖407 所示。在設計 “HOG_9Bins_Histogram.va” 中,省略了直方圖最大值的選取步驟。

HierarchicalBox GetHistogramMax 的內容

圖 407. HierarchicalBox 的GetHistogramMax內容


最後,直方圖的最大值或直方圖本身會以箱線圖的形式呈現 以 (參見圖401)中以 紅色線條呈現。 在此方框中(路徑:box 繪圖、 啟用原始)中,您可以透過設定參數 ModuloCount_Period (計數幀數)、 Is_InRange (設定幀範圍)以及 Const_Enable 或始終 (設定 Const_Enable 設為一)。最後一步,HOG 特徵會透過運算子 DmaToPC_DMA0將 HOG 特徵傳輸至電腦。在此,HOG 特徵可用作支援向量機(SVP)或卷積 神經網路(CNN)中物件偵測的描述子。