【问题标题】:Given a mask, how do I get obtain the original colors of an image?给定一个蒙版,我如何获得图像的原始颜色?
【发布时间】:2014-11-21 01:03:31
【问题描述】:

我已将我的图像转换为蒙版,现在我想获取此蒙版赋予的原始颜色。我有一个名为objectPixels 的数组,它确定哪些位置属于我要分割的对象。我已经尝试了下面的代码,但我没有获得原始颜色。

我在做什么?

mask = false(size(grayImage));
mask(objectPixels) = true;  
%on R channel
tmp = originalImage(:,:,1);

【问题讨论】:

  • 这与Processing语言无关,请去掉processing标签。通用处理标签甚至意味着什么?
  • 你为什么要计算平均值和标准差来尝试恢复你的颜色?这没有任何意义。

标签: image matlab image-processing


【解决方案1】:

如果我正确理解了您的问题,则您有一个属于某些对象的像素掩码。您现在希望找到一个图像,其中任何标记为true 的像素将在这些位置提供原始颜色,而我们跳过false。如果掩码位置为false,我将假设输出像素为黑色。这可以使用bsxfuntimes 作为函数轻松计算。我们基本上会为图像中的每个颜色通道复制蒙版,然后将蒙版与原始图像相乘。

这样:

out = bsxfun(@times, originalImage, cast(mask, class(originalImage)));

mask 原本是一个logical 数组,为了将掩码和原始图像相乘,它们必须是相同的类型,这就是为什么使用cast 以便我们可以投射图像为与原始图像相同的类型。我们使用class 来确定原始图像的类别或类型。

作为示例,让我们使用作为 MATLAB 系统路径一部分的 onion.png 图像。我将使用rgb2gray 将此图像转换为灰度,然后选择灰度级 100 的任意阈值给我们一个蒙版。任何大于 100 的值都将给出 true 的掩码值,而其他任何值都设置为 false

生成此蒙版后,让我们根据这些蒙版值找出原始颜色是什么。因此:

originalImage = imread('onion.png');
mask = rgb2gray(originalImage) >= 100;
out = bsxfun(@times, originalImage, cast(mask, class(originalImage)));

%// Show the images now
figure;
subplot(1,3,1);
imshow(im);
title('Original Image');
subplot(1,3,2);
imshow(mask);
title('Mask');
subplot(1,3,3);
imshow(out);
title('Output Image');

使用上面的代码,我实现了我正在谈论的逻辑,还有一个显示原始图像、生成的掩码以及显示掩码位置的原始颜色的输出图像@987654340 @。


这是我得到的:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-28
    • 1970-01-01
    • 1970-01-01
    • 2020-11-03
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    • 1970-01-01
    相关资源
    最近更新 更多