주요 콘텐츠

houghlines

허프 변환(Hough Transform) 기반 선분 추출

설명

lines = houghlines(BW,theta,rho,peaks)는 이진 영상 BW에서 허프 변환의 특정 Bin과 연결된 선분을 추출합니다. thetarho는 각각 허프 변환의 각 Bin에 대응하는 직선의 각도와 수직 오프셋입니다. peaks는 허프 변환 행렬에 있는 피크의 행과 열 좌표를 나열합니다. 반환된 값 lines는 추출된 선분에 대한 정보를 포함합니다.

예제

lines = houghlines(BW,theta,rho,peaks,Name=Value)는 이름-값 인수를 사용하여 선 추출의 다양한 특성을 제어합니다. 예를 들어, MinLength=7을 지정하면 최소 길이가 7픽셀인 직선을 추출합니다.

예제

예제

모두 축소

영상을 작업 공간으로 읽어 들인 후, 영상의 중심을 기준으로 반시계 방향으로 영상을 33도 회전합니다.

I = imread("circuit.tif");
rotI = imrotate(I,33,"crop");

edge 함수를 사용하여 영상에서 경계를 찾습니다.

BW = edge(rotI,"canny");

회전된 이진 영상에 대해 허프 변환을 계산합니다.

[H,theta,rho] = hough(BW);

houghpeaks 함수를 사용하여 허프 변환 행렬 H에서 최대 5개의 피크를 찾습니다.

maxpeaks = 5;
thresh = ceil(0.3*max(H(:)));
P = houghpeaks(H,maxpeaks,Threshold=thresh);

길이가 적어도 7픽셀인 직선을 찾습니다. 직선 길이를 계산하기 전에, 5픽셀보다 작은 간격을 메웁니다.

lines = houghlines(BW,theta,rho,P,FillGap=5,MinLength=7);

원본 영상을 표시한 후, 검출된 직선을 녹색으로 겹쳐 표시합니다. 또한 각 직선의 시작 부분은 노란색으로, 끝부분은 빨간색으로 플로팅합니다.

imshow(rotI)
hold on
for k = 1:length(lines)
   xy = [lines(k).point1; lines(k).point2];
   plot(xy(:,1),xy(:,2),LineWidth=2,Color="green");
   plot(xy(1,1),xy(1,2),"x",LineWidth=2,Color="yellow");
   plot(xy(2,1),xy(2,2),"x",LineWidth=2,Color="red");
end

Figure contains an axes object. The hidden axes object contains 37 objects of type image, line. One or more of the lines displays its values using only markers

입력 인수

모두 축소

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

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

직선에 대한 법선 방향의 각도(단위: 도)로, [-90, 90) 범위의 요소를 갖는 숫자형 벡터로 지정됩니다. 각도는 x축에서부터 시계 방향으로 측정됩니다. 벡터의 각 요소는 허프 변환 행렬 H의 대응하는 열에 대한 theta 값을 지정합니다.

이 값을 hough 함수의 theta 출력 인수로 설정하십시오.

데이터형: double

원점에서 직선까지의 수직 오프셋(단위: 픽셀)으로, 숫자형 벡터로 지정됩니다. 원점은 영상의 왼쪽 위 코너 픽셀의 중심에 있습니다. 벡터의 각 요소는 허프 변환 행렬 H의 대응하는 행에 대한 rho 값을 지정합니다.

이 값을 hough 함수의 rho 출력 인수로 설정하십시오.

데이터형: double

허프 변환에서 피크의 행과 열 좌표로, 숫자형 벡터로 지정됩니다. 이 값을 houghpeaks 함수의 peaks 출력 인수로 설정하십시오.

데이터형: double

이름-값 인수

모두 축소

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

예: lines = houghlines(BW,theta,rho,peaks,MinLength=7)은 직선의 최소 길이를 7픽셀로 지정합니다.

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

예: lines = houghlines(BW,theta,rho,peaks,"MinLength",7);

동일한 허프 변환 Bin에 연결된 두 선분 사이의 거리로, 양수로 지정됩니다. 선분 사이의 거리가 지정된 값보다 작으면 houghlines 함수는 두 선분을 하나의 선분으로 병합합니다.

데이터형: double

직선의 최소 길이로, 양수로 지정됩니다. houghlines 함수는 직선의 최소 길이보다 짧은 직선은 무시합니다.

데이터형: double

출력 인수

모두 축소

검출된 직선으로, 구조체로 구성된 벡터로 반환됩니다. 각 요소는 하나의 병합된 선분을 나타내며 다음 필드를 가집니다.

필드

설명

point1

선분의 첫 번째 끝점 좌표를 지정하는, 요소를 2개 가진 벡터 [X Y]

point2

선분의 두 번째 끝점 좌표를 지정하는, 요소를 2개 가진 벡터 [X Y]

theta

허프 변환 Bin에 대응하는 각도(단위: 도)

rho

허프 변환 Bin에 대응하는, 원점에서 직선까지의 수직 오프셋

확장 기능

모두 확장

버전 내역

R2006a 이전에 개발됨