双线性插值,数学原理很简单,可以参看该链接,参考前注意区分水平和竖直方向,图像的height代表行方向,图像的width代表列方向。
线面给出MATLAB代码:
% 双线性插值
% 输入图像文件及放大率
% 输出根据放大率变化后的新图像
function bilinear_interpolation = bilinear_interpolation(filename,R)
tic
% 初始化,读入图像,图像数据为m*n*color
img = imread(filename);
% 变化后图像
[row,col,color] = size(img); % 获得图像的行列数及色板数
row = round(row*R); % 新图像行
col = round(col*R); % 新图像列
%display([row,col,color]);
% 新图像初始化
% 使用class获得原图像的数据类型,使得新图像数据类型与原图像保持一致
img_new = zeros(row,col,color,class(img));
% 对新图像的行、列、色板赋值
x = 0;
for i = 1:row
y = 0;
u = (i-1)/R-floor((i-1)/R); %求取水平方向上的权重
if u == 0
x = x + 1;
end
for j = 1:col
v