HistogramsOfOrientedGradients(HOG)
1 개요
이미지의 Gradient를 구하여 Cell 단위로 그 각도를 수집하여 저장하는 알고리즘입니다.
2 알고리즘 상세 설명
원본 이미지 | 최종 정규화 결과 |
---|---|
![]() |
![]() |
이 알고리즘은 여러 단계로 이루어져 있습니다.
첫 번째 단계로는 이미지의 X 방향과 Y 방향의 Gradient값을 각각 구합니다. 이 알고리즘에서는 kernel 사이즈 3의 Gradient Filter로 Gradient값을 구합니다.
두 번째 단계로는 각 방향의 Gradient로 각 픽셀의 Gradient의 각도를 구한 뒤, 지정된 사이즈의 Cell 단위로 각 픽셀의 각도를 지정된 각도들과 비교하여 더 가까운 각도에 가중치를 두어 저장합니다. 지정된 각도는 0~160도까지 20도 단위로 지정되어 있으며(0,20,40....160 9개의 방향), 180도가 추가된 반대 방향은 음수 가중치가 적용됩니다.
세 번째 단계로 Cell들을 지정된 사이즈만큼 Block으로 모아서 Cell단위로 저장한 각도의 세기들을 정규화하여 조명 등으로 인한 밝기 노이즈를 제거합니다. 최종적으로 각 Cell의 각 방향의 세기는 0~1의 Double타입으로 저장됩니다.
Source | Peak Vector | Prediction Image |
---|---|---|
![]() |
![]() |
![]() |
마지막 단계는 선택사항입니다. 정규화된 Gradient Data를 지정된 비주얼화 방식으로 비주얼화 합니다. 각 Cell별로 가장 세기가 큰 각도를 Peak Vector로 Figure화 시켜 원본 이미지에 override시키는 방법과 Gradient Data를 토대로 경계 예측 이미지를 생성하는 방법이 존재합니다. Peak Vector의 경우 하나의 이미지에서 10000개의 Vector까지 지원합니다.
시트 셀 선택 | 셀 위치 (Peak Vector 첨부) | Pane 그래프 |
---|---|---|
![]() |
![]() |
![]() |
GUI에서는 결과 Sheet에서 셀 결과를 선택 시 이미지에 해당 셀의 위치를 표시해주고 해당 셀의 결과를 Histogram화 하여 pane 그래프에 표시해 줍니다. GUI Sheet에서는 하나의 이미지에서 10000개의 Gradient 수집 결과(Cell*Channels)까지 지원합니다.
FLImaging®의 HOG 알고리즘은 채널별 데이터 및 비주얼화 결과를 지원합니다. 이미지의 다양한 채널 정보에 대한 Gradient 정보를 얻을 수 있습니다.

이 알고리즘은 Gradient계산을 제외한 모든 연산이 Cell과 Block단위로 이루어져 있기 때문에 임의의 연산 영역이 주어졌을 때 Cell과 Block단위로 나누기 모호한 측면이 있습니다. 또한 Padding영역의 값이 Cell 전체의 데이터에 영향을 미치므로 실제의 결과보다 오차가 더 커질 수 있습니다. 그렇기 때문에 이 알고리즘은 rect ROI에 대해서만 지원하고, 해당 연산 영역 중 Gradient 연산의 Padding 영역은 자동으로 제외됩니다.
남은 연산 영역 중에서 최대한 많은 Block이 포함될 수 있도록 자동으로 Cell과 Block을 나눕니다. 최종 연산 영역 전체를 Block으로 채울 수 없는 경우 상하와 좌우의 빈 영역이 균일하게 되도록 Block영역을 지정합니다.
3 파라미터 설정 및 사용 방법
-
SetCellSize
- 하나의 Cell에 들어가는 픽셀 수를 지정합니다.
- Cell은 정사각형 모양이며 Cell Size의 NXN픽셀이 하나의 Cell이 됩니다.
- 기본값은 8이며, 1~16의 범위를 지원합니다.
-
SetBlockSize
- 하나의 Block에 들어가는 Cell 수를 지정합니다.
- Block은 정사각형 모양이며 Block Size의 NXN개의 Cell이 하나의 Block이 됩니다.
- 기본값은 2이며, 1~4의 범위를 지원합니다.
-
SetVisualResultType
- 비주얼화 출력에 대한 설정을 할 수 있습니다.
- 기본값은
EVisualResultType_PeakVector
입니다. EVisualResultType_None
- 비주얼화 출력 없음
- 데이터만 제공
EVisualResultType_PeakVector
- 피크 벡터 출력
EVisualResultType_PredictionImage
- 예측 이미지 생성
- 각 비주얼화 방식의 결과는 알고리즘 상세 설명에서 확인 가능합니다.
4 알고리즘 수행 결과 취득 방법
기본적인 Cell별 Gradient 수집 정보와 Peak Vector 설정 시 결과 Vector의 Figure의 경우 다음 함수들을 통해 취득할 수 있습니다.
-
GetResultHistogram
- 해당 페이지의 Cell별 Gradient 수집 정보를 가져옵니다.
- 수집 정보는 채널 번호 - 셀 번호(왼쪽에서 오른쪽으로 번호를 매기는 가로줄 단위로 위쪽에서 아래쪽으로 번호를 매깁니다) - Gradient 분류 번호(한 셀당 0 ,20, 40,...160으로 9개의 double) 순으로 정렬되어 있는 double buffer입니다.
-
GetPeakVectorsFigure
- 해당 페이지의 피크 벡터 연산 결과를 표시하는 FigureArray를 가져옵니다.
SetVisualResultType
으로EVisualResultType_PeakVector
를 설정한 경우에만 데이터를 가져올 수 있습니다.- 좌표는 Source 이미지와 연동됩니다.
-
GetCellRect
- 해당 페이지의 해당 셀 번호에 해당하는 사각형을 가져옵니다.
- 셀 번호는
GetResultHistogram
의 기준을 따릅니다 - 좌표는 Source 이미지와 연동됩니다.
5 예제 코드
Peak Vector 출력 예제
CHistogramsOfOrientedGradients hog;
CFLImage fliSourceImage;
hog.SetSourceImage(fliSourceImage);
hog.Execute();
double* pF64Result;
hog.GetResultHistogram(0, pF64Result);
CFLFigureArray flfaPeakVectors;
hog.GetPeakVectorsFigure(0, flfaPeakVectors);
PredictionImage 출력 예제
CHistogramsOfOrientedGradients hog;
CFLImage fliSourceImage;
hog.SetSourceImage(fliSourceImage);
hog.SetVisualResultType(CHistogramsOfOrientedGradients::EVisualResultType_PredictionImage);
CFLImage fliDestinationImage;
hog.SetDestinationImage(fliDestinationImage);
hog.Execute();
double* pF64Result;
hog.GetResultHistogram(0, pF64Result);