我有一张组织学图像,就像这样:
从这张图片中我们可以看到有两种不同类型的细胞。
和
有什么方法可以将这两种类型的细胞分成两组吗?
我有一张组织学图像,就像这样:
从这张图片中我们可以看到有两种不同类型的细胞。
和
有什么方法可以将这两种类型的细胞分成两组吗?
% % % 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图像的两个通道中):
我会使用 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};
Images
中 solidity
值大于 0.9 的元素,即可获得您的圆盘。其他的圆是另外的元素。