替换images-matlab的数组值

时间:2015-04-20 18:44:24

标签: image matlab image-processing

我有一个带有项目的图像,我正试图找到它的优势。 我已经应用了边缘检测算法,并且使用regionprops成功找到了图像周围的迹线。我也有跟踪形状内的像素。我想要做的是用黑色背景替换所有其他像素。 A是RGB图像,Aseg是分割图像

A1=rgb2gray(A)
pixels=regionprops(logical(Aseg),'PixelList');

我知道如何在原始图像上绘制我需要的像素

imshow(A1);hold on
plot(pixels.PixelList(:,1),pixels.PixelList(:,2))

但我想绘制我想要保留原始值的像素,并用黑色背景替换所有其他像素,我找不到办法。 有人有什么建议吗? 谢谢。

1 个答案:

答案 0 :(得分:2)

如果您只想保持形状的像素并将其他所有内容设置为黑色,只需创建空白图像,然后将原始图像中的位置复制到新图像,把一切都当作黑色。这基本上将所有其他位置设置为黑色,同时保持所需区域完整。

您可以通过sub2ind来生成线性索引,以直接访问您的图片并将这些值复制到新图片中。

因此,尝试这样的事情:

Anew = zeros(size(A1), class(A1));
ind = sub2ind(size(A1), pixels.PixelList(:,2), pixels.PixelList(:,1)); 
Anew(ind) = A1(ind);

Anew包含背景像素设置为黑色的新图像。 PixelList是一种结构,其中第一列是x坐标,第二列是y坐标。对于sub2ind,您必须首先指定行,然后是之后的列,这就是我们首先索引第二列,然后是第一列的索引的原因。

或者,您可以通过创建logical的{​​{3}}矩阵使用逻辑索引来实现相同的功能,然后使用此矩阵直接索引到图像并设置正确的位置:

Anew = zeros(size(A1), class(A1));
ind = logical(sparse(pixels.PixelList(:,2), pixels.PixelList(:,1), 1, size(A1,1), size(A1,2)));
Anew(ind) = A1(ind);

请注意,行和列的排序与使用sub2ind相同。