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