假设我有一个4像素乘4像素的图像,其值介于0到255之间,我想将其扩展为8×8图像,并在必要时进行插值。我知道如何使用interp1:
以这种方式插入 vector interp1(linspace(0,1,numel(vector)), vector, linspace(0,1,newSize))
但我不清楚如何使用interp2为矩阵做同样的事情。
编辑:如果我在为每个维度使用linspace后创建一个meshgrid会不会相同?
EDIT2:是的,这很有用。它是相同的,但有一个meshgrid。
答案 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,[]);