主要内容

基于颜色的使用k - means聚类分割

这个例子展示了如何在一个自动化的部分颜色款式使用L * a * b *颜色空间和k - means聚类。

步骤1:读取图像

读到hestain.png,这是一个组织的形象沾hemotoxylin和伊红())。这种染色法有助于病理学家区分不同的组织类型。

他= imread (“hestain.png”);imshow(他)、标题(“他走时形象”);文本(大小(他,2),大小(他,1)+ 15,图片由阿兰同谋,约翰霍普金斯大学的,“字形大小”7“HorizontalAlignment”,“对”);

图包含一个坐标轴对象。坐标轴对象2标题)图像包含对象类型的图像,文本。

步骤2:将图像从RGB颜色空间转换成L * a * b *颜色空间

多少颜色你看到的图片如果你忽略亮度的变化?有三种颜色:白色,蓝色,粉色。注意很容易你可以视觉上区分这些颜色。L * a * b *颜色空间(也称为CIELAB或CIE L * a * b *)使您能够量化这些视觉差异。

L * a * b *彩色空间来源于CIE XYZ三色值。L * a * b *空间由一个光度层L *, chromaticity-layer“*”表示颜色瀑布沿着红绿轴,和chromaticity-layer b *的瀑布沿着自民党轴指示的颜色。所有的颜色信息是在“*”和“b *”层。你可以测量两种颜色之间的差别使用欧氏距离度量。

将图像转换为L * a * b *颜色空间使用rgb2lab

lab_he = rgb2lab(他);

步骤3:分类的颜色的a * b *使用k - means聚类空间

聚类是一种单独的对象组。k - means聚类将在太空中每个对象都有一个位置。它发现分区,这样对象在每个集群尽可能接近彼此,和尽可能远离其他集群中的对象。k - means聚类要求您指定数量的集群分区的距离度量和量化两个物体间距离,彼此。

因为颜色信息存在于“a * b *”颜色空间,你的对象是像素与“*”和“b *”值。将数据转换为数据类型使用imsegkmeans。使用imsegkmeans集群的对象分为三个集群。

ab = lab_he (:,: 2:3);ab = im2single (ab);nColors = 3;%重复集群3次,以避免局部最小值nColors pixel_labels = imsegkmeans (ab),“NumAttempts”3);

为每个对象在你的输入,imsegkmeans返回一个指数,或一个标签,对应于一个集群。标签图像中每个像素的像素标签。

imshow (pixel_labels[])标题(集群的图像标记指数”);

图包含一个坐标轴对象。坐标轴对象与标题图像标记通过集群索引包含一个类型的对象的形象。

步骤4:创建图像分割)图像的颜色

使用pixel_labels,你可以单独的对象hestain.png的颜色,这将导致三个图片。

mask1 = pixel_labels = = 1;cluster1 =他。* uint8 (mask1);imshow (cluster1)标题(“对象在集群1”);

图包含一个坐标轴对象。集群1中的轴与标题对象对象包含一个类型的对象的形象。

mask2 = pixel_labels = = 2;cluster2 =他。* uint8 (mask2);imshow (cluster2)标题(《集群对象2》);

图包含一个坐标轴对象。集群2中的轴与标题对象对象包含一个类型的对象的形象。

mask3 = pixel_labels = = 3;cluster3 =他。* uint8 (mask3);imshow (cluster3)标题(在集群对象3 ');

图包含一个坐标轴对象。集群3中的轴与标题对象对象包含一个类型的对象的形象。

第五步:部分细胞核

集群3包含蓝色的对象。注意,有黑色和浅蓝色的对象。可以深蓝色和浅蓝色分开使用中的“L *”层L * a * b *颜色空间。细胞核是深蓝色的。

回想一下,‘L *层包含每个颜色的亮度值。提取像素的亮度值在这个集群,用全局阈值阈值使用imbinarize。面具is_light_blue给出了指数的浅蓝色像素。

L = lab_he (:: 1);L_blue = L。*双(mask3);L_blue =重新调节(L_blue);idx_light_blue = imbinarize(非零(L_blue));

复制蓝色对象的面具,mask3,然后把淡蓝色像素从面具。应用新的面具原始图像和显示结果。只有深蓝色细胞核清晰可见。

blue_idx =找到(mask3);mask_dark_blue = mask3;mask_dark_blue (blue_idx (idx_light_blue)) = 0;blue_nuclei =他。* uint8 (mask_dark_blue);imshow (blue_nuclei)标题(“蓝色细胞核”);

图包含一个坐标轴对象。坐标轴对象与标题蓝色细胞核包含一个类型的对象的形象。