【问题标题】:Reduce number of pixels to obtain low-resolution image减少像素数以获得低分辨率图像
【发布时间】:2018-07-04 07:04:51
【问题描述】:

我正在尝试为我的工作使用不同的低分辨率图像。最近,我在阅读LOW RESOLUTION CONVOLUTIONAL NEURAL NETWORK FOR AUTOMATIC TARGET 承认,他们没有提到他们是如何制作低分辨率图像的。

特征计算的分辨率适配:展示影响 这些图像表示的性能的分辨率,我们 专注于从 200 × 200 到 10 × 10 的七种特定分辨率 像素

这是来自论文 的示例图像。

谁能帮我在MATLAB中实现这个方法?

目前,我正在使用这种方式制作低分辨率图像:

img = im2double(imread('cameraman.tif'));
conv_mat = ones(6) / 36;
img_low = convn(img,conv_mat,'same');

figure, imshow(img), title('Original');
figure, imshow(img_low), title('Low Resolution')

【问题讨论】:

  • 我改了你的标题,希望你不要介意。我发现原文很难阅读。

标签: matlab image-processing computer-vision subsampling


【解决方案1】:

你有一个好的开始。卷积使得每个像素都包含一个 6x6 邻域的平均值。现在剩下的就是在每个 6x6 邻域中只保留一个像素。该像素将具有平均删除信息:

img = im2double(imread('cameraman.tif'));
conv_mat = ones(6) / 36;
img_low = convn(img,conv_mat,'same');
img_low = img_low(3:6:end,3:6:end)

figure, imshow(img), title('Original');
figure, imshow(img_low), title('Low Resolution')

3:6:end 仅指示要保留哪些列和哪些行。我从 3 开始二次采样,以避免与背景平均的像素。

从您发布的图片来看,他们使用了这种平均方法。其他替代方法是取邻域中的最大值(就像在卷积神经网络的最大池化层中所做的那样),或者简单地进行子采样而不进行任何过滤(引入混叠,我不推荐这种方法)。

【讨论】:

  • 我必须创建一些低分辨率图像。所以 3:6:end,3:6:end 会有所不同。我怎样才能使它有点笼统?
  • 对于 2x2 平均像素,它将是 conv_mat = ones(2) / 4; img_low = convn(img,conv_mat,'same'); img_low = img_low(2:2:end,2:2:end) ?
  • 是的,你没看错。您可以在那里使用一个变量使其通用:k=2;conv_mat = ones(k)/(k*k);img_low = img_low(ceil(k/2):k:end,ceil(k/2):2:end);
  • 是的,它工作正常。只想问几件事是我有 500x500 的图像,我正在做 2x2 的平均像素。输出为 250x250 图像。所以它只保持平均值,对吗?同样,对于相同的图像,当我使用 3x3 平均像素时,它会输出 167x167 图像。这种情况是如何使图像成为整数的。例如它应该是 500/3 = 166.66。那么在平均像素时如何四舍五入到上限或下限
  • @AadnanFarooqA:我猜你想拿floor(size(img)/k) 像素?不过我不认为这很重要。 -- 是的,这个过程保持每个kxk像素块的平均值。
猜你喜欢
  • 2019-12-19
  • 1970-01-01
  • 2014-11-20
  • 1970-01-01
  • 2017-08-23
  • 1970-01-01
  • 2011-04-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多