热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

OpenCV014:图像插值

知识点图像插值:是基于模型框架下,从低分辨率图像生成高分辨率图像的过程,用以恢复图像中所丢失信息。图像插值的分类插值,分

知识点



图像插值:
是基于模型框架下,从低分辨率图像生成高分辨率图像的过程,用以恢复图像中所丢失信息。

图像插值的分类

插值,分为图像内插值和图像间插值。其主要应用是对图像进行放大以及旋转等操作。

  • 图像内插值:根据一幅较低分辨率图像再生出另一幅均具有较高分辨率的图像。

    图像内插值实际上是对单帧图像的图像重建过程,这就意味着生成原始图像中没有的数据。

  • 图像间插值:也叫图像的超分辨率重建,是指在一图像序列之间再生出若干幅新的图像,可应用于医学图像序列切片和视频序列之间的插值。


    在这里插入图片描述

线性插值:这类插值方法在图像插值过程中采用同一种插值内核,不用考虑待插像素点所处的位置,这种做法会使图像中的边缘变得模糊不清,达不到高清图像的视觉效果。
非线性插值:

图像插值方法有:


  • 最近邻插值(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;

  1. 在图像采集&#xff0c;传输和实现过程中&#xff0c;不同的显示设备有着不同的分辨率&#xff0c;需要对视频序列和图像进行分辨率转换。如&#xff1a;大屏幕显示图像和制作巨幅广告招贴画。
  2. 当用户需要专注于图像的某些细节时&#xff0c;对图像进行放缩变换&#xff0c;如&#xff1a;图像浏览软件中的放大镜功能。
  3. 在视频传输中&#xff0c;为了有效利用有限的宽带&#xff0c;可以传输低分辨率的视频流&#xff0c;然后在接收端使用插值算法转换成高分辨率视频流。
  4. 为提高图像的存储和传输效率&#xff0c;而进行图像的压缩和重构。如&#xff1a;计算机虚拟现实技术中的图像差值。
  5. 在图像恢复时&#xff0c;已经被损坏的图像或者有噪声污染的图像&#xff0c;可通过插值对图像进行重建和恢复&#xff0c;如&#xff1a;警方在侦破案件时所发现的存在污损的身份证照片。

  有时候&#xff0c;图像在获取、传输过程中不可避免地会产生噪声&#xff0c;这些噪声大大损坏了图像的质量&#xff0c;影响了图像的可用性&#xff0c;所以考虑要对图像进行去噪。而去噪的实质&#xff0c;是在去噪模型下用新的灰度估计值来取代原噪声点的灰度值&#xff0c;因此去噪问题也可以转化为插值问题来研究。

问题有待进一步的完善和补充&#xff01;&#xff01;
学习自&#xff1a;
实现opencv中常用的三种插值算法
图像插值算法及其实现
在图像处理中5种插值法算法的实现
图像插值算法概览及代码实现


推荐阅读
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 提升Python编程效率的十点建议
    本文介绍了提升Python编程效率的十点建议,包括不使用分号、选择合适的代码编辑器、遵循Python代码规范等。这些建议可以帮助开发者节省时间,提高编程效率。同时,还提供了相关参考链接供读者深入学习。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
author-avatar
秋日里的一抹阳光_797
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有