이 생성자는 매우 많은 인자를 받도록 되어 있지만, 뒷부분의 많은 인자는 기본값이 설정되어 있습니다.5 그러므로 _winSize, _blockSize, _blockStride, _cellSize, _nbins 인자만 적절하게 지정하여 사용할 수 있습니다. 20×20 영상에서 5×5 셀과 10×10 크기의 블록을 사용하고, 각 셀마다 아홉 개의 그래디언트 방향 히스토그램을 구하도록 설정하려면 다음과 같이 HOGDescriptor 객체를 생성합니다.
HOGDescriptor hog(Size(20, 20), Size(10, 10), Size(5, 5), Size(5, 5), 9);
일단 HOGDescriptor 객체를 생성한 후에는 HOGDescriptor::compute() 멤버 함수를 이용하여 HOG 기술자를 계산할 수 있습니다. HOGDescriptor::compute() 함수 원형은 다음과 같습니다.
virtual void HOGDescriptor::compute(InputArray img, std::vector<float>& descriptors, Size winStride = Size(), Size padding = Size(), const std::vector<Point>& locations = std::vector<Point>()) const; |
|
• img |
입력 영상 |
• descriptors |
출력 HOG 기술자. CV_32F |
• winStride |
윈도우 이동 크기. 블록 이동 크기의 배수이어야 합니다. |
• padding |
영상 가장자리 패딩 크기 |
• locations |
계산 시작 위치 |
HOGDescriptor::compute() 함수에 의해 계산되는 HOG 기술자는 descriptors 벡터에 저장되며, 이 벡터에 저장되는 float 값의 개수는 HOGDescriptor 객체 생성 시 설정한 셀 크기, 블록 크기, 블록 이동 크기 등에 의해 자동으로 결정됩니다.
5 사실 HOGDescriptor 클래스는 HOG 기술자를 생성하는 기본적인 동작은 수행하지만, 소스 코드가 잘 정리되어 있지 않은 상태입니다. 일부 클래스 멤버 변수는 사용되지 않고 있으며, OpenCV 문서화도 제대로 되어 있지 않은 상태입니다. 이 책에서는 HOGDescriptor 생성자에서 기본값이 지정되어 있는 인자는 그대로 기본값을 사용할 것이며, 이 경우 프로그램이 정상적으로 동작하는 것을 확인하였습니다.