你好,我是matlab的初学者,也是我家庭作业的一部分。我需要在图像中检测被感染的白血球,并数一数被感染的白血球的核大小和颜色的蓝色。
原始图像

解释图像:

所以我试着分离出被感染的白细胞,然后检测出被感染的白细胞,但是我被困住了,不知道该怎么做,我会写我的代码,并提到我卡在哪里,如果三种方法是另一种方法来做这个请求帮助
RGB转换为YcBcR空间颜色,以检测其销售情况
imread('D:\Users\FADI\Desktop\cells\cells1.jpg');CopyOfOrgenalImg = OrgenalImg;YcbcrImage = rgb2ycbcr(CopyOfOrgenalImg);cb = YcbcrImage(:,:,2);cr = YcbcrImage(:,:,3);r,c,v= find(cb>=77 & cb<=127 & cr>=133 & cr<=173);index1 = size(r,1);为i=1:index1 CopyOfOrgenalImg标记白细胞像素%(r(I),c(i),:) = 255;标题(“白细胞”);
白细胞图像:

2.在这里,我试图将白细胞图像转换为灰色grayscale,以删除和删除不需要的形状,但我无法找到方法来做到这一点,所以请帮助我,我如何继续我的家庭作业,以检测和计数与细胞,如果有其他方法做这个请求,让我知道,提前感谢任何帮助。
发布于 2014-05-14 11:40:07
您可以尝试根据蓝色通道对图像进行阈值化,以识别与每个单元格相对应的区域。对于一项非研究/家庭作业练习,只要有一个精心选择的阈值(下面的代码为0.66),这可能就足够了。然后,您可以遍历每个连接的组件,并根据该区域做出决策。在现实世界中,你会训练一个基于某种形状描述符的系统,但是如果你只有2个例子图像,像这样的硬编码的启发式看起来是不可避免的。
这里有一个解决方案:
INFECTED_AREA_THRESHOLD=3000;
img=double(imread('\cell.jpg'))./255;
blueness=img(:,:,3)./(img(:,:,1)+img(:,:,2)+img(:,:,3));
blueness=blueness./max(max(blueness));
cellmask=blueness<0.66;
cellmask=bwfill(~cellmask,'holes');
map=bwlabel(cellmask);
labels=setdiff(unique(map),0)';
infectedcomponents=zeros(size(img,1),size(img,2));
areas=[];
infected=0;
for thislbl=labels
connectedcomp=(map==thislbl);
thisarea=sum(sum(connectedcomp));
areas=[areas; thisarea];
if (thisarea>INFECTED_AREA_THRESHOLD)
infected=infected+1
infectedcomponents=infectedcomponents | connectedcomp;
end
end
imshow(rgb2gray(img).*infectedcomponents);
title(strcat(num2str(infected),' infected components detected'));
sort(areas)以3000为阈值的决定是通过检查可变“区域”中组件/单元区域的列表来作出的。蓝阈值0.66是经反复试验确定的。
样本输出:

https://stackoverflow.com/questions/23515402
复制相似问题