我有一个二进制掩码,标记图像的前景。许多图像处理算法,如直方图均衡或otsu方法处理整个图像。我的问题是如何应用这些图像处理算法,以便他们只能处理我的二进制掩码标记的区域?如何在基于Matlab中的二进制掩码标记的ROI上应用图像处理算法?
例如,I
是灰度图像,而BW
是二进制掩码。下面的代码仍会处理整个图像,而不是由BW
蒙版标记的特定区域。
level = graythresh(I.*BW);
BW = im2bw(I.*BW,level);
我有一个二进制掩码,标记图像的前景。许多图像处理算法,如直方图均衡或otsu方法处理整个图像。我的问题是如何应用这些图像处理算法,以便他们只能处理我的二进制掩码标记的区域?如何在基于Matlab中的二进制掩码标记的ROI上应用图像处理算法?
例如,I
是灰度图像,而BW
是二进制掩码。下面的代码仍会处理整个图像,而不是由BW
蒙版标记的特定区域。
level = graythresh(I.*BW);
BW = im2bw(I.*BW,level);
你的代码的问题是,你只是设置图像的元素为零。相反,您只应将感兴趣的体素传递给grayscale
算法。例如,如果BW
是在投资回报为零,可以说
level = graythresh(I(BW>0));
这将只选择要用于阈值计算的元素。据简写
level = graythresh(I(find(BW>0)));
此表达式的第二形式创建与索引的中间阵列 - 这是通常比使用逻辑索引(这是这种指标被调用)慢。
@SimaGuanxing,还可以通过以下实现相同:
级别= graythresh(I(BW));
但是你必须确保BW是一个与我的逻辑值相同的矩阵。
有关更多信息,请参阅[逻辑索引](https://nl.mathworks.com/help/matlab/math/matrix-indexing.html#bq7egb6-1)。 – m7913d