VisualAppletsでの実装

図 372に、HOG特徴量を算出するためのVAデザインの基本デザイン構造を示します。 CameraLink Base構成のカメラからのグレースケール画像に対して、HierarchicalBox HOG内で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」のデザイン構造について説明します。他の2つのデザインについても同様です。 対応する事項におけるデザインの可能な違いについては適宜解説します。デフォルトのプラットフォームは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に従う勾配強度と方向がボックス MagnitudeOrientation(内容と構造については図 375を参照)に実装されています。ボックス内の詳細なコメントは、 実装された数式を理解するのに役立ちます。

HierarchicalBox MagnitudeOrientation の内容

図375. HierarchicalBox MagnitudeOrientationの内容


8x8ピクセルのセルへのピクセルのグループ化は、HierarchicalBox ExtractBlocksで実行されます。このボックスの出力リンクは、64ピクセルのサイズのラインの形式で、セルの勾配強度と方向を 転送します。この情報は、HierarchicalBox Histogramで実行される HOGの計算の入力となります。その内容は図 376に示されています。

HierarchicalBox Histogram の内容

図376. HierarchicalBox Histogramの内容


ここでは、特定の領域にある勾配方向の を の 4 つのビンへの割り当てが、ボックス SplitOrientationsで行われます。ビンは , , および . デザイン「HOG_9Bins_Histogram.vad」および「HOG_9Bins_HistogramMax.vad」の場合、9つのビン( を 次のステップサイズで: )が存在します。 特定のビンへの勾配方向の割り当ては、その方向がビンに対して持つ重みを計算する方法で行われます。例として、ビンの重み付けとその結果としてのビン 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 において、式 50 に従った各ヒストグラム列(各bin)の内容が、すべての画像ピクセルにわたる重み付けされた勾配マグニチュードの総和として計算されます。その後、オペレーター MergeKernel_Histogramを使用してヒストグラム列をマージすることにより、HOG(Histogram of Oriented Gradients)が生成されます。各カーネルコンポーネントの最後のピクセルのみがヒストグラム列の真の値であるため、これはbox LastPixelOnlyで選択されます。局所的な勾配の変化に対応するため、各セルのHOGは、 のオーバーラップを持つ、1ブロックあたり2x2セルのサイズを持つブロックに結合されます(このセクションの理論編を参照)。セルからブロックへの結合は、box ConcatenateWithNeighbors。その内容については図を参照してください。 378.

HierarchicalBox ConcatenateWithNeighborsの内容

図378. HierarchicalBox ConcatenateWithNeighborsの内容


HOGに関する情報を持つ各セル(単一のピクセルで表される)について、各ビンのヒストグラム列が 演算子 SplitKernelによって分離されます。各カーネルコンポーネントについて、x方向とy方向の隣接セルが演算子 PixelNeighbours1xMおよびLineNeighboursNx1によって計算されます。演算子 FIRoperatorNxMは、2x2セルの情報を加算します。 ここでは正規化は実行されません。代替実装として、演算子 Const_Enable をゼロに設定することで、ブロックへのセルのグループ化を省略できます。計算されたHOGの最大値がボックス GetHistogramMaxで選択されます(図 373を参照)。その内容は図 379に示されています。デザイン 「HOG_9Bins_Histogram.vad」では、ヒストグラムの最大値の選択は省略されます。

HierarchicalBox GetHistogramMaxの内容

図379. HierarchicalBox GetHistogramMaxの内容


最後に、ヒストグラムの最大値またはヒストグラム自体が、ボックス Visualize(図 373を参照)内で赤い線として視覚化されます。 このボックス(パス:ボックス Draw、EnableOriginal)では、パラメータ ModuloCount_Period(フレームをカウント)、Is_InRange(フレーム範囲を設定)、および Const_Enableを設定するか、常時有効にする(Const_Enableを1に設定)ことにより、複数のフレームについてHOG特徴量とともに元の画像を視覚化することができます。最後のステップとして、HOG特徴量が演算子 DmaToPC_DMA0を介してPCに転送されます。ここで、HOG特徴量は、サポートベクターマシン(SVM)や畳み込みニューラルネットワーク(CNN)における物体検出の記述子として使用できます。