주요 콘텐츠

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

imfill

영상 영역과 구멍 채우기

설명

이진 영상

BW2 = imfill(BW,locations)는 입력 이진 영상 BW의 배경 픽셀에서 locations에 지정된 점부터 범람 채우기 연산을 수행합니다.

예제

BW2 = imfill(BW,locations,conn)locations로 정의된 영역을 채웁니다. 여기서 conn은 연결성을 지정합니다.

BW2 = imfill(BW,"holes")는 입력 이진 영상 BW에 있는 구멍을 채웁니다. 이 구문에서 구멍은 영상 경계부터 배경을 채우는 작업을 통해 도달할 수 없는 배경 픽셀 집합입니다.

예제

BW2 = imfill(BW,conn,"holes")는 이진 영상 BW에 있는 구멍을 채웁니다. 여기서 conn은 연결성을 지정합니다.

예제

회색조 영상

I2 = imfill(I)는 회색조 영상 I에 있는 구멍을 채웁니다. 이 구문에서 구멍은 밝은 픽셀로 둘러싸인 어두운 픽셀 영역으로 정의됩니다.

예제

I2 = imfill(I,conn)은 회색조 영상 I에 있는 구멍을 채웁니다. 여기서 conn은 연결성을 지정합니다.

예제

대화형 방식 동작

BW2 = imfill(BW)는 화면에 이진 영상 BW를 표시합니다. 이 구문을 사용하면 마우스로 대화형 방식으로 점을 선택하여, 채울 영역을 정의할 수 있습니다. 이 구문을 사용하려면 BW는 2차원 영상이어야 합니다.

이전에 선택한 점을 제거하려면 Backspace 키나 Delete 키를 누르십시오. 마지막 점을 선택하고 채우기 연산을 시작하려면 Shift 키를 누른 상태에서 클릭하거나, 마우스 오른쪽 버튼을 클릭하거나, 더블 클릭하십시오. 점을 추가하지 않고 선택을 끝내려면 Return 키를 누르십시오.

BW2 = imfill(BW,0,conn)을 사용하면 대화형 방식으로 위치를 지정할 때 디폴트 연결성을 무시할 수 있습니다.

[BW2, locations_out] = imfill(BW)는 대화형 방식으로 선택한 점 위치를 locations_out으로 반환합니다. 이 구문을 사용하려면 BW는 2차원 영상이어야 합니다.

예제

모두 축소

8×8 이진 영상을 만듭니다.

BW1 = logical([1 0 0 0 0 0 0 0
               1 1 1 1 1 0 0 0
               1 0 0 0 1 0 1 0
               1 0 0 0 1 1 1 0
               1 1 1 1 0 1 1 1
               1 0 0 1 1 0 1 0
               1 0 0 0 1 0 1 0
               1 0 0 0 1 1 1 0]);

위치 BW1(3,3)부터 범람 채우기 연산을 수행합니다. 세 번째 입력 인수를 4로 지정하여 4-연결성을 사용해 영상을 채웁니다. 이 연산은 영상의 왼쪽 위 영역에 있는 구멍을 채웁니다.

BW2 = imfill(BW1,[3 3],4)
BW2 = 8×8 logical array

   1   0   0   0   0   0   0   0
   1   1   1   1   1   0   0   0
   1   1   1   1   1   0   1   0
   1   1   1   1   1   1   1   0
   1   1   1   1   0   1   1   1
   1   0   0   1   1   0   1   0
   1   0   0   0   1   0   1   0
   1   0   0   0   1   1   1   0

이번에는 8-연결성을 사용하여 동일한 픽셀에서 범람 채우기 연산을 수행합니다. 이제 영상의 오른쪽 아래 영역에 있는 구멍도 채워집니다.

BW3 = imfill(BW1,[3 3],8)
BW3 = 8×8 logical array

   1   0   0   0   0   0   0   0
   1   1   1   1   1   0   0   0
   1   1   1   1   1   0   1   0
   1   1   1   1   1   1   1   0
   1   1   1   1   1   1   1   1
   1   0   0   1   1   1   1   0
   1   0   0   0   1   1   1   0
   1   0   0   0   1   1   1   0

영상을 작업 공간으로 읽어 들입니다.

I = imread('coins.png');
figure
imshow(I)
title('Original Image')

Figure contains an axes object. The hidden axes object with title Original Image contains an object of type image.

영상을 이진 영상으로 변환합니다.

BW = imbinarize(I);
figure
imshow(BW)
title('Original Image Converted to Binary Image')

Figure contains an axes object. The hidden axes object with title Original Image Converted to Binary Image contains an object of type image.

이진 영상의 구멍을 채우고 그 결과를 표시합니다.

BW2 = imfill(BW,'holes');
figure
imshow(BW2)
title('Filled Image')

Figure contains an axes object. The hidden axes object with title Filled Image contains an object of type image.

I = imread('tire.tif');
I2 = imfill(I);
figure, imshow(I), figure, imshow(I2)

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

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

입력 인수

모두 축소

이진 영상으로, 임의 차원의 논리형 배열로 지정됩니다.

데이터형: logical

픽셀 위치를 식별하는 인덱스로, 다음 옵션 중 하나로 지정됩니다.

  • 첨자 인덱스를 사용하여 위치를 p개 지정하려면 양의 정수로 구성된 p×ndims(BW) 행렬을 지정하십시오. 여기서 ndims(BW)는 입력 영상의 차원 수이고, 각 행에는 하나의 위치에 대한 첨자 인덱스가 포함되어 있습니다.

  • 선형 인덱스를 사용하여 위치를 p개 지정하려면 양의 정수로 구성된 요소를 p개 가진 열 벡터를 지정하십시오.

예: [3 4]는 2차원 입력 영상 내에 행, 열 인덱스 (3, 4)를 갖는 위치 하나를 지정합니다.

예: [2 2 2; 4 5 6]은 3차원 입력 영상 내에 첨자 인덱스 (2, 2, 2)와 (4, 5, 6)을 갖는 위치 두 개를 지정합니다.

예: 2는 선형 인덱스 2에 대응하는 단일 위치를 지정합니다.

예: [2; 8; 16]은 선형 인덱스 2, 8, 16에 대응하는 위치 세 개를 지정합니다.

데이터형: double

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

의미

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

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

3차원 연결성

6

면이 서로 닿으면 픽셀이 연결됩니다. 픽셀의 이웃은 다음 방향으로 인접한 픽셀입니다.

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

3-by-3-by-3 pixel neighborhood with 6 pixels connected to the faces of the center pixel

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

18

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

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

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

3-by-3-by-3 pixel neighborhood with 6 pixels connected to the faces and 12 pixels connected to the edges of the center pixel

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

26

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

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

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

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

3-by-3-by-3 pixel neighborhood with 6 pixels connected to the faces, 12 pixels connected to the edges, and 8 pixels connected to the corners of the center pixel

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

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

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

데이터형: double | logical

회색조 영상으로, 임의 차원의 숫자형 배열로 지정됩니다.

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

출력 인수

모두 축소

채워진 이진 영상으로, 논리형 배열로 반환됩니다.

픽셀 위치의 선형 인덱스로, 숫자형 벡터 또는 숫자형 행렬로 반환됩니다.

채워진 회색조 영상으로, 숫자형 배열로 반환됩니다.

알고리즘

imfill은 모폴로지 재구성을 기반으로 한 알고리즘을 사용합니다 [1].

참고 문헌

[1] Soille, P., Morphological Image Analysis: Principles and Applications, Springer-Verlag, 1999, pp. 173–174.

확장 기능

모두 확장

버전 내역

R2006a 이전에 개발됨

모두 확장