【问题标题】:how to stretch the first left, right, top, and bottom row/column of image?如何拉伸图像的第一左、右、顶和底行/列?
【发布时间】:2017-07-09 04:40:33
【问题描述】:

我有一张卫星图像,我想展示一个多尺度的示例。 所以我所做的是,在图像周围添加零(黑色像素)并将图像放在中心。现在如何从第一个左侧、右侧、顶部和底部像素行/列填充零?

Matlab 代码:

img=imread ('example.jpg');
padcam = padarray(img,[1000 1000],'both');

编辑:
也许从这张图片很容易解释。这张图片是不是我想要的是在黑色区域以这样的方式重复海洋部分,看起来我们在中心有大片空海和小船。这就是为什么我制作了我想要重复/复制/扩展第一个左、右、上、下像素行/列的红线,以便将图像中心和黑色转换为第一个左、右的像素值,顶部和底部像素行/列。

【问题讨论】:

  • 不清楚“填零”是什么意思
  • 目前我的图像周围有零。我想将第一个左、右、顶和底行/列的像素值而不是零。
  • 使用 imrezise 指令并将结果放入您的 padarray 函数中。
  • 我认为@Shai 已经提供了您正在寻找的答案,如果您认为不是,请告诉我发布我的答案。
  • @MimSaad 你也可以发布你的答案。让我也检查一下,也许会有所帮助。

标签: matlab image-processing


【解决方案1】:

不知道是不是你的意思……

不要填充零,而是从最高分辨率开始,并将较低分辨率的图像放在彼此的中心。

这是我的代码示例(您可以改用for 循环):

I0 = imread('peppers.png');
I0 = padarray(I0,[16 16],'both'); %I0 - full resolution.
I1 = imresize(I0, 0.5);           %I1 - half resolution.
I2 = imresize(I0, 0.25);          %I2 - quarter resolution.

J = I0;

%Place I1 at the center of J.
J(1+(end-size(I1,1))/2:(end+size(I1,1))/2, 1+(end-size(I1,2))/2:(end+size(I1,2))/2, :) = I1;

%Place I2 at the center of J.
J(1+(end-size(I2,1))/2:(end+size(I2,1))/2, 1+(end-size(I2,2))/2:(end+size(I2,2))/2, :) = I2;

figure;imshow(J);

结果:


检查以下内容:
该示例基于imtransform的Matlab文档

I = imresize(imread('peppers.png'), 0.5);
A = [1, 0, 0; 0, 1, 0; 0, 0, 1];
T = maketform('affine', A);
R = makeresampler({'cubic', 'nearest'}, 'replicate');
J = imtransform(I, T, R, 'XData', [-size(I,2), size(I,2)*2], 'YData', [-size(I,1), size(I,1)*2]);
figure;imshow(J);

结果:

【讨论】:

  • 谢谢Rotem,但我只想在中心显示较低比例的图像,其余部分应该是紫色背景,如顶行、底行、第一列和最后一列是紫色的被扩展/重复到原始图像的大小。所以我们会有大的紫色背景和中间的小蔬菜。你明白我的意思了吗?
【解决方案2】:

我认为您正在寻找 'replicate' 填充选项:

padcam = padarray(img,[1000 1000],'both', 'replicate');

结果:

如果您正在寻找更平滑的结果,请考虑使用regionfill

【讨论】:

  • 谢谢,你能告诉我如何使用regionfill吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-06
  • 1970-01-01
  • 2013-12-23
相关资源
最近更新 更多