Main Content

영상의 경계 추적하기

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

이 예제에서는 이진 영상에서 하나의 객체 또는 모든 객체의 경계를 추적하는 방법을 보여줍니다.

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

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

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

영상을 이진 영상으로 변환합니다. bwtraceboundary 함수와 bwboundaries 함수는 이진 영상에만 사용할 수 있습니다.

BW = imbinarize(I);
imshow(BW)

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

단일 객체의 경계

이진 영상에서 단일 객체의 경계를 추적하려면, 먼저 객체의 테두리에 있는 한 픽셀의 행과 열 좌표를 결정해야 합니다. 이 예제에서는 열 좌표를 선택합니다. 그러면 이 예제는 해당 열에서 맨 위에 있는 객체의 행 좌표를 계산합니다.

numCols = size(BW,2);
col = 60;
row = find(BW(:,col),1)
row = 27

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

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

원본 회색조 영상 위에 테두리를 플로팅합니다.

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가 동전의 외부만 추적하도록 하기 위해, imfill 함수를 사용하여 각 동전 내부의 영역을 채웁니다.

BW_filled = imfill(BW,"holes");

bwboundaries 함수를 사용하여 영상에 있는 모든 동전의 경계를 추적합니다. bwboundaries는 셀형 배열을 반환하며, 각 셀에는 영상에 있는 객체에 대한 행과 열 좌표가 포함되어 있습니다.

boundaries = bwboundaries(BW_filled);

원본 회색조 영상 위에 모든 동전의 테두리를 플로팅합니다.

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입니다.

첫 번째 스텝 방향이 경계 추적에 미치는 영향

When the starting point is on a boundary that is one pixel wide, specifying the direction as north causes the boundary to be traced clockwise along the external edge of the object, whereas specifying the direction as south causes the boundary to be traced counterclockwise along the internal edge of the object.

참고 항목

| | |

관련 항목