基于K-Means的彩⾊图像分割
基于K-Means的彩⾊图像分割
日语常用语下⾯的例⼦将展⽰如何通过K-Means和Lab颜⾊空间的彩⾊图像分割。
⾸先读⼊图⽚,下图显⽰了⼀张⽤⾎毒素和伊红(H&E)染⾊的组织图像。这种染⾊⽅法有助于病理学家区分不同的组织类 型。
猫鼠游戏第二季
如果忽略亮度的变化,你可以从上图中观察到多少种颜⾊?显然,你可以轻易的观察到红⾊,蓝⾊和粉⾊。⽽Lab颜⾊空间可以准确的定量这些颜⾊变化。
下⾯使⽤makecform() 和 applycform() 函数将原图从RGB空间转到LAB:
cform = makecform('srgb2lab');
lab_he = applycform(he,cform);
K-Means聚类关注空间中每个物体的位置。它试图使得每个类别的物体尽可能的接近,⽽不同类别的物体尽可能的远。K-Means算法需要⽤户指定类别数量以及⼀个衡量距离的⽅法。
由于颜⾊信息存在于AB颜⾊空间,下⾯使⽤欧式距离度量⽅法将原图的像素分为3个类别:
ab = double(lab_he(:,:,2:3));
nrows = size(ab,1);
ncols = size(ab,2);
ab = reshape(ab,nrows*ncols,2);
nColors = 3;
% repeat the clustering 3 times to avoid local minima
creativity[cluster_idx, cluster_center] = kmeans(ab,nColors,'distance','sqEuclidean', ...
'Replicates',3);
kmeans()函数对每个输⼊像素均返回⼀个属于哪个类别的索引以及聚类中⼼位置信息。
pixel_labels = reshape(cluster_idx,nrows,ncols);
imshow(pixel_labels,[]), title('image labeled by cluster index');
得到的pixel_labels 矩阵和原图⾏列数相同,其数值代表了像素的分类结果。如:pixel_labels (1,1)=3表⽰该像素属于第三类。显然,通过pixel_labels矩阵可以显⽰原图分割为3个类别的结果。
gmented_images = cell(1,3);
rgb_label = repmat(pixel_labels,[1 1 3]);
for k = 1:nColors
初三英语视频
color = he;
color(rgb_label ~= k) = 0;
gmented_images{k} = color;
end
imshow(gmented_images{1}), title('objects in cluster 1');
temple
显⽰第⼆类分割结果:
imshow(gmented_images{2}), title('objects in cluster 2');
katie morgan
显⽰第三类:
imshow(gmented_images{3}), title('objects in cluster 3');
注意到这⾥的深蓝⾊和亮蓝⾊属于了同⼀个类别,使⽤LAB颜⾊空间可将其分开。⽽细胞核属于深蓝⾊。
L层包含了每种颜⾊的亮度信息。寻找到蓝⾊类别,然后提取此类的亮度值然后使⽤im2bw()函数将其⼆值化。
你必须通过代码来确定蓝⾊是哪⼀个类别,因为kmeans()函数不会在每次都返回相同的聚类编号。
你可以通过’a*’,‘b*’ 均值来确定,蓝⾊类别有最⼩的cluster_center值。
mean_cluster_value = mean(cluster_center,2);
icq是什么意思[tmp, idx] = sort(mean_cluster_value);
blue_cluster_num = idx(1);
L = lab_he(:,:,1);汉语国际教育学什么
blue_idx = find(pixel_labels == blue_cluster_num);
bodyL_blue = L(blue_idx);
is_light_blue = im2bw(L_blue,graythresh(L_blue));
通过is_light_blue来确定是否属于深蓝⾊。下图显⽰了分割效果:
nuclei_labels = repmat(uint8(0),[nrows ncols]);
nuclei_labels(blue_idx(is_light_blue==fal)) = 1;
音标发音48个教学视频
nuclei_labels = repmat(nuclei_labels,[1 1 3]);
blue_nuclei = he;
blue_nuclei(nuclei_labels ~= 1) = 0;
imshow(blue_nuclei), title('blue nuclei');