用插值法在Matlab中扩展二维矩阵

时间:2018-02-24 06:03:59

标签: matlab interpolation linear-interpolation

假设我有一个4像素乘4像素的图像,其值介于0到255之间,我想将其扩展为8×8图像,并在必要时进行插值。我知道如何使用interp1:

以这种方式插入 vector

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

但我不清楚如何使用interp2为矩阵做同样的事情。

编辑:如果我在为每个维度使用linspace后创建一个meshgrid会不会相同?

EDIT2:是的,这很有用。它是相同的,但有一个meshgrid。

1 个答案:

答案 0 :(得分:0)

对于以常规网格形式构建的数据,您可以按照正确的说明使用interp2,但由于您正在处理图片,我建议您使用imresize function,这是使用适当的插值算法进行微调以重新缩放图像:

% 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,[]);