Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab:从图像中去除白细胞_Matlab_Image Processing - Fatal编程技术网

Matlab:从图像中去除白细胞

Matlab:从图像中去除白细胞,matlab,image-processing,Matlab,Image Processing,我只想从下图中去除白细胞,保留红细胞。在Matlab中实现这一点的最佳方法是什么? 格式长; 格式紧凑; fontSize=16; rgbImage=imread('E:\GP_Final\DS\CL_13-09_image2.jpg'); [rows columns numberOfColorBands]=大小(rgbImage); %imshow(rgbImage,[]); %标题(“原始彩色图像”、“字体大小”、“字体大小”); hsv=rgb2hsv(RGB图像); %图(2),ims

我只想从下图中去除白细胞,保留红细胞。在Matlab中实现这一点的最佳方法是什么?

格式长;
格式紧凑;
fontSize=16;
rgbImage=imread('E:\GP_Final\DS\CL_13-09_image2.jpg');
[rows columns numberOfColorBands]=大小(rgbImage);
%imshow(rgbImage,[]);
%标题(“原始彩色图像”、“字体大小”、“字体大小”);
hsv=rgb2hsv(RGB图像);
%图(2),imshow(hsv);
%显示颜色通道。
hueImage=hsv(:,:,1);
饱和图像=hsv(:,:,2);
valueImage=hsv(:,:,3);
子地块(2,2,2);
imshow(hueImage,[]);
标题(“色调通道”、“字体大小”、“字体大小”);
子地块(2、2、3);
imshow(饱和图像,[]);
标题(“饱和通道”、“字体大小”、“字体大小”);
子地块(2、2、4);
imshow(valueImage,[]))
标题(“值通道”、“字体大小”、“字体大小”);
[像素计数值]=历史(hueImage,500);
图形
条形图(值、像素计数);
标题(“色调通道直方图”、“字体大小”、“字体大小”);

redPixels=hueImage>0.3&hueImage>0.8&valueImage您可以通过将图像拖动到工作区或单击Matlab中的“导入”按钮来导入图像。这将为您提供一个宽度x高度x 3矩阵,其中包含每个像素的RGB值。通过设置红色、绿色和蓝色值的阈值,可以选择要编辑的像素。使用
imview()
imsave()
,可以查看和存储结果

要编辑多个图像,可以使用(将png替换为您拥有的扩展名):


<>你希望去除图像中间的深紫色细胞。这是一个非常简单的任务,在看颜色分布的图像。在这种情况下,我不会看色调,因为图像的颜色分布很可能具有相似的色调。饱和度是我的目标

让我们从StackOverflow读取图像,将图像转换为HSV,然后查看饱和度分量:

im = imread('http://i.stack.imgur.com/OQUKj.jpg');
hsv = rgb2hsv(im2double(im));
imshow(hsv(:,:,2))
我们得到这样的图像:

您可以清楚地看到“红”血细胞的饱和度高于背景,因此我们可以进行一些简单的阈值处理。饱和度为0.4似乎对我适用:

mask = hsv(:,:,2) > 0.4;
imshow(mask);
我们得到这个:

有一些伪像素,所以我们可以通过一个操作来消除。面积小于300的任何像素将被删除:

mask_remove = bwareaopen(mask, 300);
imshow(mask_remove);
我们得到这个:

现在,剩余的单元中有洞。我们可以通过使用并选择
选项填充这些孔来解决此问题:

mask_fill = imfill(mask_remove, 'holes');
imshow(mask_fill);
我们得到这个:

我将稍微放大这个面具,以确保我们摆脱了周围的紫色环境:

se = strel('square', 7);
mask_final = imdilate(mask_fill, se);
最后要做的事情是使用此遮罩并遮罩原始图像,然后在去除白细胞的情况下生成最终图像。只需反转遮罩并将其与原始图像相乘,然后用白色填充缺少的信息:

mask_final = repmat(mask_final, [1 1 3]);
out = im .* uint8(~mask_final);
out(mask_final) = 255;
imshow(out);
我们得到这个:


我有多张图像,我不想手动操作我想输入图像,输出将进入另一个处理步骤并计数,你能帮我吗?我添加了代码,允许你自动加载和保存多张图像。我不想保存它们,我只想提取红血球并计数对不起,但是,白细胞不是背景,它是图像中间的奇怪颜色,我在这个链接中标记了不同的颜色。谢谢你的回答,它在这个图像中只适用,但是遗憾的是,我有一些图像,我想输入任何图像,只提取红细胞进入计数的另一个处理阶段。他们的形象。我想要任何血液图像的密码。如果你想继续这一点,并适应任何这种类型的图像,你可以聘请我作为代码导师。考虑到你没有尝试过任何事情,也没有付出任何努力,这就足够让你开始了。如果你不想雇用我,我就把这个任务留给你去解决。这就足够让你开始了。祝你好运好的,我已经试过这么做了,但它仍然不能对所有图像rgbImage=imread('image2.jpg');[rows columns numberOfColorBands]=大小(rgbImage);hsv=rgb2hsv(RGB图像);hueImage=hsv(:,:,1);饱和图像=hsv(:,:,2);valueImage=hsv(:,:,3);[像素计数值]=历史(hueImage,500);图形条形图(值、像素计数);标题(“色调通道直方图”);redPixels=hueImage>0.3&hueImage>0.8&valueImage用代码更新帖子。在超过几行的注释块中读取代码是非常难看的。
se = strel('square', 7);
mask_final = imdilate(mask_fill, se);
mask_final = repmat(mask_final, [1 1 3]);
out = im .* uint8(~mask_final);
out(mask_final) = 255;
imshow(out);