如何拉伸图像的左,右,上,下行/列?

时间:2017-02-20 02:17:12

标签: matlab image-processing

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

Matlab代码:

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

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

2 个答案:

答案 0 :(得分:4)

我不知道这是不是你的意思......

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

这是我的代码示例(您可以改为使用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);

结果:
enter image description here

检查以下内容:
该示例基于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);

结果:
enter image description here

答案 1 :(得分:3)

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

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

结果:
enter image description here

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