【数字图像处理】简单粗暴介绍最近邻插值和双线性插值(附python实现)

前言

最近邻插值和双线性插值是两种常见的用于图像处理的方法,主要是用于实现图像的放大和缩小。本文中将以最为简单粗暴的方式介绍两种方法的原理,以及底层的代码实现。

为什么需要有插值的存在呢?这是因为计算机中存储的数据都是离散的。假设有一个350×350的图片,现在我要将其放大两倍,即新图为750×750,。对于原图当中的每一个像素,可以将其像素值的坐标对应乘上2,将其映射到新图中(如对于点(150, 100),其在新图中的坐标为(300, 200))。

但是这样做就有一个问题,新图中的像素点显然是更多的,这就会导致很多点并不能在原图中找到完全对应的点,这是因为原图中的坐标是离散分布的(如新图中的(201, 101),按照映射比例应该为(100.5, 50.5),但这在原图中是不存在的)。因此就会导致像素点的丢失。所以我们就需要采用一些办法解决这个问题。

最近邻插值

理论与公式部分

最近邻插值是最好理解也是最好实现的一种方法。其基本思想是**在目标像素点上插入离对应原像素点最近的点的像素值,而不考虑图像可能的颜色变化。**这是什么意思呢?我们仍然根据前言中的例子分析。

对于目标图中的点(300, 200),其通过逆变换得到的值是真实存在于原图中的,此时不需要做处理,直接将原图点像素值给到目标点即可;而对于目标图中的点(201, 101),根据映射关系对其进行逆变换得到其在原图上的点是(100.5, 50.5),但是原图中并不存在这个像素点,不过可以根据四舍五入的规则,找到原图真实存在的像素点中,与目标点距离最近的点。最近邻插值的办法就是,选取与目标点距离最近的一个点,并将该点的像素值赋给目标点。 那么对于(100.5, 50.5),按照四舍五入的规则,其像素值就应该同原图中点(101, 51)一致。

根据以上思路,总结为数学公式如下:
s r c x = d s t x ∗ d s i z e x src_x=dst_x*dsize_x srcx=dstxdsizex s r c y = d s t y ∗ d s i z e y src_y=dst_y*dsize_y srcy=dstydsizey
其中, s r c x src_x srcx s r c y src_y srcy是原图中用于确定目标点像素值的坐标, d s t x dst_x dstx d s t y dst_y dsty是目标图中目标点的坐标,dsize分别是提前预设的水平、竖直两个方向的缩放比率。

上述思路是纯粹的数学思路,还没有考虑离散化的问题。实际的计算公式应该增加舍入思想:

s r c x = r o u n d ( d s t x ∗ d s i z e x ) src_x=round(dst_x*dsize_x) srcx=round(dstxdsizex) s r c y = r o u n d ( d s t y ∗ d s i z e y ) src_y=round(dst_y*dsize_y) srcy=round(dstydsize

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值