0

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

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

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

二进制图像

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

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

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

4

1 回答 1

1

您不需要 xy,如果您只想选择一些像素子集,线性索引更容易。语法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仅返回边界,然后填充随机的像素子集:

I2 = bwperim(I);
% randperm for sampling without replacement
n2 = randperm(numel(n),floor(numel(n)/10);
I2(n(n2))=1;
于 2015-02-18T12:20:41.457 回答