【阅读笔记】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主页,欢迎访问

我的知乎主页,欢迎访问

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DeepSeek-R1:开源Top推理模型的实现细节、使用与复现

核心观点 ● 直接用强化学习就可以让模型获得显著的推理能力&#xff0c;说明并不一定需要SFT才行。 ● 强化学习并不一定需要复杂的奖励模型&#xff0c;使用简单的规则反而取得意想不到的效果。 ● 通过知识蒸馏让小模型一定程度上也有推理能力&#xff0c;甚至在某些场景下…

Unity游戏(Assault空对地打击)开发(1) 创建项目和选择插件

目录 前言 创建项目 插件导入 地形插件 前言 这是游戏开发第一篇&#xff0c;进行开发准备。 创作不易&#xff0c;欢迎支持。 我的编辑器布局是【Tall】&#xff0c;建议调整为该布局&#xff0c;如下。 创建项目 首先创建一个项目&#xff0c;过程略&#xff0c;名字请勿…

汽车网络信息安全-ISO/SAE 21434解析(中)

目录 第七章-分布式网络安全活动 1. 供应商能力评估 2. 报价 3. 网络安全职责界定 第八章-持续的网络安全活动 1. 网路安全监控 2. 网络安全事件评估 3. 漏洞分析 4. 漏洞管理 第九章-概念阶段 1. 对象定义 2. 网路安全目标 3. 网络安全概念 第十章 - 产品开发 第十…

K8S极简教程(4小时快速学会)

1. K8S 概览 1.1 K8S 是什么 K8S官网文档&#xff1a;https://kubernetes.io/zh/docs/home/ 1.2 K8S核心特性 服务发现与负载均衡&#xff1a;无需修改你的应用程序即可使用陌生的服务发现机制。存储编排&#xff1a;自动挂载所选存储系统&#xff0c;包括本地存储。Secret和…

C基础寒假练习(4)

输入带空格的字符串&#xff0c;求单词个数、 #include <stdio.h> // 计算字符串长度的函数 size_t my_strlen(const char *str) {size_t len 0;while (str[len] ! \0) {len;}return len; }int main() {char str[100];printf("请输入一个字符串: ");fgets(…

FaceFusion

文章目录 一、关于 FaceFusion预览 二、安装三、用法 一、关于 FaceFusion FaceFusion 是行业领先的人脸操作平台 github : https://github.com/facefusion/facefusion官方文档&#xff1a;https://docs.facefusion.io/Discord : https://discord.com/invite/facefusion-1141…

AI杂谈(一)

名词解释 LLM 大语言模型&#xff08;Large Language Model&#xff0c;LLM&#xff09;是一种基于深度学习的自然语言处理模型&#xff0c;旨在理解和生成自然语言文本。这类模型通常由数亿到数千亿个参数构成&#xff0c;能够处理复杂的语言任务&#xff0c;如文本生成、翻…

fps一些内容添加

1 增强输入要点记录 输入 &#xff1a;输入值的类型 布尔 1d&#xff0c;2d&#xff0c;3d 映射&#xff1a;就是确定按键输入键位&#xff0c;输入类型&#xff0c;和一些触发器&#xff08;按键方式&#xff09;修改器&#xff08;对输出值进行修改&#xff09; 基本的&am…

为什么应用程序是特定于操作系统的?[计算机原理]

你把WINDOWS程序复制到MAC上使用&#xff0c;会发现无法运行。你可能会说&#xff0c;MAC是arm处理器&#xff0c;而WINDWOS是X86 处理器。但是在2019年&#xff0c;那时候MAC电脑还全是Intel处理器&#xff0c;在同样的X86芯片上&#xff0c;运行MAC和WINDOWS 程序还是无法互相…

2025苹果CMS v10短剧模板源码

文件不到70kb&#xff0c;加载非常快 无配置&#xff0c;没有详情页&#xff0c;上传就可以直接使用 使用教程&#xff1a;上传到网站template目录并解压、进入网站后台选择模板 注意&#xff1a;默认调用ID为1的数据和扩展分类&#xff0c;建议新建站使用 源码下载&#xf…

​ONES 春节假期服务通知

ONES 春节假期服务通知 灵蛇贺岁&#xff0c;瑞气盈门。感谢大家一直以来对 ONES 的认可与支持&#xff0c;祝您春节快乐&#xff01; 「2025年1月28日 &#xff5e; 2025年2月4日」春节假期期间&#xff0c;我们的值班人员将为您提供如下服务 &#xff1a; 紧急问题 若有紧急问…

python:洛伦兹变换

洛伦兹变换&#xff08;Lorentz transformations&#xff09;是相对论中的一个重要概念&#xff0c;特别是在讨论时空的变换时非常重要。在四维时空的背景下&#xff0c;洛伦兹变换描述了在不同惯性参考系之间如何变换时间和空间坐标。在狭义相对论中&#xff0c;洛伦兹变换通常…

LangChain:使用表达式语言优化提示词链

在 LangChain 里&#xff0c;LCEL 即 LangChain Expression Language&#xff08;LangChain 表达式语言&#xff09;&#xff0c;本文为你详细介绍它的定义、作用、优势并举例说明&#xff0c;从简单示例到复杂组合示例&#xff0c;让你快速掌握LCEL表达式语言使用技巧。 定义 …

unity学习20:time相关基础 Time.time 和 Time.deltaTime

目录 1 unity里的几种基本时间 1.1 time 相关测试脚本 1.2 游戏开始到现在所用的时间 Time.time 1.3 时间缩放值 Time.timeScale 1.4 固定时间间隔 Time.fixedDeltaTime 1.5 两次响应时间之间的间隔&#xff1a;Time.deltaTime 1.6 对应测试代码 1.7 需要关注的2个基本…

世上本没有路,只有“场”et“Bravo”

楔子&#xff1a;电气本科“工程电磁场”电气研究生课程“高等电磁场分析”和“电磁兼容”自学”天线“、“通信原理”、“射频电路”、“微波理论”等课程 文章目录 前言零、学习历程一、Maxwells equations1.James Clerk Maxwell2.自由空间中传播的电磁波3.边界条件和有限时域…

electron typescript运行并设置eslint检测

目录 一、初始化package.json 二、安装依赖 三、项目结构 四、配置启动项 五、补充&#xff1a;ts转js别名问题 一、初始化package.json 我的&#xff1a;这里的"main"没太大影响&#xff0c;看后面的步骤。 {"name": "xloda-cloud-ui-pc"…

学习数据结构(3)顺序表

1.动态顺序表的实现 &#xff08;1&#xff09;初始化 &#xff08;2&#xff09;扩容 &#xff08;3&#xff09;头部插入 &#xff08;4&#xff09;尾部插入 &#xff08;5&#xff09;头部删除 &#xff08;这里注意要保证有效数据个数不为0&#xff09; &#xff08;6&a…

PydanticAI应用实战

PydanticAI 是一个 Python Agent 框架,旨在简化使用生成式 AI 构建生产级应用程序的过程。 它由 Pydantic 团队构建,该团队也开发了 Pydantic —— 一个在许多 Python LLM 生态系统中广泛使用的验证库。PydanticAI 的目标是为生成式 AI 应用开发带来类似 FastAPI 的体验,它基…

deepseek R1的确不错,特别是深度思考模式

deepseek R1的确不错&#xff0c;特别是深度思考模式&#xff0c;每次都能自我反省改进。比如我让 它写文案&#xff1a; 【赛博朋克版程序员新春密码——2025我们来破局】 亲爱的代码骑士们&#xff1a; 当CtrlS的肌肉记忆遇上抢票插件&#xff0c;当Spring Boot的…

macbook安装go语言

通过brew来安装go语言 使用brew命令时&#xff0c;一般都会通过brew search看看有哪些版本 brew search go执行后&#xff0c;返回了一堆内容&#xff0c;最下方展示 If you meant "go" specifically: It was migrated from homebrew/cask to homebrew/core. Cas…