你好,我是使用 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
以删除和移除不需要的形状,但我找不到方法,所以请帮助以及如何我可以继续我的家庭作业来检测和计数细胞吗,如果有其他方法可以做到这一点,请告诉我提前感谢任何帮助。
最佳答案
您可以尝试根据蓝色 channel 对图像进行阈值处理,以识别与每个单元格对应的区域。对于非研究/家庭作业练习,考虑到精心选择的阈值(下面代码中的 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 的蓝色阈值是通过反复试验得出的。
示例输出:
关于image - 图像中感染的白细胞检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23515402/