在MATLAB中找出二进制图像中白色区域的像素数以及原始图像中ROI的像素数

Posted

技术标签:

【中文标题】在MATLAB中找出二进制图像中白色区域的像素数以及原始图像中ROI的像素数【英文标题】:Finding out number of pixels in white area in binary image as well as number of pixels of ROI in original image in MATLAB 【发布时间】:2017-08-10 19:16:23 【问题描述】:

我已分割图像,其中我的感兴趣区域 (ROI) 是白色棉花。现在我想比较分割区域中的像素数,即二进制图像中白色斑点中的像素总数与实际图像中 ROI 的实际像素数。我怎么能做到这一点。下图可以说清楚。

从原始图像中我们可以看出,我的 ROI 是红色边界中的白色棉花。当我分割这个图像时,我得到了如图所示的二进制图像。我们可以注意到,与原始区域相比,二值图像中存在一些缺失区域。所以,我想计算 ROI 原始图像中的像素数和二进制图像中白色斑点的像素数。这样我就可以计算 ROI 的实际像素和实际分割的像素数的差异。

谢谢。

【问题讨论】:

要计算二进制图像中的像素数,只需使用sum(bin_img(:) > 0);,假设是单通道图像。在不知道真实 ROI 是如何存储的情况下,我无法告诉您如何计算真实 ROI 中的像素数。请提供真实投资回报率的描述或示例。 我看到您获得原始图像 ROI 中实际像素数的唯一方法是在程序中修改图像,例如将您不感兴趣的像素涂黑(刷)。然后分割通过查看非黑色像素(如果需要,可以选择粉红色)再次查看该图像并执行 jodag 描述的操作。 感谢@jodag 的回复。我将图像存储为 RGB 和白色棉区域是我的投资回报率。在上面的真实图片中,ROI 由红色边界标记。我想找出这个 ROI 的像素数。我的真实 ROI 是真实图像中显示的白色棉花。 感谢@AntonSavelyev 的回复。您建议的方法很耗时,因为我有 60 张图像,所以我可以分别对每张图像执行此操作。我在想的是:有什么方法可以像我在真实图像中围绕 ROI 绘制边界,它会自动计算封闭边界中的像素数。 @NaseebGill 你会是那个划定界限的人吗?还是你想让 MATLAB 来做? 【参考方案1】:

如果您不想自己划定界限,可以试试这个。它可能不像您需要的那么精确,但您可以通过调整我使用的阈值(在本例中为所有 3 个通道为 100)来接近实际值。

假设我是您的原始图像。首先通过使用 RGB 值进行阈值化来创建二进制掩码。然后删除所有没有至少 2000 像素区域的小对象。然后对那个物体的像素求和。

IT = I(:,:,1) > 100;
IT(I(:,:,2) < 100) = 0;
IT(I(:,:,3) < 100) = 0;
IT = bwareaopen(IT, 2000);
sum(IT(:) > 0)

21380

生成的图像:

【讨论】:

感谢@Anton Savelyev。基本上,您在上面的代码中所做的是,如果任何像素红色分量 > 100 和蓝色,绿色 在这种情况下,您将需要使用我在其他评论中描述的图像编辑软件。 是的,现在我正在使用 Adob​​e Photoshop。我将白色对象转换为前景,其余部分转换为背景。背景将是黑色的,稍后,在 Matlab 中,我可以计算白色像素。这个过程可能会给我一些想要的结果。我希望如此。

以上是关于在MATLAB中找出二进制图像中白色区域的像素数以及原始图像中ROI的像素数的主要内容,如果未能解决你的问题,请参考以下文章

检测白色像素密度低的区域

如何在 MATLAB 中反转二进制图像?

从二值图像中提取白色区域

使用 OpenCV 获取二进制图像中白色像素数量的最快方法

检测二进制图像中的高密度像素区域

查找图中的内部区域