2017-02-20 18 views
1

У меня есть изображение спутника, и я хочу показать пример мультимасштабирования. , так что я сделал, добавьте нули (черные пиксели) вокруг изображения и поместите изображение в центр. теперь, как я могу заполнить нули из первой левой, правой, верхней и нижней строк/столбца пикселей? enter image description hereКак растянуть первый левый, правый, верхний и нижний строки/столбца изображения?

код Matlab:

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

EDIT:
enter image description here Может быть, это легко объяснить, из этого образа. Является ли этот образ тем, что я хочу, это повторить морскую часть таким образом на черной области, что похоже, что у нас есть большие пустые морские и маленькие корабли в центре. Вот почему я сделал красные строки, которые я хочу повторить/сделать копию/продлить первый левый, правый, верхний и нижний пиксельные строки/столбцы, чтобы сделать изображение в центре и в черном будет преобразовываться в значения пикселей первого левого, правого, верхний и нижний пиксельные строки/столбцы.

+0

Непонятно, что вы подразумеваете под «заполнить нули» – Abhinav

+0

на данный момент у меня есть нули вокруг изображения. Вместо нулей я хочу поместить значения пикселей в первом левом, правом, верхнем и нижнем столбцах/столбцах. – Addee

+0

Используйте команду imrezise и поместите результаты в свою функцию padarray. – MimSaad

ответ

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


Проверьте следующее:
Данный пример поливают на Matlab документация от imtransform

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

+0

Спасибо Rotem, но я хочу просто показать изображение в нижней части экрана в центре, а оставшаяся часть должна быть фиолетовым фоном, например, как верхняя строка, нижняя строка, первый столбец и последний столбец фиолетовый, поэтому он расширяется/повторяется до размера оригинального изображения. Поэтому у нас будет большой фиолетовый фон и в центре маленькие овощи. у вас есть то, что я хочу сказать? – Addee

3

Я думаю, что вы ищете вариант 'replicate' обивки:

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

в результате с:
enter image description here

Если вы ищете гладкий результат, рассмотреть возможность использования regionfill.

+0

Спасибо, пожалуйста, скажите мне, как я могу использовать 'regionfill'? – Addee

+0

@Addee вы можете прочитать в связанной документации. – Shai