【问题标题】:Need help regarding plotting the pixel from binary images to a sparse image需要有关将像素从二值图像绘制为稀疏图像的帮助
【发布时间】:2015-02-18 10:18:13
【问题描述】:

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

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

这里使用的输入如下所示:

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

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

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

【问题讨论】:

  • 什么是稀疏图像?请更具体。
  • 我添加了一个稀疏图像的例子。包含前景图像上的像素的图像。但是,并不是所有的像素都被绘制出来了。
  • 好的,谢谢你的图片。但我仍然不清楚什么是稀疏图像。没有正确的定义,我们无能为力。
  • 你只想绘制边界+一些内部点吗?或者只是一个随机子集(比如每十分之一点),这很容易。有人告诉你做一个“稀疏图像”,我想,也许问他们有什么要求。
  • @nkjt:是的,我想绘制一个类似于原始图像的随机子集。有什么建议吗?

标签: matlab plot binary-image


【解决方案1】:

你不需要 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 仅返回边界,然后填充随机的像素子集:

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

【讨论】:

  • 感谢您提供的信息。但是,如何获得要显示的随机子集像素?我知道这是一个愚蠢的问题,但我是 MATLAB 新手。
  • 我想出了如何显示图像。再次感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-26
  • 2021-05-01
  • 2019-12-31
  • 1970-01-01
  • 2019-10-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多