Main Content

imdilate

설명

예제

J = imdilate(I,SE)는 구조 요소 SE를 사용하여 회색조 영상, 이진 영상 또는 팩 형식의 이진 영상 I를 팽창시킵니다.

J = imdilate(I,nhood)는 영상 I를 팽창시킵니다. 여기서 nhood는 구조 요소 이웃을 지정하는, 01로 구성된 행렬입니다.

이 구문은 imdilate(I,strel(nhood))와 동일합니다.

J = imdilate(___,packopt)I가 팩 형식의 이진 영상인지를 지정합니다.

예제

J = imdilate(___,shape)는 출력 영상의 크기를 지정합니다.

예제

모두 축소

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

BW = imread('text.png');

세로선 모양의 구조 요소를 생성합니다.

se = strel('line',11,90);

세로선 구조 요소를 사용하여 영상을 팽창시킨 다음 결과를 비교합니다.

BW2 = imdilate(BW,se);
imshow(BW), title('Original')

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

figure, imshow(BW2), title('Dilated')

Figure contains an axes object. The axes object with title Dilated contains an object of type image.

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

originalI = imread('cameraman.tif');

공 모양의 평탄하지 않은 구조 요소를 생성합니다.

se = offsetstrel('ball',5,5);

영상을 팽창시킵니다.

dilatedI = imdilate(originalI,se);

원본 영상과 팽창된 영상을 표시합니다.

imshowpair(originalI,dilatedI,'montage')

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

직선 모양의 평탄한 구조 요소 두 개를 하나는 0도에서, 다른 하나는 90도에서 만듭니다.

se1 = strel('line',3,0)
se1 = 
strel is a line shaped structuring element with properties:

      Neighborhood: [1 1 1]
    Dimensionality: 2

se2 = strel('line',3,90)
se2 = 
strel is a line shaped structuring element with properties:

      Neighborhood: [3x1 logical]
    Dimensionality: 2

'full' 옵션으로 두 구조 요소를 연달아 사용하여 스칼라 값 1을 팽창시킵니다.

composition = imdilate(1,[se1 se2],'full')
composition = 3×3

     1     1     1
     1     1     1
     1     1     1

두 개의 점이 있는 논리형 3차원 볼륨을 생성합니다.

BW = false(100,100,100);
BW(25,25,25) = true;
BW(75,75,75) = true;

구 모양의 구조 요소를 사용하여 3차원 볼륨을 팽창시킵니다.

se = strel('sphere',25);
dilatedBW = imdilate(BW,se);

팽창된 영상 볼륨을 시각화합니다.

figure
isosurface(dilatedBW, 0.5)

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

입력 인수

모두 축소

입력 영상으로, 임의 차원의 회색조 영상, 이진 영상 또는 팩 형식의 이진 영상으로 지정됩니다.

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

구조 요소로, 스칼라 strel 객체 또는 offsetstrel 객체로 지정됩니다. SEstrel 객체 또는 offsetstrel 객체로 구성된 배열일 수도 있습니다. 이 경우 imdilate는 각 구조 요소를 연달아 사용하여 입력 영상에 대해 여러 번 팽창을 수행합니다.

imdilate는 데이터형이 logical인 영상을 제외하고 모든 영상에 대해 회색조 팽창을 수행합니다. 이 경우 구조 요소는 평탄해야 하고 imdilate는 이진 팽창을 수행합니다.

구조 요소 이웃으로, 01로 구성된 행렬로 지정됩니다.

예: [0 1 0; 1 1 1; 0 1 0]

팩 형식의 이진 영상 표시자로, 다음 값 중 하나로 지정됩니다.

설명

'notpacked'

I가 일반적인 배열로 처리됩니다.

'ispacked'

Ibwpack에 의해 생성된 대로 팩 형식의 이진 영상으로 처리됩니다. I는 2차원 uint32형 배열이어야 하고, SE는 평탄한 2차원 구조 요소여야 합니다. shape의 값은 'same'이어야 합니다.

데이터형: char | string

출력 영상의 크기로, 다음 값 중 하나로 지정됩니다.

설명

'same'

출력 영상이 입력 영상과 크기가 같습니다. packopt 값이 'ispacked'이면, shape'same'이어야 합니다.

'full'

전체 팽창을 계산합니다.

데이터형: char | string

출력 인수

모두 축소

팽창된 영상으로, 회색조 영상, 이진 영상 또는 팩 형식의 이진 영상으로 반환됩니다. 입력 영상 I가 팩 형식의 이진 영상이면 J도 팩 형식의 이진 영상입니다. JI와 동일한 데이터형을 갖습니다.

세부 정보

모두 축소

이진 팽창

B에 의한 A의 이진 팽창(A ⨁ B로 나타냄)은 다음과 같은 집합 연산으로 정의됩니다.

AB={z|(B^)zA},

여기서 B^는 구조 요소 B의 대칭입니다. 즉, 이는 픽셀 위치의 집합 z입니다. 여기서 대칭된 구조 요소는 z로 변환될 때 A의 전경 픽셀과 겹칩니다. 단, 일부 응용 사례에서는 구조 요소가 대칭되지 않는 팽창을 정의하는 경우도 있습니다.

이진 팽창에 대한 자세한 내용은 [1] 항목을 참조하십시오.

회색조 팽창

일반 형식의 회색조 팽창에서는 구조 요소가 높이를 갖습니다. B(x, y)에 의한 A(x, y)의 회색조 팽창은 다음으로 정의됩니다.

(AB)(x,y)=max{A(xx,yy)+B(x,y)|(x,y)DB},

여기서 DB는 구조 요소 B의 정의역이고, A(x, y)는 영상의 정의역을 벗어난 부분에서는 −∞인 것으로 간주됩니다. 참고로, 일부 애플리케이션은 A(x – x′, y – y′) 대신 A(x + x′, y + y′) 수식을 사용하여 회색조 팽창을 정의합니다.

높이 값이 0이 아닌 구조 요소를 생성하려면, 구문 strel(nhood,height)를 사용하십시오. 여기서 height는 높이 값을 지정하고, nhood는 구조 요소의 정의역인 DB에 해당합니다.

일반적으로 회색조 팽창은 평탄한 구조 요소 (B(x,y) = 0)을 사용하여 수행됩니다. 이러한 구조 요소를 사용한 회색조 팽창은 아래의 국소 최댓값 연산자와 동일합니다.

(AB)(x,y)=max{A(xx,yy)|(x,y)DB}.

strel(nhood,height), strel('arbitrary',nhood,height)strel('ball',___)을 제외한 모든 strel 구문은 평탄한 구조 요소를 생성합니다.

  • 영상 I의 차원 수가 구조 요소의 차원 수보다 높을 경우, imdilate 함수는 동일한 모폴로지 팽창을 더 높은 차원을 따라 모든 평면에 적용합니다.

    이 동작을 사용하여 RGB 영상에 모폴로지 팽창을 수행할 수 있습니다. RGB 영상에 대해 2차원 구조 요소를 지정하여 각 색 채널에서 개별적으로 연산을 수행합니다.

  • 구조 요소 이웃을 지정하면 imdilatefloor((size(nhood)+1)/2)를 통해 nhood의 중앙 요소를 결정합니다.

  • imdilate는 구조 요소 객체에 대한 분해가 존재하는 경우 이를 자동으로 활용합니다. 또한 imdilate는 분해가 있는 구조 요소 객체로 이진 팽창을 수행할 때, 팽창 속도를 높이기 위해 이진 영상 패킹을 자동으로 사용합니다[3].

참고 문헌

[1] Gonzalez, Rafael C., Richard E. Woods, and Steven L. Eddins. Digital Image Processing Using MATLAB. Third edition. Knoxville: Gatesmark Publishing, 2020.

[2] Haralick, Robert M., and Linda G. Shapiro. Computer and Robot Vision. 1st ed. USA: Addison-Wesley Longman Publishing Co., Inc., 1992, pp. 158-205.

[3] Boomgaard, Rein van den, and Richard van Balen. “Methods for Fast Morphological Image Transforms Using Bitmapped Binary Images.” CVGIP: Graphical Models and Image Processing 54, no. 3 (May 1, 1992): 252–58. https://doi.org/10.1016/1049-9652(92)90055-3.

확장 기능

버전 내역

R2006a 이전에 개발됨

모두 확장

참고 항목

함수

객체