주요 콘텐츠

hough

허프 변환(Hough Transform)

설명

[H,theta,rho] = hough(BW)는 이진 영상 BW의 표준 허프 변환(SHT)을 계산합니다. 허프 변환 행렬 H를 사용하여 직선을 검출할 수 있습니다.

이 함수는 직선에 대한 파라미터 표현 rho = x*cos(theta) + y*sin(theta)를 사용합니다. 여기서 rho는 직선에 수직인 벡터를 따라 원점에서 직선까지의 오프셋이고, thetax축과 직선에 수직인 벡터 사이의 각도(단위: 도)입니다. 함수는 rho 값과 theta 값의 여러 조합에 대해 SHT를 샘플링하고, 샘플링된 값을 각각 rhotheta로 반환합니다. 자세한 내용은 허프 변환(Hough Transform) 항목을 참조하십시오.

예제

[H,theta,rho] = hough(BW,Name=Value)는 이름-값 인수를 사용하여 함수가 thetarho의 값을 샘플링하는 방법도 조정할 수 있습니다. 예를 들어, RhoResolution=0.5를 지정하면 rho 값을 0.5픽셀마다 샘플링합니다.

예제

예제

모두 축소

영상을 읽어 들여 표시합니다.

RGB = imread("gantrycrane.png");
imageshow(RGB)

영상을 회색조로 변환한 다음 영상에서 경계를 찾습니다.

I  = im2gray(RGB);
BW = edge(I,"canny");

허프 변환을 계산합니다.

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

허프 행렬은 [0, 1] 범위를 벗어나는 값을 갖는 double 데이터형입니다. 허프 행렬을 표시하려면 데이터를 [0, 1] 범위로 다시 스케일링합니다. imadjust 함수를 사용하여 표시를 위해 영상 대비를 개선합니다.

Hdisp = rescale(H);
Hdisp = imadjust(Hdisp);

imshow(Hdisp,XData=T,YData=R)
xlabel("\theta")
ylabel("\rho")
axis on
axis normal
hold on
colormap(gca,hot)

Figure contains an axes object. The axes object with xlabel theta, ylabel rho 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);

허프 행렬은 [0, 1] 범위를 벗어나는 값을 갖는 double 데이터형입니다. 허프 행렬을 표시하려면 데이터를 [0, 1] 범위로 다시 스케일링합니다. imadjust 함수를 사용하여 표시를 위해 영상 대비를 개선합니다.

Hdisp = rescale(H);
Hdisp = imadjust(Hdisp);
imshow(Hdisp,XData=T,YData=R)
xlabel("\theta")
ylabel("\rho")
axis on
axis normal
hold on
colormap(gca,hot)

Figure contains an axes object. The axes object with 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)rho 차원을 따른 허프 변환 Bin의 간격을 0.5픽셀로 지정합니다.

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

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

rho 차원에 따른 Bin 간격(단위: 픽셀)으로, 양수로 지정됩니다. RhoResolutionnorm(size(BW))보다 작아야 합니다.

예: RhoResolution=2rho 차원을 따라 너비가 2인 허프 변환 Bin을 사용합니다.

데이터형: double

직선에 대한 법선 방향의 각도(단위: 도)로, [-90, 90) 범위의 요소를 갖는 숫자형 벡터로 지정됩니다. 각도는 x축에서부터 시계 방향으로 측정됩니다.

예: -90:0.5:89.5

데이터형: double

출력 인수

모두 축소

허프 변환 행렬로, 숫자형 행렬로 반환됩니다. 행렬의 크기는 nrho×ntheta입니다. 여기서 nrhorho의 길이이며 nthetatheta의 길이입니다. 자세한 내용은 알고리즘 항목을 참조하십시오.

직선에 대한 법선 방향의 각도(단위: 도)로, 숫자형 벡터로 반환됩니다. 각도는 x축에서부터 시계 방향으로 측정됩니다. 자세한 내용은 알고리즘 항목을 참조하십시오.

이 출력 인수를 houghlines 함수와 houghpeaks 함수의 입력값으로 사용합니다.

데이터형: double

원점에서 직선까지의 수직 오프셋(단위: 픽셀)으로, 숫자형 벡터로 반환됩니다. 자세한 내용은 알고리즘 항목을 참조하십시오.

벡터의 길이는 2*ceil(D/RhoResolution)+1이며, 여기서 D는 카테시안 좌표에서 영상 대각선의 길이입니다. 좌표계의 원점이 왼쪽 위 픽셀의 중심에 있으므로 D = norm(size(BW)-1)입니다.

rho 값의 범위는 -diagonal에서 diagonal까지이며, 여기서 diagonal = RhoResolution*ceil(D/RhoResolution)입니다.

이 출력 인수를 houghlines 함수의 입력값으로 사용합니다.

데이터형: double

알고리즘

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

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

좌표계의 원점은 왼쪽 위 코너 픽셀의 중심에 있다고 가정합니다.

변수 theta는 원점에서 직선까지의 법선 방향(수직 투영)의 각도로, 양의 x축을 기준으로 시계 방향으로 측정됩니다(단위: 도). theta의 범위는 –90° ≤ theta < 90°입니다. 직선 자체의 각도는 theta + 90°이며, 이 또한 양의 x축을 기준으로 시계 방향으로 측정됩니다.

변수 rho는 원점에서 직선까지의 수직 오프셋입니다. rho의 크기는 원점과 직선 사이의 수직 거리와 동일합니다. 그러나 hough 함수는 theta의 지원 범위를 벗어나는 유효 회전 각도의 직선을 표현하기 위해 rho의 음수 값을 지원합니다. 시각적으로, 직선이 theta로 정의된 법선 벡터의 반대쪽 사분면을 통과할 때 rho는 음수가 됩니다. 즉, 유효 회전 각도가 –180° ≤ theta < –90° 또는 90° ≤ theta < 180°인 직선을 표현할 때 rho는 음수가 됩니다.

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

허프 변환 행렬 H는 행과 열이 각각 rho 값과 theta 값에 해당하는 파라미터 공간 행렬입니다. rhotheta의 모든 조합에 대해 SHT는 해당 파라미터를 갖는 직선을 계산하고, 그 직선을 따라 BW에서 true인 모든 픽셀의 합을 반환합니다. 파라미터화된 직선을 따라 많은 픽셀이 true 값을 가지면, 그 결과는 허프 변환 행렬에서 피크 값으로 나타납니다. 피크 값은 입력 영상에서 직선일 가능성이 있는 부분을 나타냅니다. houghpeaks 함수를 사용하여 허프 변환 행렬에서 피크 값을 찾을 수 있습니다.

원점이 왼쪽 위 코너 픽셀의 중심에 있기 때문에, rho가 음수이고 theta가 양수인 직선은 영상 내에 존재하지 않습니다. 허프 변환 행렬에서 rho가 음수이고 theta가 양수에 해당하는 요소들은 0 값을 가집니다.

확장 기능

모두 확장

버전 내역

R2006a 이전에 개발됨

모두 확장