知识点
图像插值:
是基于模型框架下,从低分辨率图像生成高分辨率图像的过程,用以恢复图像中所丢失信息。
图像插值的分类
插值,分为图像内插值和图像间插值。其主要应用是对图像进行放大以及旋转等操作。
-
图像内插值:根据一幅较低分辨率图像再生出另一幅均具有较高分辨率的图像。
图像内插值实际上是对单帧图像的图像重建过程,这就意味着生成原始图像中没有的数据。
-
图像间插值:也叫图像的超分辨率重建,是指在一图像序列之间再生出若干幅新的图像,可应用于医学图像序列切片和视频序列之间的插值。
线性插值:这类插值方法在图像插值过程中采用同一种插值内核,不用考虑待插像素点所处的位置,这种做法会使图像中的边缘变得模糊不清,达不到高清图像的视觉效果。
非线性插值:
图像插值方法有:
-
最近邻插值(Nearest-neighbor)和双线性插值(Bilinear)
算法很容易出现锯齿,生成的图片质量不好。因此只在对图像质量要求不高的场合下采用。
-
双平方插值(bicubic)和双立方插值(bicubic)
实质上是”低通滤波器”,在增强图像平滑效果的同时丢失了许多高频信息。而在很多应用场合,细节信息恰恰非常重要,要考虑如何在保证平滑效果的同时尽可能地保留细节信息。
图像插值算法
最近邻插值
这是最简单的一种插值方法,不需要计算,在待求像素的四邻像素中,将距离待求像素最近的零像素灰度赋给待求像素。设待求像素坐标(i+u,j+v),其中i,j都为正整数,u,v为大于零小于1的小数,则待求像素灰度值f(i+u,j+v)。如下图:
如果&#xff08;i&#43;u&#xff0c;j&#43;v&#xff09;落在A区&#xff0c;即u<0.5,v<0.5,则将左上角像素的灰度值赋给待求像素&#xff0c;同理&#xff0c;落在B区则赋予右上角的像素灰度值&#xff0c;落在C区则赋予左下角像素的灰度值&#xff0c;落在D区则赋予右下角像素的灰度值。
最邻近算法计算量较小&#xff0c;但可能会造成插值生成的图像灰度上的不连续&#xff0c;在灰度变化的地方可能出现明显的锯齿状。
是指将目标图像中的点&#xff0c;对应到源图像中后&#xff0c;找到最相邻的整数点&#xff0c;作为插值后的输出。如下图所示&#xff0c;P为目标图像对应到源图像中的点&#xff0c;Q11、Q12、Q21、Q22是P点周围4个整数点&#xff0c;Q12与P离的最近&#xff0c;因此P点的值等于Q12的值。
由于图像中像素具有邻域相关性&#xff0c;因此&#xff0c;用这种拷贝的方法会产生明显的锯齿。
双线性内插值
双线性内插值是利用待求像素四个邻像素的灰度在两个方向上做线性内插&#xff0c;如下图所示&#xff1a;
对于(i&#xff0c;j&#43;v)&#xff0c;f(i,j)到f(i,j&#43;1)的灰度变化为线性关系&#xff0c;则有&#xff1a;
f(i,j&#43;v)&#61;[f(i,j&#43;1)-f(i,j)]*v&#43;f(i,j);
同理对于(i&#43;1,j&#43;v)则有&#xff1a;
f(i&#43;1,j&#43;v)&#61;[f(i&#43;1,j&#43;1)-f(i&#43;1,j)]*v&#43;f(i&#43;1,j)
从f(i,j&#43;v)到f(i&#43;1,j&#43;v)的灰度变化也为线性变化&#xff0c;由此可推导出待求像素灰度的计算式如下&#xff1a;
f(i&#43;u,j&#43;v)&#61;(1-u)*(1-v)*f(i,j)&#43;(1-u)*v*f(i,j&#43;1)&#43;u*(1-v)*f(i&#43;1,j)&#43;u*v*f(i&#43;1,j&#43;1)
双线性内插法的计算比最邻近点法复杂&#xff0c;计算量较大&#xff0c;但没有灰度不连续的缺点&#xff0c;结果基本令人满意。它具有低通滤波性质&#xff0c;使高频分量受损&#xff0c;图像轮廓可能会有一点模糊。
三次内插法
该方法利用三次多项式S(x)求逼近理论上最佳插值函数sin(x)/x,其数学公式&#xff1a;
待求像素&#xff08;x&#xff0c;y&#xff09;的灰度值由其周围16个灰度值加权内插得到&#xff0c;如下图&#xff1a;
三次曲线插值方法计算量较大&#xff0c;但插值后的图像效果最好。
OpenCV中的app&#xff1a;
void resize( InputArray src, OutputArray dst,Size dsize, double fx &#61; 0, double fy &#61; 0,int interpolation &#61; INTER_LINEAR );
- src:输入图像,待改变大小的图像
- dst:输出&#xff0c;改变大小之后的图像&#xff0c;这个图像和原图像具有相同的内容&#xff0c;只是大小和原图像不一样而已&#xff1b;
- dsize&#xff1a;输出图像的大小。如果这个参数不为0&#xff0c;那么就代表将原图像缩放到这个Size(width&#xff0c;height)指定的大小&#xff1b;如果这个参数为0&#xff0c;那么原图像缩放之后的大小就要通过下面的公式来计算&#xff1a;
dsize &#61; Size(round(fx*src.cols), round(fy*src.rows))
fx,fy是图像width方向和height方向的缩放比例。
- fx: width方向的缩放比例&#xff0c;若为0&#xff0c;那么它就会按照(double)dsize.width/src.cols来计算&#xff1b;
- fy: height方向的缩放比例&#xff0c;若为0&#xff0c;那么它就会按照&#xff08;double&#xff09;dsize.height/src.rows来计算。
- interpolation&#xff1a;指定插值的方式&#xff0c;图像缩放之后&#xff0c;肯定像素要进行重新计算的&#xff0c;就靠这个参数来重新计算像素的方式&#xff0c;有以下几种&#xff1a;
INTER_NEAREST - 最邻近插值
INTER_LINEAR - 双线性插值&#xff0c;如果最后一个参数你不指定&#xff0c;默认使用这种方法
INTER_AREA - resampling using pixel area relation. It may be a preferred method for image decimation, as it gives moire’-free results. But when the image is zoomed, it is similar to the INTER_NEAREST method.
INTER_CUBIC - 4x4像素邻域内的双立方插值
INTER_LANCZOS4 - 8x8像素邻域内的Lanczos插值
OpenCV的函数调用&#xff1a;
Mat src &#61; imread("D:/test/src912.jpg");
Mat dst1,dst2,dst3,dst4,dst5;
resize(src, dst1, Size(), 2, 2,INTER_NEAREST);
resize(src, dst2, Size(), 2, 2, INTER_LINEAR);
resize(src, dst3, Size(), 2, 2, INTER_AREA);
resize(src, dst4, Size(), 2, 2, INTER_CUBIC);
resize(src, dst5, Size(), 2, 2, INTER_LANCZOS4);imshow("src", src);
imshow("Nearest", dst1);
imshow("Linear", dst2);
imshow("Area", dst3);
imshow("Cubic", dst4);
imshow("Lanczos4", dst5);
应用
在很多情况下&#xff0c;人们需要对数字图像进行进一步的处理比如:
- 为了做广告宣传&#xff0c;需要将拍摄的艺术照片做成巨幅海报&#xff1b;
- 为了分析深层地质结构&#xff0c;需要对仪器采集的图像做局部细化&#xff1b;
- 为了分析外星球的大气和地面状况&#xff0c;需要使遥感卫星图片模糊细节变得有意义&#xff1b;
- 为了侦破缺少目击证人的案件&#xff0c;需要对监控录像做清晰化处理这些&#xff0c;就需要用到图像的插值技术&#xff0c;将原始低分辨率图像或模糊图像进行放大&#xff0c;并且要保证所要求的清晰度。
图像插值技术广泛应用于军事雷达图像&#xff0c;卫星遥感图像&#xff0c;天文观测图像&#xff0c;地质勘探数据图像&#xff0c;生物医学切片及显微图像等特殊图像及日常人物景物图像的处理。按照应用目的&#xff0c;图像插值技术的应用场合归为以下几种情况&#xff1a;
- 在图像采集&#xff0c;传输和实现过程中&#xff0c;不同的显示设备有着不同的分辨率&#xff0c;需要对视频序列和图像进行分辨率转换。如&#xff1a;大屏幕显示图像和制作巨幅广告招贴画。
- 当用户需要专注于图像的某些细节时&#xff0c;对图像进行放缩变换&#xff0c;如&#xff1a;图像浏览软件中的放大镜功能。
- 在视频传输中&#xff0c;为了有效利用有限的宽带&#xff0c;可以传输低分辨率的视频流&#xff0c;然后在接收端使用插值算法转换成高分辨率视频流。
- 为提高图像的存储和传输效率&#xff0c;而进行图像的压缩和重构。如&#xff1a;计算机虚拟现实技术中的图像差值。
- 在图像恢复时&#xff0c;已经被损坏的图像或者有噪声污染的图像&#xff0c;可通过插值对图像进行重建和恢复&#xff0c;如&#xff1a;警方在侦破案件时所发现的存在污损的身份证照片。
有时候&#xff0c;图像在获取、传输过程中不可避免地会产生噪声&#xff0c;这些噪声大大损坏了图像的质量&#xff0c;影响了图像的可用性&#xff0c;所以考虑要对图像进行去噪。而去噪的实质&#xff0c;是在去噪模型下用新的灰度估计值来取代原噪声点的灰度值&#xff0c;因此去噪问题也可以转化为插值问题来研究。
问题有待进一步的完善和补充&#xff01;&#xff01;
学习自&#xff1a;
实现opencv中常用的三种插值算法
图像插值算法及其实现
在图像处理中5种插值法算法的实现
图像插值算法概览及代码实现