当前位置: 首页 > news >正文

java 双线性插值算法_双线性插值

图像插值

目前,终端显示器都由点阵的像素点构成,在表现非水平或者竖直的直线时,必然会出现直线的歪曲,即锯齿效应。位图经过缩放、旋转等变换,都会使锯齿效应增强。尤其当显示分辨率过低时,在表现非水平或竖直的直线以及明显边缘时,离散的像素点间灰度值缺少过渡,会有很明显的锯齿。对于这种情况,我们需要对图像边缘进行柔化处理,使图像边缘看起来更平滑,更接近现实。

同样的,依空间坐标变换方法,计算得到的对应点坐标通常不是整数,如果简单地使用取整或者最邻近插值的方法得到目标图像,目标图像会有比较明显的锯齿效应。对于这个问题,在处理过程中通常是采用双线性插值或双三次插值。在均衡算法速度与图像质量的情况下,更倾向于使用双三次插值方法来完成图像处理中的灰度级插值。

最近邻插值

最近邻插值算法又称零阶插值,它是一种比较容易实现且算法复杂度较低的插值算法,其原理是取待插值点周围4个相邻像素点中欧式距离最短的一个邻点的灰度值作为该点的灰度值。由于仅用对该插值点影响最大的(即最近的)像素的灰度值作为该点的值,没有考虑其他相邻像素的影响,因此插值后得到的图像容易产生块效应,造成图像模糊,放大效果一般不够理想。

双线性插值

双线性插值是有两个变量的插值函数的线性插值扩展,其核心思想是在两个方向分别进行一次线性插值。其原理是待插点像素值取原图像中与其相邻的4个点像素值的水平、垂直两个方向上的线性内插,即根据待采样点与周围4个邻点的距离确定相应的权重,从而计算出待采样点的像素值。

7e1d50c786fbc6acdba7f20c6f120b59.png

根本上来说,双线性插值算法是一种加权算法,如图所示。它以到最近四个像素点的距离为参考权值,经两次线性插值,综合得到当前点的灰度值。

计算公式如下:

28a9905afe86314eaa5c6d40e42eca9b.png

从公式中我们可以看出,目标点的灰度值由周围四个像素点依权值取平均得到,有低通滤波的效果,故而能够起到抗锯齿的效果。

但此种插值方法中没有考虑相邻点间灰度值变化率的影响,因此具有低通滤波器的性质,会使放大后图像的重要细节受到损失,图像变得模糊不清。

------------------------------------------------------------------------------------------------------------------

双线性插值公式:

5eaef98bc2a1b4707204412c596defc0.png

c53f677ad5bcea3ba172ba56d8214d2b.png

矩阵表示:

dd4b1ec0476acb527d455d11296b59fe.png

与这种插值方法名称不同的是,这种插值方法的结果通常不是线性的,它的形式是:

aa68acc0a2888fcb6bb65d1e52a890ce.png

3ec62232f3afe77a183db36c84ed0d59.png

插值的结果与插值的顺序无关。首先进行 y 方向的插值,然后进行 x 方向的插值,所得到的结果是一样的。

【转载自】

【参考文献】

【其他】

【文件】

相关文章:

  • 查看当前linux系统位数
  • java 获取存储过程异常_oracle存储过程获取异常信息码和异常信息
  • java char utf 16_为什么Java char使用UTF-16?
  • ls用法大全
  • mv移动文件夹
  • js java map_JS实现 java的Map
  • find 与mv连用 移动文件
  • centos7子系统 win10_win10系统下下载安装Linux子系统
  • ChIP-seq分析流程(基于linux系统)
  • java一般项目提成多少_java编程题目,企业发放的奖金根据利润提成
  • 使用ChIPseeker进行peak注释
  • java 日期 几天后_java 日期计算(几天前后)
  • ChIPseeker入门到精通
  • java多线程7 死锁_Java多线程7:死锁
  • chipseeker Y叔
  • ----------
  • ➹使用webpack配置多页面应用(MPA)
  • Django 博客开发教程 8 - 博客文章详情页
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • mysql_config not found
  • 初识MongoDB分片
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 简单数学运算程序(不定期更新)
  • 免费小说阅读小程序
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 数据可视化之 Sankey 桑基图的实现
  • 思否第一天
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 做一名精致的JavaScripter 01:JavaScript简介
  • # Maven错误Error executing Maven
  • $.ajax()
  • (16)Reactor的测试——响应式Spring的道法术器
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (三)elasticsearch 源码之启动流程分析
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (五)网络优化与超参数选择--九五小庞
  • (转)iOS字体
  • **CI中自动类加载的用法总结
  • .net 微服务 服务保护 自动重试 Polly
  • .net流程开发平台的一些难点(1)
  • .NET业务框架的构建
  • .Net中间语言BeforeFieldInit
  • ??如何把JavaScript脚本中的参数传到java代码段中
  • @data注解_一枚 架构师 也不会用的Lombok注解,相见恨晚
  • @vue/cli脚手架
  • [ vulhub漏洞复现篇 ] Hadoop-yarn-RPC 未授权访问漏洞复现
  • [100天算法】-目标和(day 79)
  • [20161214]如何确定dbid.txt
  • [AIGC] Java 和 Kotlin 的区别
  • [android] 请求码和结果码的作用
  • [hadoop读书笔记] 第十五章 sqoop1.4.6小实验 - 将mysq数据导入HBASE
  • [HJ56 完全数计算]