图像缩放功能的插值算法
简介
在 Matlab 下对图像分别采用最近邻插值、双线性插值、三次插值 3 种算法进行 0. 5 倍、3 倍缩放,对这 3 种算法实现的缩放效果和原图做出比较。
最近邻插值算法
最近邻插值算法又称为零阶插值,就是令变换后像素的灰度值等于距它最近的输入像素的灰度值。
最近邻插值算法简单,在许多情况下都能得到满意的结果,但是当图像中的像素灰度级有细微变化时,
该方法会在图像中产生人为加工的痕迹。
function[im_n] = myNearest(im,ratio)
%最邻近插值,ratio是比例
%得到图像的行数、列数、以及每像素的维数(防止出现三幅图像)
[line,row,v]=size(im);
%新的行数和列数,预分配内存
line_n = round(ratio * line);
row_n = round(ratio * row);
%循环
x_n = 1 : line_n;
y_n = 1 : row_n;
%防止溢出
x = round(x_n * (line - 1) / (line_n - 1) + (line_n - line) / (line_n - 1) );
y = round(y_n * (row - 1) / (row_n - 1) + (row_n - row) / (row_n - 1) );
im_n(x_n,y_n) = im(x,y);
end
双线性插值算法
双线性插值算法又称双线性内插,经过放大或缩小若干倍之后,目标图像 Im(x y) 点坐标所对应的源图像坐标 (x ∗ m/m’ y ∗ n/n’) 通常为浮点数,假设为 P 点,用 P (i_x + u_x i_y + u_y) 表示, 其中 i_x,i_y 分别表示整数部分,u_x,u_y 分别表示小数部分。由其相邻 4 个点的灰度值的线性关系计算 P 点的灰度值,即 P 点的灰度值由这 4 个相邻点共同决定,距 P 点越近,则影响因子越大, 反之影响因子越小,对于 (i_x i_y) 点,x 方向上 u_x 的值越大,其影响因子越小,i_y 方向上 u_y 的值越大,其影响因子越小,所以 (i_x i_y) 点的影响值为 Im(i_x i_y) ∗ (1 − u_x) ∗ (1 − u_y),其余 3 个点类似。
P 点的灰度值计算公式:
P (x y) = (1 − u_x) ∗ (1 − u_y) ∗ Im(i_x i_y) + (1 − u_x) ∗ u_y ∗ Im(i_x i_y + 1) + u_x ∗ (1 − u_y) ∗ Im(i_x + 1 i_y) + u_x ∗ u_y ∗ Im(i_x + 1 i_y + 1)
function [im_b] = myBilinear(im, ratio)
%双线性内插算法
%得到图像的行数、列数、以及每像素的维数(防止出现三幅图像)
[line,row,v]=size(im);
%便于后面的计算
im = double(im);
%新的行数和列数,预分配内存
line_n = round(ratio * line);
row_n = round(ratio * row);
%向量化循环,防止溢出
x_n = 1 : line_n - 1;
y_n = 1 : row_n - 1;
%投影回去的位置
x = x_n * (line - 1) / (line_n - 1) + (line_n - line) / (line_n - 1);
y = y_n * (row - 1) / (row_n - 1) + (row_n - row) / (row_n - 1);
% x = x_n * (line - 1) / (line_n) + (line_n -<

本文对比了三种图像缩放算法:最近邻插值、双线性插值和三次插值,通过Matlab实现并测试了0.5倍和3倍的图像缩放效果。最近邻插值算法简单快速但易产生锯齿;双线性插值算法在提高图像质量的同时,计算量略有增加;三次插值算法能提供最佳的图像质量和边缘平滑,但计算成本最高。
最低0.47元/天 解锁文章
1953

被折叠的 条评论
为什么被折叠?



