Fad*_*adi 7 matlab image image-processing
你好,我是初学者,也可以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');
Run Code Online (Sandbox Code Playgroud)
白细胞图像:
2.我陷入困境我尝试将白色细胞图像转换为灰色grayscale
以删除并删除不需要的形状但我无法找到方法这样请求帮助以及如何继续我的作业来检测和计算有细胞,如果还有其他方法可以做这个请求,请提前感谢任何帮助.
您可以通过基于蓝色通道对图像进行阈值化来尝试此操作,以识别与每个单元相对应的区域。对于非研究/家庭作业练习,如果仔细选择阈值(下面代码中的 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)
Run Code Online (Sandbox Code Playgroud)
通过检查变量“区域”中的组件/单元区域列表来决定将阈值设置为 3000。0.66 的蓝色阈值是通过反复试验得出的。
示例输出: