Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

bwconncomp

이진 영상의 연결성분 찾기 및 개수 계산

설명

예제

CC = bwconncomp(BW)는 이진 영상 BW에 있는 연결성분 CC를 찾아 개수를 계산합니다. CC 출력 구조체는 영상에 있는 관심 영역(ROI) 같은 연결성분의 총 개수와 각 성분에 할당된 픽셀 인덱스를 포함합니다. bwconncomp는 2차원의 경우 디폴트 연결성 8을 사용하고, 3차원의 경우 26을 사용합니다.

예제

CC = bwconncomp(BW,conn)은 연결성분에 대해 원하는 연결성 conn을 지정합니다.

예제

모두 축소

작은 샘플 3차원 배열을 생성합니다.

BW = cat(3, [1 1 0; 0 0 0; 1 0 0],...
            [0 1 0; 0 0 0; 0 1 0],...
            [0 1 1; 0 0 0; 0 0 1]);

배열 내 연결성분을 찾습니다.

CC = bwconncomp(BW)
CC = struct with fields:
    Connectivity: 26
       ImageSize: [3 3 3]
      NumObjects: 2
    PixelIdxList: {[5x1 double]  [3x1 double]}

배열 내 객체의 중심을 계산합니다.

S = regionprops(CC,'Centroid')
S=2×1 struct array with fields:
    Centroid

영상을 작업 공간으로 읽어 들인 후 이를 표시합니다.

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

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

영상에 있는 연결성분의 개수를 구합니다.

CC = bwconncomp(BW)
CC = struct with fields:
    Connectivity: 8
       ImageSize: [256 256]
      NumObjects: 88
    PixelIdxList: {1x88 cell}

영상에서 가장 큰 성분을 파악한 후 이를 지웁니다(즉, 모든 픽셀을 0으로 설정함).

numPixels = cellfun(@numel,CC.PixelIdxList);
[biggest,idx] = max(numPixels);
BW(CC.PixelIdxList{idx}) = 0;

영상을 표시합니다. 가장 큰 성분은 단어 different에서 연속으로 나온 f였다는 것을 알 수 있습니다.

figure
imshow(BW)

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

입력 인수

모두 축소

이진 영상으로, 임의 차원의 숫자형 또는 논리형 배열로 지정됩니다. 숫자형 입력값의 경우 0이 아닌 픽셀은 1(true)로 간주됩니다.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

픽셀 연결성으로, 다음 표에 있는 값 중 하나로 지정됩니다. 디폴트 연결성은 2차원 영상의 경우 8, 3차원 영상의 경우 26입니다.

의미

2차원 연결성

4

경계가 서로 닿으면 픽셀이 연결됩니다. 두 개의 인접한 픽셀이 모두 켜져 있고 가로 또는 세로 방향으로 연결되어 있으면 두 픽셀은 동일한 객체에 속합니다.

Center pixel connected to four pixels

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

8

경계 또는 코너가 서로 닿으면 픽셀이 연결됩니다. 두 개의 인접한 픽셀이 모두 켜져 있고 가로, 세로 또는 대각선 방향으로 연결되어 있으면 두 픽셀은 동일한 객체에 속합니다.

Center pixel connected to eight pixels

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

3차원 연결성

6

면이 서로 닿으면 픽셀이 연결됩니다. 두 개의 인접한 픽셀이 모두 켜져 있고 다음 방향으로 연결되어 있으면 두 픽셀은 동일한 객체에 속합니다.

  • 안쪽, 바깥쪽, 왼쪽, 오른쪽, 위쪽, 아래쪽 방향 중 하나

Center pixel connected to the faces of 6 pixels

현재 픽셀은 큐브의 중앙입니다.

18

면 또는 경계가 서로 닿으면 픽셀이 연결됩니다. 두 개의 인접한 픽셀이 모두 켜져 있고 다음 방향으로 연결되어 있으면 두 픽셀은 동일한 객체에 속합니다.

  • 안쪽, 바깥쪽, 왼쪽, 오른쪽, 위쪽, 아래쪽 방향 중 하나

  • 두 방향의 조합(예: 오른쪽-아래쪽 또는 안쪽-위쪽)

Center pixel connected to the faces of 6 pixels and the edges of 12 pixels

현재 픽셀은 큐브의 중앙입니다.

26

면, 경계 또는 코너가 서로 닿으면 픽셀이 연결됩니다. 두 개의 인접한 픽셀이 모두 켜져 있고 다음 방향으로 연결되어 있으면 두 픽셀은 동일한 객체에 속합니다.

  • 안쪽, 바깥쪽, 왼쪽, 오른쪽, 위쪽, 아래쪽 방향 중 하나

  • 두 방향의 조합(예: 오른쪽-아래쪽 또는 안쪽-위쪽)

  • 세 방향의 조합(예: 안쪽-오른쪽-위쪽 또는 안쪽 -왼쪽-아래쪽)

Center pixel connected to the faces of 6 pixels, the edges of 12 pixels, and the corners of 8 pixels

현재 픽셀은 큐브의 중앙입니다.

더 높은 차원의 경우, bwconncomp는 디폴트 값 conndef(ndims(BW),"maximal")을 사용합니다.

01로 구성된 3×3×...×3 행렬을 지정하여 모든 차원에 대해 더 일반적인 방식으로 연결성을 정의할 수도 있습니다. 값이 1인 요소는 conn의 중앙 요소를 기준으로 하여 이웃 픽셀의 위치를 정의합니다. conn은 그 중앙 요소를 기준으로 대칭이어야 합니다. 자세한 내용은 Specifying Custom Connectivities 항목을 참조하십시오.

데이터형: double | logical

출력 인수

모두 축소

연결성분으로, 네 개의 필드를 갖는 구조체로 반환됩니다.

필드설명
Connectivity연결성분(객체)에 대한 연결성
ImageSizeBW의 크기
NumObjectsBW의 연결성분(객체) 개수
PixelIdxList

NumObjects 셀형 배열. 이 셀형 배열의 k번째 요소는 k번째 연결성분에 있는 픽셀의 선형 인덱스를 포함하는 벡터입니다.

  • 이 함수는 각 성분의 top-left 극값을 기준으로 연결성분을 왼쪽에서 오른쪽으로 정렬합니다. 여러 성분이 동일한 가로 위치를 갖는 경우 함수는 해당 성분을 위에서 아래로 정렬하고 더 높은 차원을 따라 다시 정렬합니다. 아래 그림은 서로 다른 두 영역의 극점을 보여줍니다.

    Two differently shaped regions, each with their eight extrema points labeled

  • 함수 bwlabel, bwlabelnbwconncomp는 모두 이진 영상의 연결성분을 계산합니다. bwconncomp는 메모리 사용량이 현저히 적을 뿐 아니라, 때때로 다른 함수보다 속도가 더 빠릅니다.

    함수입력 차원출력 형식메모리 사용량연결성
    bwlabel2차원배정밀도 레이블 행렬높음4 또는 8
    bwlabelnN차원배정밀도 레이블 행렬높음임의
    bwconncompN차원CC 구조체낮음임의
  • regionprops를 사용하여 디폴트 연결성으로 이진 영상에서 특징을 추출하려면 명령 regionprops(BW)를 사용하여 BWregionprops에 바로 전달하십시오.

  • 메모리 효율성이 더 높은 데이터형(예: uint8형과 double형 비교)을 갖는 레이블 행렬을 계산하려면 bwconncomp의 출력값에 대해 labelmatrix 함수를 사용하십시오.

확장 기능

버전 내역

R2009a에 개발됨

모두 확장