Image 用matlab替换图像的数组值

Image 用matlab替换图像的数组值,image,matlab,image-processing,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

我有一个图像中有一个项目,我试图找到它的边缘。 我应用了一种边缘检测算法,并使用regionprops成功地找到了图像周围的痕迹。我还有跟踪形状内部的像素。我想做的是用黑色背景替换所有其他像素。 A是RGB图像,Aseg是分段图像

A1=rgb2gray(A)
pixels=regionprops(logical(Aseg),'PixelList');
我知道如何在原始图像上绘制所需的像素

imshow(A1);hold on
plot(pixels.PixelList(:,1),pixels.PixelList(:,2))
但我只想画出我想保留其原始值的像素,然后用黑色背景替换所有其他像素,我找不到方法来做。 有人有什么建议吗?
谢谢。

如果您只想保持形状的像素,并将所有其他设置为黑色,只需创建一个新的空白图像,并将位置从原始图像复制到新图像上,其他设置为黑色。这基本上将所有其他位置设置为黑色,同时保留所需区域不变

您可以通过生成线性索引来直接访问图像并将这些值复制到新图像中来实现这一点

因此,请尝试以下方法:

Anew = zeros(size(A1), class(A1));
ind = sub2ind(size(A1), pixels.PixelList(:,2), pixels.PixelList(:,1)); 
Anew(ind) = A1(ind);
重新
包含背景像素设置为黑色的新图像
PixelList
是一种结构,其中第一列为
x
坐标,第二列为
y
坐标。使用
sub2ind
,您必须首先指定行,然后指定列,这就是为什么我们首先索引第二列,然后索引后面的第一列

或者,您可以使用逻辑索引来实现同样的目标,方法是创建一个
逻辑的矩阵,然后使用该矩阵直接索引到图像中并设置适当的位置:

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

相同,非常好!非常感谢,这正是我想要的。