imsegkmeans
K-평균 군집화 기반 영상 분할
설명
예제
k-평균 군집화를 사용하여 회색조 영상 분할하기
영상을 작업 공간으로 읽어 들입니다.
I = imread("cameraman.tif"); imshow(I) title("Original Image")
k-평균 군집화를 사용하여 영상을 3개 영역으로 분할합니다.
[L,Centers] = imsegkmeans(I,3);
B = labeloverlay(I,L);
imshow(B)
title("Labeled Image")
텍스처 및 공간 정보를 사용하여 k-평균 분할 향상하기
영상을 작업 공간으로 읽어 들입니다. 더 빨리 실행되도록 영상 크기를 줄입니다.
RGB = imread("kobi.png");
RGB = imresize(RGB,0.5);
imshow(RGB)
k-평균 군집화를 사용하여 영상을 2개 영역으로 분할합니다.
L = imsegkmeans(RGB,2);
B = labeloverlay(RGB,L);
imshow(B)
title("Labeled Image")
몇몇 픽셀의 레이블이 잘못되었습니다. 이 예제의 나머지 부분에서는 각 픽셀에 대한 정보를 추가하여 k-평균 분할을 개선하는 방법을 보여줍니다.
영상에 각 픽셀의 이웃에 있는 텍스처에 대한 정보를 추가합니다. 텍스처 정보를 얻으려면 가버 필터 세트를 사용하여 영상의 회색조 버전을 필터링하십시오.
가버 필터 24개의 세트를 만듭니다. 6개 파장과 4개 방향을 포함합니다.
wavelength = 2.^(0:5) * 3; orientation = 0:45:135; g = gabor(wavelength,orientation);
영상을 회색조로 변환합니다.
I = im2gray(im2single(RGB));
가버 필터를 사용하여 회색조 영상을 필터링합니다. 필터링된 영상 24개를 몽타주에 표시합니다.
gabormag = imgaborfilt(I,g);
montage(gabormag,"Size",[4 6])
국소 변형을 제거하기 위해 각 필터링된 영상을 평활화합니다. 평활화된 영상을 몽타주에 표시합니다.
for i = 1:length(g) sigma = 0.5*g(i).Wavelength; gabormag(:,:,i) = imgaussfilt(gabormag(:,:,i),3*sigma); end montage(gabormag,"Size",[4 6])
각 픽셀에 대한 정보에 공간 위치 정보를 추가합니다. 이 추가 정보가 있으면 k-평균 군집화 알고리즘에서 공간적으로 가까운 픽셀을 그룹화합니다.
입력 영상에 있는 모든 픽셀의 x 좌표 및 y 좌표를 확인합니다.
nrows = size(RGB,1); ncols = size(RGB,2); [X,Y] = meshgrid(1:ncols,1:nrows);
각 픽셀에 대한 명암 정보, 이웃 텍스처 정보, 공간 정보를 결합합니다.
이 예제에서는 특징 세트가 원본 컬러 영상 RGB
대신 명암 영상 I
를 포함합니다. 색 정보가 특징 세트에서 생략되었습니다. 개털의 노란색이 타일의 노란 색상과 비슷하기 때문입니다. 개와 배경을 깔끔하게 분할할 수 있을 정도의 분명한 정보를 색 채널이 제공하지 않습니다.
featureSet = cat(3,I,gabormag,X,Y);
추가 특징 세트와 함께 k-평균 군집화를 사용하여 영상을 2개 영역으로 분할합니다.
L2 = imsegkmeans(featureSet,2,"NormalizeInput",true); C = labeloverlay(RGB,L2); imshow(C) title("Labeled Image with Additional Pixel Information")
k-평균 분할을 사용하여 컬러 영상 압축하기
영상을 작업 공간으로 읽어 들입니다.
I = imread("peppers.png"); imshow(I) title("Original Image")
k-평균 군집화를 사용하여 영상을 50개 영역으로 분할합니다. 레이블 행렬 L
과 군집 중심 위치 C
를 반환합니다. 군집 중심 위치는 50가지 색 각각의 RGB 값입니다.
[L,C] = imsegkmeans(I,50);
레이블 행렬을 RGB 영상으로 변환합니다. 군집 중심 위치 C
를 새 영상의 컬러맵으로 지정합니다.
J = label2rgb(L,im2double(C));
양자화된 영상을 표시합니다.
imshow(J)
title("Color Quantized Image")
원본 영상과 압축된 영상을 파일에 저장합니다. 양자화된 영상 파일의 크기는 대략 원본 영상 파일 크기의 1/4입니다.
imwrite(I,"peppersOriginal.png"); imwrite(J,"peppersQuantized.png");
다른 컬러스페이스를 사용하여 k-평균 분할 향상하기
헤마톡실린과 에오신(H&E)으로 염색한 조직의 영상을 읽어 들이고 표시합니다. 이러한 염색법을 사용해 병리학자는 파란색-자주색과 분홍색으로 염색된 조직 유형을 쉽게 구별할 수 있습니다.
he = imread("hestain.png"); imshow(he) title("H&E Image"); text(size(he,2),size(he,1)+15, ... "Image courtesy of Alan Partin, Johns Hopkins University", ... FontSize=7,HorizontalAlignment="right");
rgb2lab
함수를 사용하여 영상을 L*a*b* 컬러스페이스로 변환합니다. L*a*b* 컬러스페이스는 영상 광도와 색을 분할합니다. 따라서 밝기에 관계없이 색을 기준으로 영역을 더 쉽게 분할할 수 있습니다.
lab_he = rgb2lab(he);
색 정보만 사용하여 영상을 분할하려면 lab_he
에서 영상을 a* 값과 b* 값으로 제한합니다. imsegkmeans
에 사용할 수 있도록 영상의 데이터형을 single
형으로 변환합니다. imsegkmeans
함수를 사용하여 영상을 3개 영역으로 분할합니다.
ab = lab_he(:,:,2:3); ab = im2single(ab); numColors = 3; L2 = imsegkmeans(ab,numColors);
레이블 영상을 원본 영상에 겹쳐지게 표시합니다. 레이블 영상이 흰색, 파란색-자주색 및 분홍색으로 염색된 조직 영역을 분리합니다.
B2 = labeloverlay(he,L2);
imshow(B2)
title("Labeled Image a*b*")
입력 인수
I
— 분할할 영상
2차원 회색조 영상 | 2차원 컬러 영상 | 2차원 다중분광 영상
분할할 영상으로, 2차원 회색조 영상, 2차원 컬러 영상 또는 2차원 다중분광 영상으로 지정됩니다. 원래 영상이 double
형이면 im2single
함수를 사용하여 영상을 single
형으로 변환합니다.
데이터형: single
| int8
| int16
| uint8
| uint16
k
— 군집 개수
양의 정수
생성할 군집의 개수로, 양의 정수로 지정됩니다.
이름-값 인수
선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN
으로 지정합니다. 여기서 Name
은 인수 이름이고 Value
는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.
예: imsegkmeans(I,k,NumAttempts=5)
는 군집화 과정을 5번 반복합니다.
R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name
을 따옴표로 묶으십시오.
예: imsegkmeans(I,k,"NumAttempts",5)
는 군집화 과정을 5번 반복합니다.
NormalizeInput
— 입력 데이터 정규화
true
또는 1
(디폴트 값) | false
또는 0
입력 데이터를 평균 0과 단위 분산을 갖도록 정규화합니다. 숫자형 또는 논리형 1
(true
) 또는 0
(false
)으로 지정됩니다. true
를 지정할 경우 imsegkmeans
는 입력값의 각 채널을 개별적으로 정규화합니다.
NumAttempts
— 군집화 과정을 반복할 횟수
3
(디폴트 값) | 양의 정수
새 초기 군집 중심 위치를 사용하여 군집화 과정을 반복할 횟수로, 양의 정수로 지정됩니다.
MaxIterations
— 최대 반복 횟수
100
(디폴트 값) | 양의 정수
최대 반복 횟수로, 양의 정수로 지정됩니다.
Threshold
— 정확도 임계값
1e-4
(디폴트 값) | 양수
정확도 임계값으로, 양수로 지정됩니다. 연속적인 반복에서 각 군집 중심이 임계값보다 적게 이동하면 이 알고리즘은 중지합니다.
출력 인수
centers
— 군집 중심 위치
숫자형 행렬
군집 중심 위치이며, k×c 크기의 숫자형 행렬로 반환됩니다. 여기서 k는 군집의 개수, c는 채널의 개수입니다. centers
는 영상 I
와 동일한 데이터형을 가집니다.
팁
이 함수는 재현 가능한 결과를 제공합니다. 여러 번 실행해도 입력 인수가 같으면 출력은 바뀌지 않습니다.
imsegkmeans
함수는 지원되는 모든 컬러스페이스에서 입력 영상을 받습니다. 다른 컬러스페이스를 사용하면 다른 결과가 생성됩니다. 입력 영상의 결과가 만족스럽지 않으면 다른 컬러스페이스를 사용해 보십시오. MATLAB®의 컬러스페이스에 대한 자세한 내용은 컬러스페이스 및 컬러스페이스 변환 이해하기 항목을 참조하십시오.double
형의 영상에 K-평균 군집화를 수행하려면im2single
함수를 사용하여 영상을single
형으로 변환합니다.double
형 입력 데이터를 요하는 응용 사례의 경우kmeans
(Statistics and Machine Learning Toolbox) 함수를 참조하십시오.
참고 문헌
[1] Arthur, David, and Sergei Vassilvitskii. “K-Means++: The Advantages of Careful Seeding.” In Proceedings of the Eighteenth Annual ACM-SIAM Symposium on Discrete Algorithms, 1027–35. SODA ’07. USA: Society for Industrial and Applied Mathematics, 2007.
버전 내역
R2018b에 개발됨
참고 항목
앱
함수
imsegkmeans3
|gabor
|imgaborfilt
|labeloverlay
|label2rgb
|superpixels
|lazysnapping
|watershed
|labelmatrix
도움말 항목
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)