如何在基于 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 大小相同的矩阵,以逻辑值作为条目。
我有一个标记图像前景的二进制蒙版。许多图像处理算法,如直方图均衡化或 otsu 方法处理整个图像。我的问题是如何应用这些图像处理算法,以便它们只能处理我的二进制蒙版标记的区域?
例如,I
是灰度图,BW
是二值掩码。下面的代码仍然处理整个图像,而不是 BW
掩码标记的特定区域。
level = graythresh(I.*BW);
BW = im2bw(I.*BW,level);
您的代码存在问题,您只是将图像的元素设置为零。相反,您应该只将感兴趣的体素传递给 grayscale
算法。例如,如果 BW
在 ROI 中不为零,您可以说
level = graythresh(I(BW>0));
这将 select 只有您想要用于阈值计算的元素。
shorthandlevel = graythresh(I(find(BW>0)));
表达式的第二种形式创建了一个带有索引的中间数组——这通常比使用逻辑索引(这就是这种索引的名称)慢。
@SimaGuanxing,你也可以通过以下方式实现同样的效果:
level = graythresh(I(BW));
但你必须确保 BW 是一个与 I 大小相同的矩阵,以逻辑值作为条目。