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

imfill

영상 영역과 구멍 채우기

설명

예제

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

선택적으로 GPU를 사용하여 범람 채우기 연산을 수행할 수 있습니다(Parallel Computing Toolbox™가 필요함). 자세한 내용은 GPU를 사용한 영상 처리 항목을 참조하십시오.

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 키를 누르십시오.

이 구문은 GPU에서 지원되지 않습니다.

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

이 구문은 GPU에서 지원되지 않습니다.

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

이 구문은 GPU에서 지원되지 않습니다.

예제

모두 축소

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]);

BW2 = imfill(BW1,[3 3],8)
BW2 = 8x8 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')

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

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

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

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

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

간단한 샘플 이진 영상을 만듭니다.

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 =

     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

gpuArray를 만듭니다.

BW1 = gpuArray(BW1);    

지정된 시작 위치부터 영상의 배경을 채웁니다.

BW2 = imfill(BW1,[3 3],8)
BW2 =

     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

입력 인수

모두 축소

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

GPU를 사용하여 영상 영역과 구멍을 채우려면 BW를 임의 차원의 비희소성 형식의 실수 논리형 배열을 포함하는 gpuArray로 지정하십시오.

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

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

데이터형: logical

픽셀 위치를 식별하는 선형 인덱스로, 양의 정수로 구성된 숫자형 벡터 또는 2차원 숫자형 행렬로 지정됩니다. locations가 px1 벡터이면, 시작 위치의 선형 인덱스를 포함합니다. locations가 pxndims(BW) 행렬인 경우 각 행은 시작 위치 중 하나의 배열 인덱스를 포함합니다.

예: [3 3]

데이터형: double

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

GPU를 사용하여 영상 영역과 구멍을 채우려면 I를 모든 차원의 비희소성 형식의 실수 숫자형 배열을 포함하는 gpuArray로 지정하십시오.

예: I = imread('cameraman.tif');

예: I = gpuArray(imread('cameraman.tif'));

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

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

의미

2차원 연결성

4-연결

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

8-연결

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

3차원 연결성

6-연결

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

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

18-연결

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

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

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

26-연결

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

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

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

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

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

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

데이터형: double | logical

출력 인수

모두 축소

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

GPU를 사용하여 영상 영역과 구멍을 채우면 BW2는 논리형 배열을 포함하는 gpuArray로 반환됩니다.

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

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

GPU를 사용하여 영상 영역과 구멍을 채우면 I2는 숫자형 배열을 포함하는 gpuArray로 반환됩니다.

알고리즘

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

참고 문헌

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

확장 기능

R2006a 이전에 개발됨