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

【阅读笔记】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.kler.cn/a/522910.html

相关文章:

  • 代码随想录算法训练营第三十八天-动态规划-完全背包-279.完全平方数
  • 神经网络|(五)概率论基础知识-条件概率
  • MV结构下设置Qt表格的代理
  • 抖音上线打车服务?抖音要大规模杀入网约车了吗?
  • 【Healpix】python一种用于将球面划分为均匀区域的技术
  • 云计算技术深度解析与代码使用案例
  • 跨域问题解释及前后端解决方案(SpringBoot)
  • 接口技术-第2次作业
  • Gradle配置指南:深入解析settings.gradle.kts(Kotlin DSL版)
  • AAAI2024论文合集解读|Multi-dimensional Fair Federated Learning-water-merged
  • IBMSamllPower服务器监控指标解读
  • 【数据库初阶】表的查询语句和聚合函数
  • leetcode 2920. 收集所有金币可获得的最大积分
  • 10 款《医学数据库和期刊》查阅网站
  • Lesson 119 A true story
  • 蓝桥杯模拟算法:多项式输出
  • 【Prometheus】Prometheus如何监控Haproxy
  • 菜鸟之路Day09一一集合进阶(二)
  • 【公因数匹配——暴力、(质)因数分解、哈希】
  • Github 2025-01-27 开源项目周报 Top15
  • 第 4 章:游戏逻辑与状态管理
  • 【微服务与分布式实践】探索 Sentinel
  • 使用 postman 测试思源笔记接口
  • Excel中LOOKUP函数的使用
  • 重回C语言之老兵重装上阵(十五)C语言错误处理
  • v3s传memory