houghlines
허프 변환(Hough Transform) 기반 선분 추출
설명
는 이름-값 쌍 인수를 사용하여 선 추출의 다양한 특성을 제어합니다.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;
영상의 허프 변환에서 피크를 찾습니다.
P = houghpeaks(H,5,'threshold',ceil(0.3*max(H(:)))); x = T(P(:,2)); y = R(P(:,1)); plot(x,y,'s','color','white');
직선을 찾아 플로팅합니다.
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
가장 긴 선분에 녹청색을 지정하여 강조 표시합니다.
plot(xy_long(:,1),xy_long(:,2),'LineWidth',2,'Color','cyan');
입력 인수
BW
— 이진 영상
2차원 논리형 행렬 | 2차원 숫자형 행렬
이진 영상으로, 2차원 논리형 행렬 또는 2차원 숫자형 행렬로 지정됩니다. 숫자형 입력값의 경우 0이 아닌 픽셀은 1
(true
)로 간주됩니다.
데이터형: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
theta
— 선 회전 각도
숫자형 행렬
선 회전 각도(단위: 도)로, 숫자형 행렬로 지정됩니다. 각도는 x축과 rho
벡터 사이에서 측정됩니다.
데이터형: double
rho
— 원점에서 직선까지의 거리
숫자형 행렬
좌표 원점으로부터의 거리로, 숫자형 행렬로 지정됩니다. 좌표 원점은 영상의 왼쪽 위 코너(0,0)입니다.
데이터형: double
peaks
— 허프 변환 Bin의 행과 열 좌표
숫자형 행렬
허프 변환 Bin의 행과 열 좌표로, 숫자형 행렬로 지정됩니다.
데이터형: double
이름-값 인수
선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN
으로 지정합니다. 여기서 Name
은 인수 이름이고 Value
는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.
R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name
을 따옴표로 묶으십시오.
예: lines = houghlines(BW,T,R,P,'FillGap',5,'MinLength',7);
FillGap
— 동일한 허프 변환 Bin에 연결된 두 선분 사이의 거리
20
(디폴트 값) | 양수
동일한 허프 변환 Bin에 연결된 두 선분 사이의 거리로, 양수로 지정됩니다. 선분 사이의 거리가 지정된 값보다 작으면 houghlines
함수는 두 선분을 하나의 선분으로 병합합니다.
데이터형: double
MinLength
— 직선의 최소 길이
40
(디폴트 값) | 양수
직선의 최소 길이로, 양수로 지정됩니다. houghlines
는 지정된 값보다 짧은 직선은 무시합니다.
데이터형: double
출력 인수
lines
— 검출된 선
구조체형 배열
검출된 선으로, 발견된 병합 선분 개수와 동일한 길이의 구조체형 배열로 반환됩니다. 이 구조체형 배열의 각 요소에는 다음과 같은 필드가 있습니다.
필드 | 설명 |
---|---|
| 선분의 끝점 좌표를 지정하는, 요소를 2개 가진 벡터 |
| 선분의 끝점 좌표를 지정하는, 요소를 2개 가진 벡터 |
| 허프 변환 Bin의 각도(단위: 도) |
| 허프 변환 Bin의 |
확장 기능
C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.
사용법 관련 참고 및 제한 사항:
houghlines
함수는 C 코드 생성을 지원합니다(MATLAB® Coder™가 필요함). 자세한 내용은 Code Generation for Image Processing 항목을 참조하십시오.선택적 파라미터 이름
'FillGap'
과'MinLength'
는 컴파일타임 상수여야 합니다. 연결된 값은 컴파일타임 상수일 필요가 없습니다.
GPU 코드 생성
GPU Coder™를 사용하여 NVIDIA® GPU용 CUDA® 코드를 생성할 수 있습니다.
사용법 관련 참고 및 제한 사항:
선택적 파라미터 이름
'FillGap'
과'MinLength'
는 컴파일타임 상수여야 합니다. 연결된 값은 컴파일타임 상수일 필요가 없습니다.
버전 내역
R2006a 이전에 개발됨
참고 항목
MATLAB 명령
다음 MATLAB 명령에 해당하는 링크를 클릭했습니다.
명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)