关于Matlab中双线性插值的理解

1、双线性插值的原理就是根据:
已知两点可以求出直线方程,因此可以求出直线中任意一点;同样在另一条线上可以内插出另一个点;
再根据以上求出的两点求直线方程,内插出所要求得的点。
在这里插入图片描述

2、若在matlab中实现双线性插值,则需要注意:
上述公式的x,y坐标的范围为负无穷到正无穷,可为小数。
而对图像双线性插值时,只能为正整数,且不能超过图像的数组范围
因此,需要将求得的x,y坐标转换到图像坐标中,参考我的另一篇博客:二维图像旋转的坐标公式推导。(需要注意的是,图像坐标转换后,图像中的线的角度没有发生变化。)
关于坐标转换,就是将数学坐标转换成图像坐标,代码:

            x1=x+0.5*N;       % 此时x1,y1可能不是整数,但一定是正数。                                                          
            y1=-y+0.5*N;     

3.若是对图像上非整数位置(坐标)进行双线性插值,则需要:坐标转换–>边界处理–>双线性插值。
关于边界处理,指的是:如果求出的坐标超过了数组(图像)的范围,则要将其赋为最近的值。
为什么下面将大于N的赋值为N-1,而不是N,是因为,双线性插值的公式中,会取插值点最近的4个点,将x1,y1分别加了1(看下面双线性插值代码),所以赋值为N时会超出数组范围。

               x1(x1<1)=1;           %防止有的数据为小于1的数,取整之后为0,而数组索引必须为正整数或逻辑值。        
               y1(y1<1)=1;
               x1(x1>N)=N-1;                                      
               y1(y1>N)=N-1; 

在双线性插值时,由于求出的坐标x1,y1是基于图像坐标系的,而行列号与此相反,因此,双线性插值中的行为y1,列为x1,颠倒一下位置即可。
可以参照下图运算。
在这里插入图片描述
以一个点进行双线性插值为例子

 point=m(floor(y1),floor(x1)).*(1-u).*(1-v)+...
                  m(floor(y1),floor(x1)+1).*u.*(1-v)+...
                  m(floor(y1)+1,floor(x1)).*(1-u).*v+...
                  m(floor(y1)+1,floor(x1)+1).*u.*v; 

此处u,v分别为x1,y1的余数。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值