热门标签 | 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种插值法算法的实现
图像插值算法概览及代码实现


推荐阅读
  • 视觉Transformer综述
    本文综述了视觉Transformer在计算机视觉领域的应用,从原始Transformer出发,详细介绍了其在图像分类、目标检测和图像分割等任务中的最新进展。文章不仅涵盖了基础的Transformer架构,还深入探讨了各类增强版Transformer模型的设计思路和技术细节。 ... [详细]
  • 服务器虚拟化存储设计,完美规划储存与资源,部署高性能虚拟化桌面
    规划部署虚拟桌面环境前,必须先估算目前所使用实体桌面环境的工作负载与IOPS性能,并慎选储存设备。唯有谨慎估算贴近实际的IOPS性能,才能 ... [详细]
  • ArcBlock 发布 ABT 节点 1.0.31 版本更新
    2020年11月9日,ArcBlock 区块链基础平台发布了 ABT 节点开发平台的1.0.31版本更新,此次更新带来了多项功能增强与性能优化。 ... [详细]
  • 1、编写一个Java程序在屏幕上输出“你好!”。programmenameHelloworld.javapublicclassHelloworld{publicst ... [详细]
  • 使用Matlab创建动态GIF动画
    动态GIF图可以有效增强数据表达的直观性和吸引力。本文将详细介绍如何利用Matlab软件生成动态GIF图,涵盖基本代码实现与高级应用技巧。 ... [详细]
  • 本文介绍了如何利用OpenCV库进行图像的边缘检测,并通过Canny算法提取图像中的边缘。随后,文章详细说明了如何识别图像中的特定形状(如矩形),并应用四点变换技术对目标区域进行透视校正。 ... [详细]
  • 处理Android EditText中数字输入与parseInt方法
    本文探讨了如何在Android应用中从EditText组件安全地获取并解析用户输入的数字,特别是用于设置端口号的情况。通过示例代码和异常处理策略,展示了有效的方法来避免因非法输入导致的应用崩溃。 ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 本文详细介绍如何在SSM(Spring + Spring MVC + MyBatis)框架中实现分页功能。包括分页的基本概念、数据准备、前端分页栏的设计与实现、后端分页逻辑的编写以及最终的测试步骤。 ... [详细]
  • 编程解析:CF989C 花朵之雾 (构造算法)
    本文深入探讨了CF989C '花朵之雾'问题的构造算法,提供了详细的解题思路和代码实现。 ... [详细]
  • Hanks博士是一位著名的生物技术专家,他的儿子Hankson对数学有着浓厚的兴趣。最近,Hankson遇到了一个有趣的数学问题,涉及求解特定条件下的正整数x,而不使用传统的辗转相除法。 ... [详细]
  • 本文详细探讨了在Java中如何将图像对象转换为文件和字节数组(Byte[])的技术。虽然网络上存在大量相关资料,但实际操作时仍需注意细节。本文通过使用JMSL 4.0库中的图表对象作为示例,提供了一种实用的方法。 ... [详细]
  • 使用CSS实现鼠标悬停时图片或按钮的平滑放大效果
    通过CSS技术,当鼠标悬停在图片或按钮上时,可以实现元素平滑放大的视觉效果,并可自由调整动画的持续时间。本文将详细介绍如何利用CSS实现这一功能。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • Requests库的基本使用方法
    本文介绍了Python中Requests库的基础用法,包括如何安装、GET和POST请求的实现、如何处理Cookies和Headers,以及如何解析JSON响应。相比urllib库,Requests库提供了更为简洁高效的接口来处理HTTP请求。 ... [详细]
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社区 版权所有