Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

hough

허프 변환(Hough Transform)

설명

예제

[H,theta,rho] = hough(BW)는 이진 영상 BW의 표준 허프 변환(SHT)을 계산합니다. hough 함수는 선을 검출하도록 고안되었습니다. 이 함수는 직선에 대한 파라미터 표현 rho = x*cos(theta) + y*sin(theta)를 사용합니다. 이 함수는 원점에서 직선에 수직인 벡터 상의 직선 거리 rho와 x축과 이 벡터 사이의 각도(단위: 도)인 theta를 반환합니다. 이 함수는 또한 SHT H를 반환합니다. 이는 행과 열이 각각 rho 값과 theta 값에 해당하는 파라미터 공간 행렬입니다. 자세한 내용은 알고리즘 항목을 참조하십시오.

예제

[H,theta,rho] = hough(BW,Name,Value)는 계산에 영향을 미치는 이름-값 쌍 인수를 사용하여 이진 영상 BW의 SHT를 계산합니다.

예제

모두 축소

영상을 읽어 들인 후 회색조 영상으로 변환합니다.

RGB = imread('gantrycrane.png');
I  = im2gray(RGB);

경계를 추출합니다.

BW = edge(I,'canny');

허프 변환을 계산합니다.

[H,T,R] = hough(BW,'RhoResolution',0.5,'Theta',-90:0.5:89);

원본 영상과 허프 행렬을 표시합니다.

subplot(2,1,1);
imshow(RGB);
title('gantrycrane.png');
subplot(2,1,2);
imshow(imadjust(rescale(H)),'XData',T,'YData',R,...
      'InitialMagnification','fit');
title('Hough transform of gantrycrane.png');
xlabel('\theta'), ylabel('\rho');
axis on, axis normal, hold on;
colormap(gca,hot);

Figure contains 2 axes objects. Axes object 1 with title Hough transform of gantrycrane.png contains an object of type image. Axes object 2 with title gantrycrane.png contains an object of type image.

영상을 읽어 들인 후 회색조 영상으로 변환합니다.

RGB = imread('gantrycrane.png');
I  = im2gray(RGB);

경계를 추출합니다.

BW = edge(I,'canny');

제한된 각도 범위에 대해 허프 변환을 계산합니다.

[H,T,R] = hough(BW,'Theta',44:0.5:46);

허프 변환을 표시합니다.

figure
imshow(imadjust(rescale(H)),'XData',T,'YData',R,...
   'InitialMagnification','fit');
title('Limited Theta Range Hough Transform of Gantrycrane Image');
xlabel('\theta')
ylabel('\rho');
axis on, axis normal;
colormap(gca,hot)

Figure contains an axes object. The axes object with title Limited Theta Range Hough Transform of Gantrycrane Image contains an object of type image.

입력 인수

모두 축소

이진 영상으로, 2차원 논리형 행렬 또는 2차원 숫자형 행렬로 지정됩니다. 숫자형 입력값의 경우 0이 아닌 픽셀은 1(true)로 간주됩니다.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

이름-값 인수

예: 'RhoResolution',0.5

선택적으로 Name,Value 인수가 쉼표로 구분되어 지정됩니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. Name은 따옴표 안에 표시해야 합니다. Name1,Value1,...,NameN,ValueN과 같이 여러 개의 이름-값 쌍의 인수를 어떤 순서로든 지정할 수 있습니다.

rho 축 상의 허프 변환 Bin의 간격으로, 'RhoResolution'과 함께 0과 norm(size(BW)) 사이(구간의 끝점 불포함)의 양수가 쉼표로 구분되어 지정됩니다.

데이터형: double

SHT에 대한 Theta 값으로, 'Theta'와 함께 [-90, 90) 범위 내의 요소로 구성된 숫자형 벡터가 쉼표로 구분되어 지정됩니다.

예: -90:0.5:89.5

데이터형: double

출력 인수

모두 축소

허프 변환 행렬로, nrho×ntheta 크기의 숫자형 행렬로 반환됩니다. 행과 열은 rho 값과 theta 값에 해당합니다. 자세한 내용은 알고리즘 항목을 참조하십시오.

x축과 rho 벡터 사이의 각도(단위: 도)로, 숫자형 행렬로 반환됩니다. 자세한 내용은 알고리즘 항목을 참조하십시오.

데이터형: double

원점에서 직선에 수직인 벡터 상의 직선 거리로, double형 클래스의 숫자형 배열로 반환됩니다. 자세한 내용은 알고리즘 항목을 참조하십시오.

알고리즘

표준 허프 변환(SHT)은 다음과 같은 직선에 대한 파라미터 표현을 사용합니다.

rho = x*cos(theta) + y*sin(theta)

변수 rho는 원점에서 직선에 수직인 벡터 상의 직선 거리, 즉 법선의 길이입니다. theta는 원점에서 직선까지의 법선과 양의 x축 사이를 시계 방향으로 측정(단위: 도)한 각입니다. theta의 범위는 –90° ≤ θ < 90°입니다. 직선 자체의 각도는 θ + 90°이며, 이 또한 양의 x축을 기준으로 시계 방향으로 측정됩니다.

SHT는 파라미터 공간 행렬이며, 행과 열은 각각 rho 값과 theta 값에 해당합니다. SHT의 요소는 누산기 셀을 나타냅니다. 처음에 각 셀의 값은 0입니다. 그런 다음, 영상에서 배경이 아닌 모든 점에서 rho가 모든 theta에 대해 계산됩니다. rho는 SHT에서 가장 가까운 허용된 행으로 반올림됩니다. 이 누산기 셀은 증분됩니다. 이 절차가 끝날 때, SHT(r,c)Q 값은 xy 평면에 있는 theta(c)rho(r)로 지정된 직선 위에 Q개의 점이 있음을 의미합니다. SHT의 피크 값은 입력 영상의 잠재적인 직선을 나타냅니다.

허프 변환 행렬 Hnrho×ntheta입니다. 여기서,

nrho = 2*(ceil(D/RhoResolution)) + 1이고
D = sqrt((numRowsInBW - 1)^2 + (numColsInBW - 1)^2)입니다.
rho 값의 범위는 -diagonal에서 diagonal까지입니다. 여기서
diagonal = RhoResolution*ceil(D/RhoResolution)입니다.

ntheta = length(theta)

확장 기능

버전 내역

R2006a 이전에 개발됨