【发布时间】:2017-09-29 01:19:35
【问题描述】:
我有一个标记图像前景的二进制掩码。许多图像处理算法,如直方图均衡或 otsu 方法处理整个图像。我的问题是如何应用这些图像处理算法,以便它们只能处理我的二进制掩码标记的区域?
例如,I 是灰度图像,BW 是二进制掩码。下面的代码仍然处理整个图像,而不是 BW 掩码标记的特定区域。
level = graythresh(I.*BW);
BW = im2bw(I.*BW,level);
【问题讨论】:
我有一个标记图像前景的二进制掩码。许多图像处理算法,如直方图均衡或 otsu 方法处理整个图像。我的问题是如何应用这些图像处理算法,以便它们只能处理我的二进制掩码标记的区域?
例如,I 是灰度图像,BW 是二进制掩码。下面的代码仍然处理整个图像,而不是 BW 掩码标记的特定区域。
level = graythresh(I.*BW);
BW = im2bw(I.*BW,level);
【问题讨论】:
您的代码的问题在于您只是将图像的元素设置为零。相反,您应该只将感兴趣的体素传递给grayscale 算法。例如,如果BW 在 ROI 中不为零,则可以说
level = graythresh(I(BW>0));
这将只选择您想要进行阈值计算的元素。它是
的简写level = graythresh(I(find(BW>0)));
表达式的第二种形式创建一个带有索引的中间数组 - 这通常比使用逻辑索引(这种索引被称为)要慢。
【讨论】:
@SimaGuanxing,您也可以通过以下方式实现:
level = graythresh(I(BW));
但是您必须确保 BW 是一个与 I 大小相同的矩阵,其中逻辑值作为条目。
【讨论】: