【阅读笔记】New Edge Diected Interpolation,NEDI算法,待续

一、概述

由Li等提出的新的边缘指导插值(New Edge—Di-ected Interpolation,NEDI)算法是一种具有良好边缘保持效果的新算法,它利用低分辨率图像与高分辨率图像的局部协方差问的几何对偶性来对高分辨率图像进行自适应插值。

2001年Xin Li和M.T. Orchard提出了一种针对自然图像的边缘定向插值算法(New edge-directed interpolation)。其基本思想是首先根据低分辨率图像估计局部协方差系数,然后根据低分辨率协方差和高分辨率协方差之间的几何对偶性,使用这些协方差估计来以更高分辨率调整内插。仿真结果表明,这种新插值算法大大提高了插值图像的质量。2006年Lei Zhang和Xiaolin Wu通过定向滤波和数据融合提出了一种新的边缘引导非线性插值技术。 对于要内插的像素,在两个正交方向上定义两个观察组,并且每个组产生像素值的估计。 通过线性最小均方误差估计(LMMSE)技术将这些方向的估计值融合为更稳健的估计值,并使用两个观测集的统计量。 他们还提出了基于LMMSE的插值算法的简化版本,以降低计算成本而不牺牲很多插值性能。

NEDI算法与传统线性插值算法相比避免了由于跨越边缘插值而引入的边缘细节退化现象,显著提高了图像的视觉质量,但是由于迭代过程可能出现的错误会导致放大图像边缘噪声仍然比较明显,而且算法具有较高的复杂度,不适合硬件实现和图像实时处理。

二、算法思想

NEDI算法的基本思想是先计算低分辨率图像各像素点的局部协方差系数,再利用低分辨率与高分辨率协方差间的几何对偶性,来计算高分辨率图像中需要插入的像素点的值。

三、算法原理

设放大倍率为2,低分辨率图像X的矩阵大小为H×W,相应的高分辨率图像Y矩阵大小为2H×2W,则 Y 2 i , 2 j = X i , j Y_{2i,2j}=X_{i,j} Y2i,2j=Xi,j

插值限制在4个方向,即该点在高分辨率栅格中,对角线方向最近的4个像素点,如下图所示,求黑点 Y 2 i + 1 , 2 j + 1 Y_{2i+1,2j+1} Y2i+1,2j+1则有:

Y ^ 2 i + 1 , 2 j + 1 = ∑ k = 0 1 ∑ l = 0 1 α 2 k + l Y 2 ( i + k ) , 2 ( j + l ) \hat Y_{2i+1,2j+1}= \sum_{k=0}^{1} \sum_{l=0}^{1} \alpha_{2k+l}Y_{2(i+k),2(j+l)} Y^2i+1,2j+1=k=01l=01α2k+lY2(i+k),2(j+l)

其中,放大倍数不同,k、l数值不同,步进数值为1/放大倍数。

因为 Y 2 i , 2 j = X i , j Y_{2i,2j}=X_{i,j} Y2i,2j=Xi,j,所以可以通过上公式插值出 Y 2 i + 1 , 2 j + 1 Y_{2i+1,2j+1} Y2i+1,2j+1

现在得到4个对角线的最近像素,假设四个邻像素为一个局部平稳的高斯过程 ,由经典 Wiener滤波理论可知,最优的 MMSE(Minimum MeansSquare Error)线性插值系数计算公式如下:

α = R − 1 r \alpha=R^{-1}r α=R1r

其中,r表示在高分辨率图像中的局部协方差

R = [ R k l ] ( 0 < = k , l < = 3 ) r = [ R k ] ( 0 < = k < = 3 ) R=[R_{kl}](0<=k,l<=3)\\ r=[R_{k}](0<=k<=3) R=[Rkl](0<=k,l<=3)r=[Rk](0<=k<=3)

高分辨率图像中的 R k l R_{kl} Rkl r k r_k rk和低分辨率的 R ^ k l \hat R_{kl} R^kl r ^ k \hat r_k r^k具有几何上的对偶性。即 R k l R_{kl} Rkl, R ^ k l \hat R_{kl} R^kl在不同的分辨率以相同的方向分别链接一对像素,可以用后者估计前者。

低分辨率上协方差系数可采用标准方法在一个局部模板(大小为 MXM)中计算得到:

R ^ = 1 M 2 C C T r ^ = 1 M 2 C y \hat R=\frac{1}{M^2}CC^T \\ \hat r=\frac{1}{M^2}Cy R^=M21CCTr^=M21Cy

其中, y = [ y 1 , . . . y M 2 ] y=[y_1,...y_{M^2}] y=[y1,...yM2]是一个包含MxM个点像素的数值向量,这些像素包含在一个局部模板内;数值矩阵C大小 4 M 2 4M^2 4M2,第k列向量为 y k y_k yk对角线方向的最近邻4点像素值,得到

α = ( C C T ) − 1 ( C y ) \alpha=(CC^T)^{-1}(Cy) α=(CCT)1(Cy)

于是,计算每一个坐标(2i+1)(2j+1)的像素 Y 2 i + 1 , 2 j + 1 Y_{2i+1,2j+1} Y2i+1,2j+1的最优插值权重 α \alpha α

于是 Y i , j ( m o d ( i + j , 2 ) = 0 ) Y_{i,j}(mod(i+j,2)=0) Yi,j(mod(i+j,2)=0)的估算公式如下:

Y ^ 2 i + 1 , 2 j + 1 = α 0 Y 2 i , 2 j + α 1 Y 2 i + 1 , 2 j + α 2 Y 2 i + 2 , 2 j + 2 + α 3 Y 2 i , 2 j + 2 \hat Y_{2i+1,2j+1}= \alpha_{0}Y_{2i,2j}+\alpha_{1}Y_{2i+1,2j}+\alpha_{2}Y_{2i+2,2j+2}+\alpha_{3}Y_{2i,2j+2} Y^2i+1,2j+1=α0Y2i,2j+α1Y2i+1,2j+α2Y2i+2,2j+2+α3Y2i,2j+2

于是 Y i , j ( m o d ( i + j , 2 ) = 1 ) Y_{i,j}(mod(i+j,2)=1) Yi,j(mod(i+j,2)=1)可以用 Y i , j ( m o d ( i + j , 2 ) = 1 ) Y_{i,j}(mod(i+j,2)=1) Yi,j(mod(i+j,2)=1)估计,公式如下:

Y ^ 2 i + 1 , 2 j = α 0 Y 2 i , 2 j + α 1 Y 2 i + 1 , 2 j − 1 + α 2 Y 2 i + 2 , 2 j + 2 + α 3 Y 2 i , 2 j + 2 \hat Y_{2i+1,2j}= \alpha_{0}Y_{2i,2j}+\alpha_{1}Y_{2i+1,2j-1}+\alpha_{2}Y_{2i+2,2j+2}+\alpha_{3}Y_{2i,2j+2} Y^2i+1,2j=α0Y2i,2j+α1Y2i+1,2j1+α2Y2i+2,2j+2+α3Y2i,2j+2

上述的 Y i , j ( m o d ( i + j , 2 ) = 1 ) Y_{i,j}(mod(i+j,2)=1) Yi,j(mod(i+j,2)=1) Y i , j ( m o d ( i + j , 2 ) = 0 ) Y_{i,j}(mod(i+j,2)=0) Yi,j(mod(i+j,2)=0)计算相似,二者只相

差一个伸缩系数 2 1 / 2 2^{1/2} 21/2和旋转系数 π / 4 \pi/4 π/4,所以只需少量改动就可以。

以上是算法原理推导,大概理解一下就行,主要看算法步骤。

四、算法步骤

使用经典NEDI算法将图像放大两倍需要两个步骤:

第l步:插出原始四个像素的中心点(2i+1.2j+1),如下图所示。

第2步:原始像素和第一步的插值像素的基础上,再插出水平(和垂直方向上的像素(2i+1,2j)、(2i,2j+1)、(2i+1,2j+2)、(2i+2,2j+1),如下图所示。

而当图像被放大4倍时,还要重复同样的过程,由于这一次所使用的像素数日是之前所需的4倍,所以计算量将成指数增长。另外,由于引入迭代运算,如果某一个环节中产生了误差,这个误差将会传递到下一次插值,从而导致图像的插值错误。

优点:

根据统计信息进行插值,细节保持较好

缺点:

算法复杂,计算量大,运算速度较慢


觉得本文对您有一点帮助,欢迎讨论、点赞、收藏,您的支持激励我多多创作。

我的个人博客主页,欢迎访问

我的CSDN主页,欢迎访问

我的GitHub主页,欢迎访问

我的知乎主页,欢迎访问

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/964130.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++ Primer 迭代器

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…

DeepSeek R1 简易指南:架构、本地部署和硬件要求

DeepSeek 团队近期发布的DeepSeek-R1技术论文展示了其在增强大语言模型推理能力方面的创新实践。该研究突破性地采用强化学习&#xff08;Reinforcement Learning&#xff09;作为核心训练范式&#xff0c;在不依赖大规模监督微调的前提下显著提升了模型的复杂问题求解能力。 技…

直方图:摄影中的视觉数据指南

目录 一、直方图基础&#xff1a;揭开它的神秘面纱 二、解读直方图类型&#xff1a;亮度与色彩的密码 &#xff08;一&#xff09;亮度直方图 &#xff08;二&#xff09;RGB 直方图 三、拍摄中巧用直方图&#xff1a;优化曝光与效果 &#xff08;一&#xff09;精准判断曝…

力扣动态规划-19【算法学习day.113】

前言 ###我做这类文章一个重要的目的还是记录自己的学习过程&#xff0c;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关键点&#xff0c;力扣上的大佬们的题解质量是非常非常高滴&#xff01;&#xff01;&#xff01; 习题 1.矩形中移动的最大次数 题目链接…

树莓派pico入坑笔记,睡眠

关于树莓派pico和circuitpython的更多玩法&#xff0c;请看树莓派pico专栏 关于在 CircuitPython 中使用警报和浅/深度睡眠的更多信息&#xff0c;请参阅此学习指南。 树莓派pico支持浅睡眠和深度睡眠&#xff0c;其中深度睡眠唤醒后将从boot.py开始运行 支持按时间唤醒和引…

【蓝桥杯】日志统计

日志统计&#xff08;编程题&#xff09;https://dashoj.com/d/lqbproblem/p/53https://dashoj.com/d/lqbproblem/p/53https://dashoj.com/d/lqbproblem/p/53 题目 日志统计(编程题) 讲解 这个讲解感觉比较通俗易懂。 蓝桥杯2018年省赛B组08&#xff08;c/c&#xff09;日…

实验十一 Servlet(二)

实验十一 Servlet(二) 【实验目的】 1&#xff0e;了解Servlet运行原理 2&#xff0e;掌握Servlet实现方式 【实验内容】 改造实验10&#xff0c;引入数据库&#xff0c;创建用户表&#xff0c;包括用户名和密码&#xff1a;客户端通过login.jsp发出登录请求&#xff0c;请求…

Weevely代码分析

亲测php5和php8都无效&#xff0c;只有php7有效 ailx10 1949 次咨询 4.9 网络安全优秀回答者 互联网行业 安全攻防员 去咨询 上一次做weevely实验可以追溯到2020年&#xff0c;当时还是weevely3.7&#xff0c;现在的是weevely4 生成php网页木马依然差不多…… php菜刀we…

vue.js学习笔记

一、Vue概述 通过我们学习的htmlcssjs已经能够开发美观的页面了&#xff0c;但是开发的效率还有待提高&#xff0c;那么如何提高呢&#xff1f;我们先来分析下页面的组成。一个完整的html页面包括了视图和数据&#xff0c;数据是通过请求 从后台获取的&#xff0c;那么意味着我…

MySQL(高级特性篇) 13 章——事务基础知识

一、数据库事务概述 事务是数据库区别于文件系统的重要特性之一 &#xff08;1&#xff09;存储引擎支持情况 SHOW ENGINES命令来查看当前MySQL支持的存储引擎都有哪些&#xff0c;以及这些存储引擎是否支持事务能看出在MySQL中&#xff0c;只有InnoDB是支持事务的 &#x…

【C++】继承(下)

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家了解C的继承&#xff08;下&#xff09;&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 5.继承与友元6.继承与静态成员7.复杂的菱形继承及菱形虚拟继承8.继…

大数据治理体系构建与关键技术实践

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 1. 引言 随着信息技术的快速发展和数据规模的爆炸式增长&#xff0c;大数据已经成为各行业的核心资产。然而&#xff0c;数据质量…

数据分析系列--[11] RapidMiner,K-Means聚类分析(含数据集)

一、数据集 二、导入数据 三、K-Means聚类 数据说明:提供一组数据,含体重、胆固醇、性别。 分析目标:找到这组数据中需要治疗的群体供后续使用。 一、数据集 点击下载数据集 二、导入数据 三、K-Means聚类 Ending, congratulations, youre done.

SpringBoot整合Mybatis|入门级增删改查|2025

SpringBoot整合Mybatis 文章目录 SpringBoot整合Mybatis1. 新建User表2. 初始化项目2.1 新建项目2.2 配置数据库连接2.3 完善项目的架子 3. 正式开始3.1 新增用户3.2 根据邮箱查询3.4 改密码 和 删除用户3.5 用xml再写一遍 4. 进阶 1. 新建User表 CREATE DATABASE mybatis_dem…

【线程】基于环形队列的生产者消费者模型

1 环形队列 环形队列采用数组来模拟&#xff0c;用取模运算来模拟环状特性。 1.如何判断环形队列为空或者为满? 当环形队列为空时&#xff0c;头和尾都指向同一个位置。当环形队列为满时&#xff0c;头和尾也都指向同一个位置。 因此&#xff0c; 可以通过加计数器或者标记…

docker中运行的MySQL怎么修改密码

1&#xff0c;进入MySQL容器 docker exec -it 容器名 bash 我运行了 docker ps命令查看。正在运行的容器名称。可以看到MySQL的我起名为db docker exec -it db bash 这样就成功的进入到容器中了。 2&#xff0c;登录MySQL中 mysql -u 用户名 -p 回车 密码 mysql -u root -p roo…

SRS代码目录

代码目录&#xff1a; src/目录下核心代码&#xff1a; core&#xff1a;核心功能模块&#xff0c;包括日志、配置、错误处理等&#xff1b;protocol&#xff1a;实现RTMP、HTTP-FLV、HLS等协议的模块&#xff1b;app&#xff1a;应用层的实现&#xff0c;包括流的发布、播放…

Leetcode:680

1&#xff0c;题目 2&#xff0c;思路 首先就是判断它不发生改变会不会是回文如果不是回文&#xff0c;那么俩个指针从前往后与从后往前做对比如果俩字符不同&#xff0c;那就俩种选择&#xff0c;一种是保留前面的字符去掉后面字符&#xff0c;另一种是其反然后俩种选择只要满…

SliverAppBar的功能和用法

文章目录 1 概念介绍2 使用方法3 示例代码 我们在上一章回中介绍了SliverGrid组件相关的内容&#xff0c;本章回中将介绍SliverAppBar组件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1 概念介绍 我们在本章回中介绍的SliverAppBar和普通的AppBar类似&#xff0c;它们的…

【前端】ES6模块化

文章目录 1. 模块化概述1.1 什么是模块化?1.2 为什么需要模块化? 2. 有哪些模块化规范3. CommonJs3.1 导出数据3.2 导入数据3.3 扩展理解3.4 在浏览器端运行 4.ES6模块化4.1 浏览器运行4.2 在node服务端运行4.3 导出4.3.1 分别导出4.3.2 统一导出4.3.3 默认导出4.3.4 混用 4.…