imdilate
영상 팽창
설명
예제
세로선 구조 요소를 사용하여 영상 팽창시키기
이진 영상을 작업 공간으로 읽어 들입니다.
BW = imread('text.png');
세로선 모양의 구조 요소를 생성합니다.
se = strel('line',11,90);
세로선 구조 요소를 사용하여 영상을 팽창시킨 다음 결과를 비교합니다.
BW2 = imdilate(BW,se);
imshow(BW), title('Original')
figure, imshow(BW2), title('Dilated')
구르는 공을 사용하여 회색조 영상 팽창시키기
회색조 영상을 작업 공간으로 읽어 들입니다.
originalI = imread('cameraman.tif');
공 모양의 평탄하지 않은 구조 요소를 생성합니다.
se = offsetstrel('ball',5,5);
영상을 팽창시킵니다.
dilatedI = imdilate(originalI,se);
원본 영상과 팽창된 영상을 표시합니다.
imshowpair(originalI,dilatedI,'montage')
구조 요소의 합성 영역 확인하기
직선 모양의 평탄한 구조 요소 두 개를 하나는 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차원 공간에서 점 팽창시키기
두 개의 점이 있는 논리형 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)
입력 인수
I
— 입력 영상
회색조 영상 | 이진 영상 | 팩 형식의 이진 영상
입력 영상으로, 임의 차원의 회색조 영상, 이진 영상 또는 팩 형식의 이진 영상으로 지정됩니다.
데이터형: single
| double
| int8
| int16
| int32
| uint8
| uint16
| uint32
| logical
SE
— 구조 요소
strel
객체 | offsetstrel
객체 | strel
객체로 구성된 배열 | offsetstrel
객체로 구성된 배열
구조 요소로, 스칼라 strel
객체 또는 offsetstrel
객체로 지정됩니다. SE
는 strel
객체 또는 offsetstrel
객체로 구성된 배열일 수도 있습니다. 이 경우 imdilate
는 각 구조 요소를 연달아 사용하여 입력 영상에 대해 여러 번 팽창을 수행합니다.
imdilate
는 데이터형이 logical
인 영상을 제외하고 모든 영상에 대해 회색조 팽창을 수행합니다. 이 경우 구조 요소는 평탄해야 하고 imdilate
는 이진 팽창을 수행합니다.
nhood
— 구조 요소 이웃
0
과 1
로 구성된 행렬
구조 요소 이웃으로, 0
과 1
로 구성된 행렬로 지정됩니다.
예: [0 1 0; 1 1 1; 0 1 0]
shape
— 출력 영상의 크기
'same'
(디폴트 값) | 'full'
출력 영상의 크기로, 다음 값 중 하나로 지정됩니다.
값 | 설명 |
---|---|
| 출력 영상이 입력 영상과 크기가 같습니다. |
| 전체 팽창을 계산합니다. |
데이터형: char
| string
출력 인수
세부 정보
이진 팽창
B에 의한 A의 이진 팽창(A ⨁ B로 나타냄)은 다음과 같은 집합 연산으로 정의됩니다.
여기서 는 구조 요소 B의 대칭입니다. 즉, 이는 픽셀 위치의 집합 z입니다. 여기서 대칭된 구조 요소는 z로 변환될 때 A의 전경 픽셀과 겹칩니다. 단, 일부 응용 사례에서는 구조 요소가 대칭되지 않는 팽창을 정의하는 경우도 있습니다.
이진 팽창에 대한 자세한 내용은 [1] 항목을 참조하십시오.
회색조 팽창
일반 형식의 회색조 팽창에서는 구조 요소가 높이를 갖습니다. B(x, y)에 의한 A(x, y)의 회색조 팽창은 다음으로 정의됩니다.
여기서 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)을 사용하여 수행됩니다. 이러한 구조 요소를 사용한 회색조 팽창은 아래의 국소 최댓값 연산자와 동일합니다.
strel(nhood,height)
, strel('arbitrary',nhood,height)
및 strel('ball',___)
을 제외한 모든 strel
구문은 평탄한 구조 요소를 생성합니다.
팁
영상
I
의 차원 수가 구조 요소의 차원 수보다 높을 경우,imdilate
함수는 동일한 모폴로지 팽창을 더 높은 차원을 따라 모든 평면에 적용합니다.이 동작을 사용하여 RGB 영상에 모폴로지 팽창을 수행할 수 있습니다. RGB 영상에 대해 2차원 구조 요소를 지정하여 각 색 채널에서 개별적으로 연산을 수행합니다.
구조 요소 이웃을 지정하면
imdilate
는floor((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.
확장 기능
C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.
사용법 관련 참고 및 제한 사항:
imdilate
함수는 C 코드 생성을 지원합니다(MATLAB® Coder™가 필요함). 일반적인MATLAB Host Computer
대상 플랫폼을 선택할 경우imdilate
함수는 미리 컴파일된 플랫폼별 공유 라이브러리를 사용하는 코드를 생성합니다. 공유 라이브러리를 사용하면 성능 최적화가 유지되지만 코드를 생성할 수 있는 대상 플랫폼이 제한됩니다. 자세한 내용은 Types of Code Generation Support in Image Processing Toolbox 항목을 참조하십시오.입력 영상
I
는 2차원이거나 3차원이어야 합니다.구조 요소
SE
는 단일 요소여야 합니다. 구조 요소로 구성된 배열은 지원되지 않습니다. 구조 요소로 구성된 배열을 사용하여 얻는 것과 동일한 결과를 얻으려면, 함수를 연속으로 호출하십시오.대상이
MATLAB Host Computer
인 경우,packopt
인수와shape
인수는 컴파일타임 상수여야 합니다. 대상이 그 외 다른 플랫폼이라면packopt
구문은 지원되지 않습니다.
GPU 코드 생성
GPU Coder™를 사용하여 NVIDIA® GPU용 CUDA® 코드를 생성할 수 있습니다.
사용법 관련 참고 및 제한 사항:
입력 영상
I
는 2차원이거나 3차원이어야 합니다.팩 형식의 이진 입력 영상(
packopt
구문)은 지원되지 않습니다.4개 이상의 채널이 있는 3차원 입력 영상의 경우 C/C++ 코드만 생성됩니다.
구조 요소
SE
는 컴파일타임 상수여야 합니다. CUDA® 코드는 1차원 또는 2차원 구조 요소에 대해서만 생성됩니다. 구조 요소가 3차원인 경우 C/C++ 코드가 생성됩니다. 3차원을 초과하는 구조 요소에 대해서는 코드 생성이 지원되지 않습니다.비평탄 구조 요소의 경우 C/C++ 코드만 생성됩니다.
스레드 기반 환경
MATLAB®의 backgroundPool
을 사용해 백그라운드에서 코드를 실행하거나 Parallel Computing Toolbox™의 ThreadPool
을 사용해 코드 실행 속도를 높일 수 있습니다.
이 함수는 스레드 기반 환경을 완전히 지원합니다. 자세한 내용은 스레드 기반 환경에서 MATLAB 함수 실행하기 항목을 참조하십시오.
GPU 배열
Parallel Computing Toolbox™를 사용해 GPU(그래픽스 처리 장치)에서 실행하여 코드 실행 속도를 높일 수 있습니다.
사용법 관련 참고 및 제한 사항:
gpuArray
입력값은uint8
형이거나logical
형이어야 합니다.구조 요소
SE
는 평탄하고 2차원이어야 합니다.packopt
인수는 GPU에서 지원되지 않습니다.
자세한 내용은 GPU를 사용한 영상 처리 항목을 참조하십시오.
버전 내역
R2006a 이전에 개발됨R2022b: 스레드 기반 환경 지원
imdilate
함수는 이제 스레드 기반 환경을 지원합니다.
MATLAB 명령
다음 MATLAB 명령에 해당하는 링크를 클릭했습니다.
명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)