matlab 图像缩放 —— 最近邻插值 和 双线性插值

Malak ·
更新时间:2024-11-10
· 878 次阅读

目录一、插值与图像缩放二、最近邻插值1、原理2、代码实现三、双线性插值1、原理2、代码实现 一、插值与图像缩放

  首先举个例子说明插值过程,先看看matlab的插值函数 interp() 吧:

x = -2 : 1 : 2; y = -2 : 1 : 2; [X, Y] = meshgrid(x, y); Z = -X.^2 - Y.^2; p = -2 : 0.33 : 2; q = -2 : 0.33 : 2; [P, Q] = meshgrid(p, q); V1 = interp2(X, Y, Z, P, Q, 'nearest'); % 最邻近插值 V2 = interp2(X, Y, Z, P, Q, 'linear'); % 双线性插值 V3 = interp2(X, Y, Z, P, Q, 'spline'); % 球面插值 figure subplot(221) surf(X, Y, Z); colormap('autumn') title('z = x^2 + y^2') subplot(222) surf(P, Q, V1); colormap('autumn') title('z = x^2 + y^2,最邻近插值') subplot(223) surf(P, Q, V2); colormap('autumn') title('z = x^2 + y^2,是双线性插值') subplot(224) surf(P, Q, V3); colormap('autumn') title('z = x^2 + y^2,球面插值')

我们先绘制一个粗糙的曲面,然后通过不同的方式插入一些点,得到的图像如下:
在这里插入图片描述
  可见,不同的插值效果不一样,图一很粗糙,绘图点数少,图二为最邻近插值,得到类似 ‘阶跃’ 的效果,而图三图四的曲面过去看起来更加圆滑。类比到图像,使用最邻近插值得到的图像相当于把像素点放大了,而使用双线性插值和球面插值相当于让图像像素点之间过度更加平滑。


二、最近邻插值 1、原理

最近邻插值,是将距离目标点最近的像素点的值作为插值的值
在这里插入图片描述
  如图为将一张MxN的图像src放大到PxQ的图像dst,我们要创建一个新的PXQ的数组,像素点中随便取一个点A(i, j),假设我们使用的灰度图,那么A点的灰度值应该是多少呢?
  首先我们把P点的坐标映射到原图像中(不知道说映射贴不贴切



插值 双线性插值 线性插值 线性 matlab 图像缩放

需要 登录 后方可回复, 如果你还没有账号请 注册新账号