ρ와 θ는 실수 값을 가지기 때문에 C/C++ 코드로 축적 배열을 구현하려면 ρ와 θ가 가질 수 있는 값의 범위를 적당한 크기로 나눠서 저장하는 양자화(quantization) 과정을 거쳐야 합니다. 예를 들어 θ는 0부터 π 사이의 실수를 가질 수 있는데, 이 구간을 180단계로 나눌 수도 있고 360단계로 나눌 수도 있습니다. 구간을 촘촘하게 나눌 경우 입력 영상에서 정밀한 직선 검출이 가능하지만 연산 시간이 늘어날 수 있습니다. 반면에 구간을 너무 듬성하게 나눌 경우 연산이 빨라지지만 직선 검출의 정확도가 낮아질 수 있습니다.
OpenCV에서는 HoughLines() 함수를 사용하여 허프 변환 직선 검출을 수행할 수 있습니다. HoughLines() 함수 원형은 다음과 같습니다.
void HoughLines(InputArray image, OutputArray lines, double rho, double theta, int threshold, double srn = 0, double stn = 0, double min_theta = 0, double max_theta = CV_PI); |
|
• image |
8비트 단일 채널 입력 영상. 주로 에지 영상을 지정합니다. |
• lines |
직선 정보(rho, theta)를 저장할 출력 벡터 |
• rho |
축적 배열에서 ρ 값의 해상도(픽셀 단위) |
• theta |
축적 배열에서 θ 값의 해상도(라디안 단위) |
• threshold |
축적 배열에서 직선으로 판단할 임계값 |
• srn |
멀티스케일 허프 변환에서 rho 해상도를 나누는 값. srn에 양의 실수를 지정하면 rho 해상도와 rho/srn 해상도를 각각 이용하여 멀티스케일 허프 변환을 수행합니다. srn과 stn이 모두 0이면 일반 허프 변환을 수행합니다. |
• stn |
멀티스케일 허프 변환에서 theta 해상도를 나누는 값 |
• min_theta |
검출할 직선의 최소 theta 값 |
• max_theta |
검출할 직선의 최대 theta 값 |