图像处理之-----插值算法
插值算法是图像处理中最基本的算法,首先我们先了解一下什么是插值算法,以及插值算法在图像处理过程中的应用。
1、什么是插值
Interpolation is a method of constructing new data points within the range of a discrete set of known data points. Image interpolation refers to the “guess” of intensity values at missing locations.
在日常对图像进行操作的过程中会涉及到图像的放大与缩小,这一系列的操作都是通过插值法来实现的;opencv中resize()函数的实现原理0就是通过插值算法,如果不对应用某种算法进行设置,则默认采用双线性插值算法。
简单来说,插值指利用已知的点来“猜”未知的点,图像领域插值常用在修改图像尺寸的过程,由旧的图像矩阵中的点计算新图像矩阵中的点并插入,不同的计算过程就是不同的插值算法。
2、常用的插值算法
最近邻法(Nearest Interpolation):计算速度最快,但是效果最差。
双线性插值(Bilinear Interpolation):双线性插值是用原图像中4(22)个点计算新图像中1个点,效果略逊于双三次插值,速度比双三次插值快,属于一种平衡美,在很多框架中属于默认算法。
双三次插值(Bicubic interpolation):双三次插值是用原图像中16(44)个点计算新图像中1个点,效果比较好,但是计算代价过大。
3、最近邻插值(Nearest Interpolation)
“近邻”,顾名思义就是从原图像矩阵中找到与它(目标图像的像素点)距离最近的点,然后将最近点的像素值,赋给它就行了。
那么如何找最近点?
假设目标图像与原图像的坐标点的对应关系如下:
其中
[src_x] : 原图像中像素点 [x] 坐标
[src_y] : 原图像中像素点 [y] 坐标
[des_x] : 目标图像中像素点 [x] 坐标
[des_y] : 目标图像中像素点 [y] 坐标
[src_w] : 原图像宽度(width)
[src_w] : 原图像高度(high)
[des_w] : 目标图像宽度(width)
[des_w] : 目标图像高度(high)
下面简述一下如何计算:
目标像素坐标 → 原图像像素坐标
注:如果坐标为小数,四舍五入即可。
上面已计算出目标图像的第一行像素点坐标对应于原图像的坐标. 其余的坐标对应关系也可上述方法依次计算.
最近邻插值缺点:最邻近算法计算量较小,但可能会造成插值生成的灰度上的不连续,在灰度变化的位置处,可能会产生明显的锯齿现象.
4、双线性插值
双线性插值的对应公式和前面的最近邻法一样,不一样的是根据对应关系不再是找最近的1个点,而是找最近的4个点,如下图所示
这里可能还会有点小疑问,如果根据对应关系找到原图中的点不是在不同的点之间,而是跟原图像中的点重合,那该如何找4个点?关于这个问题要看一下双线性插值的计算公式,双线性插值实际上是从2个方向一共进行了3次单线性插值,咱们先了解单线性插值的计算方式。
4.1 单线性插值
已知中P1点和P2点,坐标分别为(x1, y1)、(x2, y2),要计算 [x1, x2] 区间内某一位置 x 在直线上的y值
根据初中的知识,2点求一条直线公式(这是双线性插值所需要的唯一的基础公式)
整理后:
这里没有写成经典的AX+B的形式,因为这种形式从权重的角度更好理解。
首先看分子,分子可以看成x与x1和x2的距离作为权重,这也是很好理解的,P点与P1、P2点符合线性变化关系,所以P离P1近就更接近P1,反之则更接近P2。
现在再把公式中的分式看成一个整体,原式可以理解成y1与y2是加权系数,如何理解这个加权,要返回来思考一下,咱们先要明确一下根本的目的:咱们现在不是在求一个公式,而是在图像中根据2个点的像素值求未知点的像素值。这样一个公式是不满足咱们写代码的要求的。
现在根据实际的目的理解,就很好理解这个加权了,y1与y2分别代表原图像中的像素值,上面的公式可以写成如下形式:
4.2 双线性插值
已知Q11(x1,y1)、Q12(x1,y2)、Q21(x2,y1)、Q22(x2,y2),求其中点P(x,y)的值。
前面介绍过双线性插值是分别在两个方向计算了共3次单线性插值,如图所示,先在x方向求2次单线性插值,获得R1(x, y1)、R2(x, y2)两个临时点,再在y方向计算1次单线性插值得出P(x, y)(实际上调换2次轴的方向先y后x也是一样的结果)。
1.x方向单线性插值 直接带入前一步单线性插值最后的公式
2. y方向单线性插值
将第一步结果带入第二步
回顾一下上面双线性插值对应关系的图,不难发现,在计算中有这样的关系:
那么上面的公式中的分母全都为0,如下:
在有些资料中,会写成权重的形式,上面的展开式是下面的权重表达式的正确求法
f(x,y)代表目标图像上坐标为(x,y)的值。
参考博客链接:
https://zhuanlan.zhihu.com/p/110754637
https://zhuanlan.zhihu.com/p/266951945
图像处理之-----插值算法相关推荐
- OpenCV框架与图像插值算法
@(Aaron) [图像处理, 图像插值算法] 1.1 简介 在图像处理中,平移变换.旋转变换以及放缩变换是一些基础且常用的操作.这些几何变换并不改变图象的象素值,只是在图象平面上进行象素的重新排 ...
- 【图像处理】基于分形插值算法实现换脸含Matlab源码
1 简介 2 部分代码 function result = skin(Y,Cb,Cr)a = 25.39;b = 14.15;ecx = 1.72;ecy = 2.43;sita = 2.64;cx ...
- 视频图像处理基础知识0(双线性插值算法进行图像缩放)【转】
转自:http://blog.csdn.net/times_poem/article/details/51395781 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 双线性插 ...
- 计算机视觉基础:图像处理Task01-图像插值算法
图像插值算法 1. 最近邻插值算法 最近邻插值,是指将目标图像中的点,对应到源图像中后,找到最相邻的整数点,作为插值后的输出. f(dstX,dstY)=h(dstXsrcWidthdstWidth, ...
- Datawhale 计算机视觉基础-图像处理(上)-Task01 OpenCV框架与图像插值算法
简介 在图像处理中,平移变换.旋转变换以及放缩变换是一些基础且常用的操作.这些几何变换并不改变图象的象素值,只是在图象平面上进行象素的重新排列.在一幅输入图象 [ u , v ] [u,v] [u,v ...
- 图像处理中两种基本的插值算法(最邻近插值法和双线性内插法)
在图像的基本仿射变换中,经常会碰到经过旋转.缩放后灰度值如何赋值的问题.因为变换之后,图像的坐标位置有可能是小数,所以就需要插值算法来确定到底将该像素赋予哪个位置. 1.最邻近插值法(Nearest ...
- 计算机视觉图像处理-CV2与图像插值算法
用最近邻插值与双线性插值原理完成图像缩放 最近邻插值,是指将目标图像中的点,对应到源图像中后,找到最相邻的整数点,作为插值后的输.缺点:使用最近邻插值算法处理图像放大时,在图象中可能出现明显的块状效应 ...
- 数字图像处理(十三)图像放大及双线性插值算法
导言 图像放大是日常学习中经常要用到的两个算法,我们首先讨论缩放的流程以及放大时如何优化双线性插值算法. 采用国际标准测试图像Lena,为了方便,我们将读入的彩色图转为灰度图进行缩放. 图像放大 和图 ...
- 结合实例与代码谈数字图像处理都研究什么?
图像处理(以及机器视觉)在学校里是一个很大的研究方向,很多研究生.博士生都在导师的带领下从事着这方面的研究.另外,就工作而言,也确实有很多这方面的岗位和机会虚位以待.而且这种情势也越来越凸显.那么图像 ...
最新文章
- 渗透中寻找突破口的那些事
- 程序员要避免的五种程序注释方式
- 计算机专业学生却被强迫工厂实习?结果发生意外手指被截肢,学校回应:会治到满意为止...
- linux rsync 原理,rsync 同步原理和类别
- 北斗导航 | 坐标转换:ECEF转LLA:GPS坐标系:WGS84(matlab代码)
- wxWidgets:创建其他框架
- m5310模组数据上传至onenet_5G通信模组799元限量发售,中国移动意欲何为?
- 支持多协议多服务的服务器设计和实现的步骤,基于多协议的人工影响天气接入服务器设计与实现...
- 微信帝国进化史:一个通讯工具如何在八年内制霸互联网?
- 转自《编程世界》一篇让我震憾的文章
- MATLAB2018a安装包免费
- WebService cxf视频教程
- 网络贷款系统完整版源码,thinkphp内核开发,安全可靠,定制网贷分销平台系统
- 51单片机流水灯实验
- 泛微云桥e-Bridge任意文件读取
- 为了强调低电平有效,有时也将反相器图形符号中表示反相的小圆圈画在输入端,例如上图的左边一列反相器的画法
- [案例]信息巨头Carfax如何打造数据产品
- 为什么说“管理是一门技术、更是一门艺术”
- c语言程序24转换12时间,C语言将24小时制转换为12小时制的方法
- vscode 调试php 乱码,vscode调试c解决中文乱码怎么办