我已将我的图像转换为蒙版,现在我想获得这个蒙版的原始颜色。我有一个名为objectPixels
的数组,它确定哪些位置属于我正在分割的对象。我已经尝试了下面的代码,但我没有获得原始颜色。
我在做什么呢?
mask = false(size(grayImage));
mask(objectPixels) = true;
%on R channel
tmp = originalImage(:,:,1);
答案 0 :(得分:0)
如果我理解你的问题,你有一个属于某些对象的像素掩码。您现在希望找到一个图像,其中标记为true
的任何像素将在这些位置提供原始颜色,而我们跳过false
。如果掩码位置为false
,我将假设输出像素是黑色的。这可以使用bsxfun
和times
作为函数轻松计算。我们基本上会复制图像中每个颜色通道的蒙版,然后将蒙版与原始图像相乘。
因此:
out = bsxfun(@times, originalImage, cast(mask, class(originalImage)));
mask
最初是logical
数组,为了将蒙版和原始图像相乘,它们必须是同一类型,这就是为什么{{1}使用以便我们可以将图像转换为与原始图像相同的类型。我们使用class
来确定原始图像的类或类型。
例如,让我们使用MATLAB系统路径的cast
图片。我将使用rgb2gray
将此图像转换为灰度,然后选择灰度级100的任意阈值来为我们提供遮罩。大于100的任何内容都会使掩码值为onion.png
,而其他任何内容都会设置为true
。
生成此蒙版后,让我们根据这些蒙版值确定原始颜色的含义。就这样:
false
通过上面的代码,我实现了我正在讨论的逻辑,附加图形显示原始图像,生成的蒙版以及输出图像,显示蒙版位置所在的原始颜色{{ 1}}。
这就是我得到的: