Main Content

bwtraceboundary

이진 영상에서 객체 추적

설명

B = bwtraceboundary(BW,P,fstep)은 이진 영상 BW에서 객체의 윤곽선을 추적합니다. 값이 0이 아닌 픽셀은 객체에 속하고 0인 픽셀은 배경을 구성합니다. P는 추적을 시작하려는 객체 경계선에 있는 점의 행과 열 좌표를 지정합니다. fstepP에 연결된 객체의 다음 픽셀에 대한 초기 탐색 방향을 지정합니다. B는 영역의 경계선 픽셀의 행과 열 좌표를 저장합니다.

B = bwtraceboundary(BW,P,fstep,conn)은 경계선을 추적합니다. 여기서 conn은 원하는 연결성을 지정합니다.

예제

B = bwtraceboundary(BW,P,fstep,conn,m,dir)은 추출할 최대 경계선 픽셀 수 m과 경계선을 추적할 방향인 dir을 지정합니다. bwtraceboundary는 기본적으로 경계선의 모든 픽셀을 식별합니다.

예제

모두 축소

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

BW = imread('blobs.png');
imshow(BW)

Figure contains an axes object. The axes object contains an object of type image.

영상에서 객체를 선택하고 경계선을 추적합니다. 객체를 선택하려면 객체의 경계선에 있는 픽셀을 지정하십시오. 이 예제에서는 두꺼운 흰색 원의 경계선에 있는 픽셀 좌표를 사용합니다. 픽셀 좌표는 impixelinfo를 사용하는 외관 검사를 통해 얻을 수 있습니다. bwtraceboundary는 기본적으로 경계선에 있는 모든 픽셀을 식별합니다.

r1 = 163;
c1 = 37;
contour = bwtraceboundary(BW,[r1 c1],'W');

영상에 윤곽선을 플로팅합니다.

hold on
plot(contour(:,2),contour(:,1),'g','LineWidth',2)

Figure contains an axes object. The axes object contains 2 objects of type image, line.

두 번째 객체의 경계선에 있는 점을 선택합니다. 이 예제에서는 가장 큰 사각형의 왼쪽 상단 코너 근처의 픽셀 좌표를 사용합니다. 시계 방향으로 첫 50개의 경계선 픽셀을 추적합니다.

r2 = 68;
c2 = 95;
contourCW = bwtraceboundary(BW,[r2 c2],'W',8,50,'clockwise');

두 번째 객체의 경계선에 있는 동일한 점에서 시작하여 시계 반대 방향으로 첫 50개의 경계선 픽셀을 추적합니다.

contourCCW = bwtraceboundary(BW,[r2 c2],'W',8,50,'counterclockwise');

영상에 빨간색으로 시계 방향 윤곽선을 플로팅합니다. 영상에 파란색으로 시계 반대 방향 윤곽선을 플로팅합니다.

plot(contourCW(:,2),contourCW(:,1),'r','LineWidth',2)
plot(contourCCW(:,2),contourCCW(:,1),'b','LineWidth',2)

Figure contains an axes object. The axes object contains 4 objects of type image, line.

입력 인수

모두 축소

이진 영상으로, 2차원 숫자형 또는 논리형 행렬로 지정됩니다.

추적을 시작할 객체 경계선의 시작점 좌표로, 요소를 2개 가진 [row column] 형식의 벡터로 지정됩니다.

데이터형: double

P에 연결된 다음 객체 픽셀의 초기 탐색 방향으로, 다이어그램에 묘사된 대로 문자형 벡터 또는 string형 스칼라로 지정됩니다.

The initial search directions correspond to the four cardinal and four ordinal directions: "N" for north, "NE" for northeast, and so on.

참고

연결성 conn4일 때 fstep은 값 "N", "E", "S", "W"로 제한됩니다.

데이터형: char | string

픽셀 연결성으로, 8 또는 4로 지정됩니다.

의미

2차원 연결성

4

경계가 서로 닿으면 픽셀이 연결됩니다. 픽셀의 이웃은 가로 또는 세로 방향으로 인접한 픽셀입니다.

3-by-3 pixel neighborhood with four pixels connected to the center pixel

현재 픽셀은 회색으로 표시됩니다.

8

경계 또는 코너가 서로 닿으면 픽셀이 연결됩니다. 픽셀의 이웃은 가로, 세로 또는 대각선 방향으로 인접한 픽셀입니다.

3-by-3 pixel neighborhood with 8 pixels connected to the center pixel

현재 픽셀은 회색으로 표시됩니다.

데이터형: double

추출할 최대 경계선 픽셀 수로, 양의 정수로 지정됩니다. 기본적으로 mInf이고 bwtraceboundary는 경계선에 있는 모든 픽셀을 식별합니다.

데이터형: double

경계선을 추적할 방향으로, "clockwise" 또는 "counterclockwise"로 지정됩니다.

데이터형: char | string

출력 인수

모두 축소

영역에 대한 경계선 픽셀의 행과 열 좌표로, q×2 행렬로 반환됩니다. B의 각 행은 [row column]의 형태를 갖습니다.

알고리즘

bwtraceboundary 함수는 제이콥(Jacob)의 중지 조건에 의해 수정된 무어-이웃(Moore-Neighbor) 추적 알고리즘을 구현합니다. 이 함수는 Digital Image Processing Using MATLAB(저자: Gonzalez, R. C., R. E. Woods, S. L. Eddins)의 초판(New Jersey, Pearson Prentice Hall, 2004)에 나와 있는 boundaries 함수를 기반으로 합니다.

참고 문헌

[1] Gonzalez, R. C., R. E. Woods, and S. L. Eddins, Digital Image Processing Using MATLAB, New Jersey, Pearson Prentice Hall, 2004.

확장 기능

버전 내역

R2006a 이전에 개발됨

모두 확장

참고 항목

|