替换 images-matlab 的数组值
replacing array values for images-matlab
我有一张图片,里面有一个项目,我正在尝试找到它的边缘。
我应用了边缘检测算法,并且使用 regionprops 成功地找到了图像周围的痕迹。我也有跟踪形状内的像素。我想要做的是用黑色背景替换所有其他像素。
A为RGB图像,Aseg为分割图像
A1=rgb2gray(A)
pixels=regionprops(logical(Aseg),'PixelList');
我知道如何在原始图像上绘制我需要的像素
imshow(A1);hold on
plot(pixels.PixelList(:,1),pixels.PixelList(:,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
,您必须先指定行,然后指定列,这就是为什么我们首先索引第二列,然后索引第一列。
或者,您可以使用逻辑索引实现相同的目的,方法是创建一个 sparse
矩阵 logical
,然后使用该矩阵直接对图像进行索引并设置适当的位置:
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
相同。
我有一张图片,里面有一个项目,我正在尝试找到它的边缘。 我应用了边缘检测算法,并且使用 regionprops 成功地找到了图像周围的痕迹。我也有跟踪形状内的像素。我想要做的是用黑色背景替换所有其他像素。 A为RGB图像,Aseg为分割图像
A1=rgb2gray(A)
pixels=regionprops(logical(Aseg),'PixelList');
我知道如何在原始图像上绘制我需要的像素
imshow(A1);hold on
plot(pixels.PixelList(:,1),pixels.PixelList(:,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
,您必须先指定行,然后指定列,这就是为什么我们首先索引第二列,然后索引第一列。
或者,您可以使用逻辑索引实现相同的目的,方法是创建一个 sparse
矩阵 logical
,然后使用该矩阵直接对图像进行索引并设置适当的位置:
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
相同。