Matlab:纹理分类

3

我有一张组织学图像,就像这样:

二值化组织学图像

从这张图片中我们可以看到有两种不同类型的细胞。

细胞类型1细胞类型2

有什么方法可以将这两种类型的细胞分成两组吗?


我建议使用“图像”标签来提问这种类型的问题。 - Cape Code
2个回答

4
您可以使用您的原始图像和先前的代码来实现这一点吗?点击此处查看详细信息。
% % % your old code
I=imread(file);
t1=graythresh(I);
k1=im2bw(I,t1);
k1=~k1;
se = strel('disk',1);
k0=imfill(~k1,'holes');           
cc = conncomp(k0);               
k0(cc.PixelIdxList{1})=0;         
k1=imfill(k1,'holes');
mask=k0 | k1;
%%%%%%%%%%%%%%%%%%

这将为您带来以下结果:

在此输入图像描述

I=rgb2hsv(I);  
I=double(I);
I1=I(:,:,1);   % again, the channel that can maximizing the margin between donut and full circle
Imask=(I1-0.2).*(I1-0.9)<0;
k2=mask-Imask;
k2=bwareaopen(k2,100);

这将给您带来:

在此输入图片描述

k2=mask-Imask;
I2=zeros(size(I1,1),size(I1,2),3);
I2(:,:,1)=(k2==1)*255;
I2(:,:,3)=((I1-0.2).*(I1-0.9)<0)*255;
imshow(I2)

最终将会给你(这两种类型存储在rgb图像的两个通道中):

enter image description here


2

我会使用 regionprops

props=regionprops(YourBinaryImage, 'Solidity');

具有高固体度的对象将是圆盘,而低固体度的对象将是圆形。

(编辑) 更正式地说:

I=imread('yourimage.jpg');
Bw=~im2bw(I, 0.5);
BWnobord = imclearborder(Bw, 4); % clears the partial objects
Props=regionprops(BWnobord, 'All');
solidity=cell2mat({Props.Solidity});
Images={Props.Image}; 

访问 Imagessolidity 值大于 0.9 的元素,即可获得您的圆盘。其他的圆是另外的元素。
希望对您有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接