VisualApplets 구현

그림 372에서 HOG 피처 계산을 위한 VA 디자인의 기본 디자인 구조를 확인할 수 있습니다. CameraLink 베이스 구성의 카메라에서 입력된 그레이스케일 이미지에 대해, Oriented Gradients의 히스토그램은 HierarchicalBox HOG 내에서 계산됩니다. 이 히스토그램은 "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에 따른 크기와 방향이 MagnitudeOrientation 박스에 구현되어 있습니다(콘텐츠 및 구조는 그림 375 참조). 박스 내의 상세한 주석은 구현된 공식을 이해하는 데 도움이 됩니다.

HierarchicalBox MagnitudeOrientation의 콘텐츠

그림 375. HierarchicalBox MagnitudeOrientation의 콘텐츠


8x8 픽셀 셀 단위의 픽셀 그룹화는 HierarchicalBox ExtractBlocks에서 수행됩니다. 이 박스의 출력 링크는 64픽셀 라인 형태의 셀 그래디언트 크기와 방향을 전달합니다. 이 정보는 HierarchicalBox Histogram에서 수행되는 Oriented Gradients 히스토그램 계산의 입력으로 사용됩니다. 그림 376에서 그 콘텐츠를 확인할 수 있습니다.

HierarchicalBox Histogram의 콘텐츠

그림 376. HierarchicalBox Histogram의 콘텐츠


여기서는 영역 내에 있을 수 있는 그래디언트 방향을 (으)로 , 네 개의 빈(bin)으로 할당하는 작업이 박스 SplitOrientations에서 수행됩니다. 빈은 , , 및 . "HOG_9Bins_Histogram.vad" 및 "HOG_9Bins_HistogramMax.vad" 디자인의 경우 9개의 빈( (으)로 단위로, )이 존재합니다. 그래디언트 방향을 특정 빈에 할당하는 방식은 해당 빈에 대한 이 방향의 가중치를 계산하는 방식으로 이루어집니다. 예를 들어, 빈 1에 대한 가중치 부여 및 그에 따른 할당은 , 그림에 나와 있습니다. 377.

HierarchicalBox Bin1의 콘텐츠

그림 377. HierarchicalBox Bin1의 콘텐츠


여기서 가중치는 식에 따라 49 빈 1에 대해 계산됩니다. 각 빈 사이의 각도 거리는 이 예에서는 (연산자 CONST_Phi_45Deg 박스 Sub45Deg)입니다. 빈 1의 각도 빈 방향은 또한 (연산자 CONST_Chi_45Deg)입니다. 그런 다음 각 빈의 가중치 계수에 그래디언트 크기를 곱합니다(그림 참조). 376). 박스에서 HistogramColumn_0 (으)로 HistogramColumn_3 각 히스토그램 열(각 빈에 대한)의 콘텐츠는 식에 따라 50 모든 이미지 픽셀에 걸친 가중된 그래디언트 크기의 합으로 계산됩니다. 그런 다음 Histogram of Oriented Gradients는 연산자를 사용하여 히스토그램 열을 병합함으로써 생성됩니다. MergeKernel_Histogram. 각 커널 구성 요소의 마지막 픽셀만 히스토그램 열의 실제 값이 되므로, 상자에서 선택됩니다. LastPixelOnly. 국소 그래디언트 변화를 고려하기 위해 각 셀의 Histogram of Oriented Gradients는 블록당 2x2 셀 크기의 블록으로 결합되며, (이 섹션의 이론 부분 참조). 셀을 블록으로 결합하는 작업은 상자 ConcatenateWithNeighbors에서 수행됩니다. 내용은 그림 378.

HierarchicalBox ConcatenateWithNeighbors의 내용

그림 378. HierarchicalBox ConcatenateWithNeighbors의 콘텐츠


Oriented Gradients 히스토그램 정보가 포함된 각 셀(단일 픽셀로 표현됨)에 대해, 각 빈의 히스토그램 열은 operator SplitKernel을 사용하여 분리됩니다. 각 커널 구성 요소에 대해 x 및 y 방향의 다음 셀 이웃은 PixelNeighbours1xM 및 LineNeighboursNx1 operator를 사용하여 계산됩니다. FIRoperatorNxM operator는 2x2 셀의 정보를 합산합니다. 여기서 정규화는 수행되지 않습니다. 대안적 구현으로, Const_Enable operator를 0으로 설정하여 셀을 블록으로 그룹화하는 과정을 생략할 수 있습니다. 계산된 Oriented Gradients 히스토그램의 최댓값은 GetHistogramMax 박스에서 선택됩니다(그림 373 참조). 그 콘텐츠는 그림 379에 나와 있습니다. "HOG_9Bins_Histogram.vad" 디자인에서는 히스토그램 최댓값 선택이 생략됩니다.

HierarchicalBox GetHistogramMax의 내용

그림 379. HierarchicalBox GetHistogramMax의 콘텐츠


마지막으로 히스토그램의 최댓값 또는 히스토그램 자체가 Visualize 박스(그림 373 참조)에 빨간색 선으로 시각화됩니다. 이 박스(경로: box Draw, EnableOriginal)에서는 파라미터 ModuloCount_Period(프레임 카운트), Is_InRange(프레임 범위 설정) 및 Const_Enable을 설정하거나 항상 켜두어(Const_Enable을 1로 설정) 원본 이미지를 여러 프레임 동안 HOG 피처와 함께 시각화할 수 있습니다. 마지막 단계로 HOG 피처는 DmaToPC_DMA0 operator를 통해 PC로 전송됩니다. 여기서 HOG 피처는 Support Vector Machine(SVM)이나 합성곱 신경망(CNN)을 이용한 Object Detection의 디스크립터로 사용될 수 있습니다.