需要有关将像素从二进制图像绘制为稀疏图像的帮助

Need help regarding plotting the pixel from binary images to a sparse image

我有一张二值图像,我想使用 MATLAB 仅将前景像素绘制成稀疏图像。我知道必须知道前景图像(白色)的像素位置。为此,我遵循代码:

close all
clear all
original = imread('/gt_frame_2.bmp');    
fig1 = figure(1)
[x y]=find([original])

此处使用的输入显示如下:

预期的稀疏图像将是这样的:

上图是通过 GIMP 生成的。只是为了了解稀疏图像的外观。它包含前景图像的像素。但是,并非所有像素都被绘制出来。

找到像素的 X Y 坐标后,我需要将其绘制到稀疏图像上。这是我迷路的地方,我不知道如何绘制稀疏图像。感谢任何形式的帮助。

你不需要 x-y,如果你只想选择一些像素子集,线性索引更容易。语法 1:step:end 是挑选向量或矩阵的子集的一种非常有用的方法。即使矩阵的大小不是 step 的精确倍数,它也能工作,例如在命令行中检查它的作用:

n = 1:5 
n(1:3:end)

所以这是一个非常基本的方法:

n = find(I); % list of non-zeros
I2 = zeros(size(I)); % blank image of same size
I2(n(1:10:end))=1; % every tenth pixel

我们可以变得更复杂(认为这需要图像处理工具箱)。如果只有一个实体对象,请使用 bwperim 到 return 边界,然后用像素的随机子集填充:

I2 = bwperim(I);
% randperm for sampling without replacement
n2 = randperm(numel(n),floor(numel(n)/10);
I2(n(n2))=1;