你好,我是一名使用matlab
的初学者,也是我作业的一部分。我需要检测图像中被感染的白细胞,并将它们计算在受感染白细胞的核大而颜色为蓝色的位置。
原始图片
解释图片:
所以我尝试隔离白细胞然后检测被感染的白细胞但我不知道该怎么办我会写我的代码然后提到我卡住的地方并且如果三个是另一种方式来做这个请请求帮助
将图片从RGB
转换为YcBcR
空间颜色,以检测白色销售
OrgenalImg = 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);
%Mark the white cell pixel
for i=1:index1
CopyOfOrgenalImg(r(i),c(i),:) = 255;
end
figure, imshow(CopyOfOrgenalImg);title('White Cells');
白色细胞图片:
2.我被卡住了我试图将白色细胞图像转换为灰色grayscale
以删除并删除不需要的形状,但我无法找到方法这样做请求帮助和我怎样才能继续我的作业来检测和计算细胞,如果有其他方法可以做这个请求,请提前感谢任何帮助。
答案 0 :(得分:1)
您可以通过基于蓝色通道对图像进行阈值处理来识别与每个单元格对应的区域。对于非研究/家庭作业练习,考虑到精心选择的阈值(下面的代码为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是通过反复试验。
示例输出: