Расширение 2D-матрицы в Matlab с интерполяцией

Допустим, у меня есть изображение 4 на 4 пикселя со значениями от 0 до 255, и я хочу расширить его до изображения 8 на 8, при необходимости интерполируя. Я знаю, как интерполировать вектор таким образом с помощью interp1:

interp1(linspace(0,1,numel(vector)), vector, linspace(0,1,newSize))

Но я не понимаю, как использовать interp2, чтобы сделать то же самое для matrix.

РЕДАКТИРОВАТЬ: Было бы то же самое, если бы я создал сетку после использования linspace для каждого измерения?

EDIT2: Да, это сработало. То же самое, но с сеткой.


person playitright    schedule 24.02.2018    source источник


Ответы (1)


Для данных, структурированных в виде регулярной сетки, вы можете использовать interp2 как вы правильно сказали, но поскольку вы имеете дело с изображением, я предлагаю вам использовать imresize функция, настроенная для масштабирования изображений с использованием соответствующих алгоритмов интерполяции:

% Load an image and display it...
img = imread('peppers.png');
figure(),imshow(img);

% Create a second image that is
% twice the size of the original
% one and display it...
img2 = imresize(img,2);
figure(),imshow(img2);

В любом случае, если вы действительно хотите использовать вышеупомянутую функцию, вот как я бы выполнил интерполяцию:

% Load an image, convert it into double format
% and retrieve its basic properties...
img = imread('rice.png');
img = im2double(img);
[h,w] = size(img);

% Perform the interpolation...
x = linspace(1,w,w*2);
y = linspace(1,h,h*2);
[Xq,Yq] = meshgrid(x,y);
img2 = interp2(img,Xq,Yq,'cubic') ./ 255;

% Display the original image...
figure(),imshow(img);

%Display the rescaled image...
figure(),imshow(img2,[]);
person Tommaso Belluzzo    schedule 24.02.2018