Main Content

houghlines

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

설명

예제

lines = houghlines(BW,theta,rho,peaks)는 영상 BW에서 허프 변환의 특정 Bin과 연결된 선분을 추출합니다. thetarho는 함수 hough에서 반환된 벡터입니다. peakshoughpeaks 함수에서 반환된 행렬로, 이 행렬에는 선분 탐색 시 사용할 허프 변환 Bin의 행과 열 좌표가 포함되어 있습니다. 반환 값 lines는 추출된 선분에 대한 정보를 포함합니다.

예제

lines = houghlines(___,Name,Value)는 이름-값 쌍 인수를 사용하여 선 추출의 다양한 특성을 제어합니다.

예제

모두 축소

영상을 작업 공간으로 읽어 들입니다.

I  = imread('circuit.tif');

영상을 회전시킵니다.

rotI = imrotate(I,33,'crop');

이진 영상을 만듭니다.

BW = edge(rotI,'canny');

이진 영상을 사용하여 허프 변환을 생성합니다.

[H,T,R] = hough(BW);
imshow(H,[],'XData',T,'YData',R,...
            'InitialMagnification','fit');
xlabel('\theta'), ylabel('\rho');
axis on, axis normal, hold on;

Figure contains an axes object. The axes object with xlabel theta, ylabel rho contains an object of type image.

영상의 허프 변환에서 피크를 찾습니다.

P  = houghpeaks(H,5,'threshold',ceil(0.3*max(H(:))));
x = T(P(:,2)); y = R(P(:,1));
plot(x,y,'s','color','white');

Figure contains an axes object. The axes object with xlabel theta, ylabel rho contains 2 objects of type image, line. One or more of the lines displays its values using only markers

직선을 찾아 플로팅합니다.

lines = houghlines(BW,T,R,P,'FillGap',5,'MinLength',7);
figure, imshow(rotI), hold on
max_len = 0;
for k = 1:length(lines)
   xy = [lines(k).point1; lines(k).point2];
   plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','green');

   % Plot beginnings and ends of lines
   plot(xy(1,1),xy(1,2),'x','LineWidth',2,'Color','yellow');
   plot(xy(2,1),xy(2,2),'x','LineWidth',2,'Color','red');

   % Determine the endpoints of the longest line segment
   len = norm(lines(k).point1 - lines(k).point2);
   if ( len > max_len)
      max_len = len;
      xy_long = xy;
   end
end

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

가장 긴 선분에 녹청색을 지정하여 강조 표시합니다.

plot(xy_long(:,1),xy_long(:,2),'LineWidth',2,'Color','cyan');

Figure contains an axes object. The axes object contains 38 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

선 회전 각도(단위: 도)로, 숫자형 행렬로 지정됩니다. 각도는 x축과 rho 벡터 사이에서 측정됩니다.

데이터형: double

좌표 원점으로부터의 거리로, 숫자형 행렬로 지정됩니다. 좌표 원점은 영상의 왼쪽 위 코너(0,0)입니다.

데이터형: double

허프 변환 Bin의 행과 열 좌표로, 숫자형 행렬로 지정됩니다.

데이터형: double

이름-값 인수

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

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

예: lines = houghlines(BW,T,R,P,'FillGap',5,'MinLength',7);

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

데이터형: double

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

데이터형: double

출력 인수

모두 축소

검출된 선으로, 발견된 병합 선분 개수와 동일한 길이의 구조체형 배열로 반환됩니다. 이 구조체형 배열의 각 요소에는 다음과 같은 필드가 있습니다.

필드

설명

point1

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

point2

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

theta

허프 변환 Bin의 각도(단위: 도)

rho

허프 변환 Bin의 rho 축 위치

확장 기능

버전 내역

R2006a 이전에 개발됨

참고 항목

|