Main Content

imhmin

H-minima 변환을 사용하여 영상에서 국부 최솟값 억제

설명

예제

J = imhmin(I,H)는 H-minima 변환을 사용하여 회색조 영상 I에서 국부 최솟값을 억제합니다. H-minima 변환은 모든 국부 최솟값의 깊이를 최대 H만큼 줄입니다. 결과적으로 이 변환은 깊이가 H보다 작은 국부 최솟값을 완전히 억제합니다. 국부 최솟값은 동일한 명암 값 t를 갖는 연결 픽셀로, 그 주변 픽셀은 t보다 큰 명암 값을 갖습니다.

J = imhmin(I,H,conn)I에서 국부 최솟값을 식별하는 데 사용되는 연결성 값을 추가로 지정합니다.

예제

모두 축소

10×10 샘플 영상을 만듭니다. 3개의 국부 최솟값을 추가합니다. 각 국부 최솟값은 연결 픽셀들의 영역으로 이루어져 있으며 그 주변을 더 높은 명암 값의 픽셀들이 둘러싸고 있습니다.

a = 10*ones(10,10);
a(2:4,2:4) = 7;  
a(6:8,6:8) = 2;
a(1:3,7:9) = 13;
a(2,8) = 10;

다음 영상은 픽셀 값들의 회색조 표현입니다. 각 최솟값의 깊이는 주변 픽셀 값에 따라 정해집니다.

Grayscale representation of the original pixel values, with callouts labeling the depth of each minimum as 3, 3, and 8.

국부 최솟값의 깊이를 최대 4만큼 줄이는 H-minima 변환을 적용합니다.

h = 4;
b = imhmin(a,h);

다음 영상은 변환된 영상의 회색조 표현입니다. 이 변환은 이 중에 두 개의 최솟값을 완전히 억제합니다. 그리고 가장 깊은 최솟값은 부분적으로 억제하여, 이 최솟값에 해당하는 픽셀의 명암 값에 4를 더합니다.

Grayscale representation of the transformed pixel values

얕은 국부 최솟값을 억제하면 워터셰드 분할에서 과다분할을 방지할 수 있습니다.

분할을 적용할 RGB 배 영상을 불러옵니다. 영상을 회색조로 변환하고 표시합니다. 각각의 배에서 가운데 부분이 밝으며 이 지점이 국부 최댓값에 해당합니다.

RGB = imread("pears.png");
I = im2gray(RGB);
imshow(I)

워터셰드 분할에서는 영상을 워터셰드 선(watershed line)과 집수 구역(catchment basin)으로 이루어진 곡면에 비유할 수 있습니다. 물이 곡면으로 흐르면 집수 구역에 고이게 됩니다. 회색조 영상에서 국소 최솟값이 집수 구역에 해당합니다. 배를 분할하려면 배의 가운데 부분이 국부 최솟값이 되도록 영상을 반전합니다.

Icomp = imcomplement(I);
imshow(Icomp)

반전된 영상을 3차원 곡면으로 표시합니다. 여기서 각 픽셀의 3차원이 명암 값을 나타냅니다. 각 배마다 뽀족한 바닥을 가진 깊은 영역이 있으며, 이는 마치 물이 고이는 집수 구역처럼 얕은 국부 최솟값이 많이 있음을 나타냅니다.

surf(Icomp,EdgeColor="none")
colormap(gray)

필터링되지 않은 영상을 분할하고 결과를 레이블 오버레이로 표시합니다. 영상이 과다분할되어, 각 배마다 하나의 마스크 대신에 다수의 작은 마스크가 있습니다.

L = watershed(Icomp);
overlay = labeloverlay(I,L);
imshow(overlay)

H-minima 변환을 적용하여 얕은 최솟값을 억제합니다. 아래의 h 값은 시행착오를 거쳐 결정된 것입니다. 값을 변경하면서 h 값이 분할 결과에 어떤 영향을 미치는지 살펴봅니다.

h = 30;
Ifilt = imhmin(Icomp,h);

필터링된 영상을 3차원 곡면으로 표시합니다.

surf(Ifilt,EdgeColor="none")
colormap(gray)

필터링된 영상을 분할하고 결과를 표시합니다. 이 영상에서는 각 배마다 전경에 마스크를 대략 하나씩 가지고 있습니다.

Lfilt = watershed(Ifilt);
overlayfilt = labeloverlay(I,Lfilt);
imshow(overlayfilt)

입력 인수

모두 축소

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

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

H-minima 변환으로, 음이 아닌 스칼라로 지정됩니다.

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

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

의미

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

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

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

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

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

출력 인수

모두 축소

변환된 영상으로, I와 크기 및 데이터형이 같은 숫자형 배열로 반환됩니다.

참고 문헌

[1] Soille, P. Morphological Image Analysis: Principles and Applications. Springer-Verlag, 1999, pp. 170-171.

확장 기능

버전 내역

R2006a 이전에 개발됨