如果我理解正确,您有一个对象的标签映射 - 每个对象都有一个关联的 ID,以 0 作为背景。您还有一个包含重要 ID 的向量和一个与此标签映射关联的彩色图像。
您希望将所有具有重要 ID 的位置设置为 1 种颜色。我将首先创建一个逻辑掩码,其中true 表示像素很重要,否则false。我的意思是,如果我们以您的示例为例,像素是 1、6 或 9。您可以使用bsxfun 结合any 创建此蒙版,然后我们可以使用它来索引您的图像并为这些位置设置正确的颜色。
因此,这样做:
%// Create your logical mask
mask3D = bsxfun(@eq, array1, permute(vector(:), [3 2 1]));
mask = any(mask3D, 3);
%// Set the image pixels to blue at these locations
red = img(:,:,1);
green = img(:,:,2);
blue = img(:,:,3);
red(mask) = 0;
green(mask) = 0;
blue(mask) = 255;
img = cat(3, red, green, blue);
这是一个快速运行的示例。假设我们有这张带有正方形的图片:
我们可以看到有三个正方形。让我们将对象 1 和对象 3 更改为蓝色。在我们这样做之前,我们需要得到一个标签图:
%// Originally a binary image
im = imread('http://i.stack.imgur.com/DnYQS.png');
%// Get label map
array1 = bwlabel(im);
%// Create colour version out of this binary image
img = 255*uint8(im);
img = cat(3, img, img, img);
array1 是您在问题中也提到的我们的标签映射,img 是输入图像的彩色版本。现在,vector = [1 3] 我们可以更改这些对象。标签是这样的,左上角是标签1,中间是标签2,右下角是标签3。
一旦我这样做并运行上面的代码,这就是我得到的图像: