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, xlabel \theta, ylabel \rho 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, xlabel theta, ylabel rho contains an object of type image.

입력 인수

모두 축소

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

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

이름-값 인수

선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN으로 지정합니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.

예: [H,theta,rho] = hough(BW,RhoResolution=0.5)

R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name을 따옴표로 묶으십시오.

예: [H,theta,rho] = hough(BW,"RhoResolution",0.5)

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

데이터형: double

SHT에 대한 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축을 기준으로 시계 방향으로 측정됩니다.

Graphical representation of how theta and rho are defined for a line, in green, relative to the perpendicular projection, in black.

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 이전에 개발됨

모두 확장