이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

bwconncomp

이진 영상에서 연결성분 찾기

설명

예제

CC = bwconncomp(BW)는 이진 영상 BW에서 찾은 연결성분 CC를 반환합니다. bwconncomp는 2차원의 경우 디폴트 연결성 8을 사용하고, 3차원의 경우 26을 사용하며, 더 높은 차원의 경우에는 conndef(ndims(BW),'maximal')을 사용합니다.

예제

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 = 2x1 struct array with fields:
    Centroid

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

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

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

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)

입력 인수

모두 축소

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

예: BW = imread('text.png');

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

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

의미

2차원 연결성

4-연결

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

8-연결

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

3차원 연결성

6-연결

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

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

18-연결

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

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

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

26-연결

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

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

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

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

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

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

데이터형: double | logical

출력 인수

모두 축소

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

필드설명
Connectivity연결성분(객체)에 대한 연결성
ImageSizeBW의 크기
NumObjectsBW의 연결성분(객체) 개수
PixelIdxList1xNumObjects 셀형 배열. 이 셀형 배열의 k번째 요소는 k번째 객체에 있는 픽셀의 선형 인덱스를 포함하는 벡터입니다.

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

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

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

알고리즘

연결성분을 찾기 위한 기본 단계는 아래와 같습니다.

  1. 레이블이 지정되지 않은 다음 픽셀 p를 검색합니다.

  2. 범람 채우기 알고리즘을 사용하여 p를 포함하는 연결성분의 모든 픽셀에 레이블을 지정합니다.

  3. 모든 픽셀에 레이블이 지정될 때까지 1~2단계를 반복합니다.

확장 기능

R2009a에 개발됨