如何在基于 Matlab 中的二进制掩码标记的 ROI 上应用图像处理算法?

How to apply image processing algorithms on the ROI labeled based on a binary mask in Matlab?

我有一个标记图像前景的二进制蒙版。许多图像处理算法,如直方图均衡化或 otsu 方法处理整个图像。我的问题是如何应用这些图像处理算法,以便它们只能处理我的二进制蒙版标记的区域?

例如,I是灰度图,BW是二值掩码。下面的代码仍然处理整个图像,而不是 BW 掩码标记的特定区域。

level = graythresh(I.*BW);
BW = im2bw(I.*BW,level);

您的代码存在问题,您只是将图像的元素设置为零。相反,您应该只将感兴趣的体素传递给 grayscale 算法。例如,如果 BW 在 ROI 中不为零,您可以说

level = graythresh(I(BW>0));

这将 select 只有您想要用于阈值计算的元素。

shorthand
level = graythresh(I(find(BW>0)));

表达式的第二种形式创建了一个带有索引的中间数组——这通常比使用逻辑索引(这就是这种索引的名称)慢。

@SimaGuanxing,你也可以通过以下方式实现同​​样的效果:

level = graythresh(I(BW));

但你必须确保 BW 是一个与 I 大小相同的矩阵,以逻辑值作为条目。