Main Content

영상의 경계 추적하기

이 툴박스에는 이진 영상에서 객체의 경계를 찾을 때 사용하는 함수가 두 개 포함되어 있습니다.

bwtraceboundary 함수는 영상에서 하나의 객체의 테두리 상에 있는 모든 픽셀의 행 좌표와 열 좌표를 반환합니다. 객체 상의 테두리 픽셀의 위치를 추적을 위한 시작점으로 지정해야 합니다.

bwboundaries 함수는 영상에서 모든 객체의 테두리 픽셀의 행 좌표와 열 좌표를 반환합니다.

이진 영상에서 두 함수 모두 0이 아닌 픽셀은 객체에 속하고 값이 0인 픽셀은 배경을 구성합니다.

영상에서 객체의 경계 추적하기

이 예제에서는 bwtraceboundary를 사용하여 이진 영상에서 하나의 객체의 테두리를 추적하는 방법을 보여줍니다. 이 예제는 그런 다음 bwboundaries를 사용하여 영상에서 모든 객체의 테두리를 추적합니다.

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

I = imread('coins.png');
imshow(I)

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

영상을 이진 영상으로 변환합니다. bwtraceboundarybwboundaries는 이진 영상에서만 사용할 수 있습니다.

BW = im2bw(I);
imshow(BW)

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

추적하려는 객체의 테두리에 위치한 어느 한 픽셀의 행 좌표와 열 좌표를 확인합니다. bwboundary는 이 점을 경계 추적을 위한 시작 위치로 사용합니다.

dim = size(BW)
dim = 1×2

   246   300

col = round(dim(2)/2)-90;
row = min(find(BW(:,col)))
row = 27

bwtraceboundary를 호출하여 지정된 점에서부터 경계를 추적합니다. 이진 영상, 시작점의 행 좌표와 열 좌표, 첫 번째 스텝의 방향을 필수 인수로 지정해야 합니다. 이 예제에서는 북쪽('N')을 지정합니다.

boundary = bwtraceboundary(BW,[row, col],'N');

원본 회색조 영상을 표시하고, bwtraceboundary에서 반환한 좌표를 사용하여 영상 위에 테두리를 플로팅합니다.

imshow(I)
hold on;
plot(boundary(:,2),boundary(:,1),'g','LineWidth',3);

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

영상에 있는 모든 동전의 경계를 추적하려면 bwboundaries 함수를 사용하십시오. 기본적으로, bwboundaries는 영상에서 객체 안에 있는 객체까지 포함하여 모든 객체의 경계를 찾습니다. 이 예제에서 사용된 이진 영상에서는 몇몇 동전이 검은색 영역을 포함하는데, bwboundaries는 이러한 검은색 영역을 별도의 객체로 해석합니다. bwboundaries가 동전만 추적하도록 하려면 imfill을 사용하여 각 동전의 안쪽 영역을 채우십시오. bwboundaries는 각 셀이 영상의 각 객체의 행/열 좌표를 포함하는 셀형 배열을 반환합니다.

BW_filled = imfill(BW,'holes');
boundaries = bwboundaries(BW_filled);

bwboundaries에서 반환한 좌표를 사용하여 원본 회색조 영상 위에 모든 동전의 테두리를 플로팅합니다.

for k=1:10
   b = boundaries{k};
   plot(b(:,2),b(:,1),'g','LineWidth',3);
end

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

추적을 위한 첫 번째 스텝과 방향 선택하기

객체에 따라 시작점으로 선택하는 테두리 픽셀과 첫 번째 스텝 파라미터로 선택하는 방향(북쪽, 남쪽 등)을 지정할 때 주의가 필요할 수 있습니다.

예를 들어, 어떤 객체에 구멍이 포함되어 있는데 객체에서 얇은 부분에 있는 픽셀을 시작 픽셀로 선택한 경우 첫 스텝의 방향을 어떻게 선택하는가에 따라 객체의 바깥쪽 테두리를 추적할 수도 있고 구멍의 안쪽 테두리를 추적할 수도 있습니다. 채워진 객체의 경우에는 첫 스텝 파라미터로 선택하는 방향이 비교적 덜 중요합니다.

설명을 돕기 위해 다음 그림에서 시작 픽셀이 객체의 얇은 부분에 있을 때 첫 번째 스텝이 북쪽으로 설정된 경우와 남쪽으로 설정된 경우에 추적되는 픽셀을 표시했습니다. 연결성은 8(디폴트 값)로 설정되었습니다.

첫 번째 스텝과 방향 파라미터가 경계 추적에 미치는 영향