| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 数字图像学笔记 —— 16. 图像退化与复原(自适应滤波之「最小均方差滤波」) -> 正文阅读 |
|
[人工智能]数字图像学笔记 —— 16. 图像退化与复原(自适应滤波之「最小均方差滤波」) |
图像恢复的一般运算过程我们从前几章的基本理论出发,退化信号恢复成原始信号的步骤,可以概括成两步基本公式。对于空间来说,有如下公式 { g ( x , y ) = h ( x , y ) ⊙ f ( x , y ) + η ( x , y ) f ^ ( x , y ) = ω ( x , y ) ? g ( x , y ) ? η ( x , y ) \left \{ \begin{matrix} g(x, y) = h(x, y) \odot f(x, y) + \eta(x, y) \\ \hat f(x, y) = \omega(x, y) * g(x, y) - \eta(x, y) \end{matrix} \right. {g(x,y)=h(x,y)⊙f(x,y)+η(x,y)f^?(x,y)=ω(x,y)?g(x,y)?η(x,y)? 退化的过程,是由退化函数 h ( x , y ) h(x, y) h(x,y) 与原图像 f ( x , y ) f(x, y) f(x,y) 通过卷积,然后加上噪声函数 η ( x , y ) \eta(x, y) η(x,y) 最终得到退化图像 g ( x , y ) g(x, y) g(x,y);而恢复方法则是通过评估或建模恢复函数 ω ( x , y ) \omega (x, y) ω(x,y) ,与退化后的图像 g ( x , y ) g(x, y) g(x,y) 做运算后得到。 由于针对不同退化效果的还原运算方式的不同,这决定了 ω ( x , y ) \omega(x, y) ω(x,y) 不一定是 h ( x , y ) h(x, y) h(x,y) 的反运算,而且很难有通用的技巧可言。相比之下,图像恢复过程在频域上则简单许多,它的还原过程被表述如下: { G ( u , v ) = H ( u , v ) ? F ( u , v ) + D ( u , v ) F ^ ( u , v ) = G ( u , v ) ? H ( u , v ) ? 1 ? D ( u , v ) \left \{ \begin{matrix} G(u, v) = H(u, v) * F(u, v) + D(u, v) \\ \hat F(u, v) = G(u, v) * H(u, v)^{-1} - D(u, v) \end{matrix} \right. {G(u,v)=H(u,v)?F(u,v)+D(u,v)F^(u,v)=G(u,v)?H(u,v)?1?D(u,v)? 希腊字母 Eta 的大写是 H \Eta H,为了跟已有的 H 做区别,这里改成了 D。可以看到,在频域下,只要得到退化函数的反函数,就可以直接得到还原图像 F ^ \hat F F^。另外稍微说一下,无论对于空间还是频域来说,评估图像的噪音函数并不困难,所以以上过程又经常被人省略了噪音的影响。 事实上,在做图像退化与恢复的研究时,经常会省略噪音函数的影响。 在上一章 《数字图像学笔记——15. 图像退化与复原(使用逆滤波复原图像)》 通过逆滤波函数已经演示了为什么在知道 H ( u , v ) H(u, v) H(u,v) 的情况下,可以直接还原出图像 F ^ ( u , v ) \hat F(u, v) F^(u,v)。 现在我们需要来考虑一个更一般的问题,如果我们不知道导致图像退化的函数 H ( u , v ) H(u, v) H(u,v) ,我们又应该如何还原图像呢。在这样一个假设前提下,有人提出了一类被称为的自适应的滤波方法,而「最小均方差滤波」就是诸多自适应滤波的其中一种。 什么是「最小均方差滤波」最小均方滤波器(Least Mean Square Filter,或LMS Filter)是一类可通过最小化误差信号(error signal)的均方值(mean square)而修正滤波器系数,以模拟所需理想滤波器的自适应滤波器1。 在冈萨雷斯版《数字图像处理》关于这一节中,老爷子并没有给出详细的证明或者推导过程,这对于第一次接触这个概念的朋友显然造成了困扰,而且这个问题显然在他最新版的著作里也没有得到修复。 所以,作为这本书的学习笔记,我只好先从信号学的角度出发,解释什么是最小均方差滤波。
从信号学的角度看,「最小均方差」算法属于一种被称为「梯度下降」技术的应用扩展。
它的评价指标,就是用均方差评价恢复的信号 F ^ ( u , v ) \hat F(u, v) F^(u,v) 与原始信号 F ( u , v ) F(u, v) F(u,v) 的离散程度。目标是找到一个能接受,趋近于 0 的误差。 所以,一般均方差公式尽管写为 M S E = 1 n ∑ i = 1 K ( y i ? y ˉ ) 2 MSE = \frac{1}{n} \sum_{i=1}^{K} (y_i - \bar y)^2 MSE=n1?i=1∑K?(yi??yˉ?)2 由于对于评价指标来说 1 / n 1/n 1/n 其实没什么必要性,所以你在信号学或者这本《数字图像处理》里,看到的就是下面这个样子 E { e 2 ( n ) } = { F ^ ( n ) ? F ( n ) } 2 E\{ e^2(n) \} = \{\hat F(n) - F(n) \} ^2 E{e2(n)}={F^(n)?F(n)}2 和之前的内容稍微有点出入的是,我们这里需要考虑算法迭代 n n n。什么意思呢,在第一次运算后,我们的算法会给出一个 H ( u , v ) 1 ? 1 H(u, v)_1^{-1} H(u,v)1?1? ,我们于是可以得出 F ^ ( 1 ) \hat F(1) F^(1),它会与原始图像计算得到一个 E { e 2 ( 1 ) } E\{ e^2(1) \} E{e2(1)};然后这个步骤会重复几次,最终得到一个 E { e 2 ( n ) } E\{ e^2(n) \} E{e2(n)},而这时的误差应该最小,得到我们理想的结果。
Start
初始化参数
生成H*
生成F*
MSE
输出误差E
更新参数
Stop
听起来很简单,实现起来也不复杂,我们接下来看看算法的实现细节。 实现步骤LMS 滤波器背后的基本思想是通过以收敛到最佳滤波器的方式更新滤波器权重 R ? 1 P R^{-1} P R?1P ,采取渐进地逼近策略,也就是梯度下降算法的根本思想。 对于我们来说 F ^ ( u , v ) = G ( u , v ) ? H ( u , v ) ? 1 ? D ( u , v ) \hat F(u, v) = G(u, v) * H(u, v)^{-1} - D(u, v) F^(u,v)=G(u,v)?H(u,v)?1?D(u,v) 其实可以看作矩阵的线性计算, H ( u , v ) ? 1 H(u, v)^{-1} H(u,v)?1 可以看作权重 ω ( u , v ) \omega(u, v) ω(u,v),输入参数为 G ( u , v ) G(u, v) G(u,v),输出参数为 F ^ ( u , v ) \hat F(u, v) F^(u,v)。噪音 D ( u , v ) D(u, v) D(u,v) 可以当作偏移量 b b b,于是可以把运算过程表达为在矩阵中的基本线性计算 y ^ = ω x + b \hat y = \omega x + b y^?=ωx+b 然后我们引入权重更新公式 ω ^ = ω ? λ ? ( e 2 ) \hat \omega = \omega - \lambda \nabla (e^2) ω^=ω?λ?(e2)
由于梯度在计算过程中可能为负,也可能为正。也就是说,如果 MSE 梯度为正,则意味着将相同的权重用于进一步迭代,误差将继续正增加,这意味着我们需要减少权重。同样,如果梯度为负,我们需要增加权重。 为了方便计算,对于 e 2 e^2 e2 的求导运算,我们可以换成对梯度的差分计算。
然后,我们把以上信息组合后,就可以得到 「最小均方差滤波」的实现方法。
看起来有点复杂,但是基本逻辑很简单。 实现代码首先,我们要创建网络权重矩阵
然后创建一个用来计算均方差的函数,它主要帮助我们判断算法收敛情况。
然后一个通过导数更新参数的模块。为了方便理解,我们把导数部分以绝对值的形式表现出来,这样对于我们来说,接下来只需要关心在不同方向上,梯度的增减方向了。
然后一个前向运算
这里稍微注意一点,我们引入一个标准化模块,因为DFT转化后数值特别大,这会导致梯度爆炸,所以需要适度的压缩数据。压缩算法有很多种,比如指数或逆指数;但是对于我们来说我们更关心全局情况,而且没有数据特征上的偏好,所以传统的 normalization 方法比较符合我们的需要。
然后就是通过梯度下降把需要的网络权重算出来,这样可以得到我们需要的滤波器。
以上代码并非最优,其实可优化的地方很多,不过主要的业务逻辑就这么多,我们来看看最后的效果。 最后的结果
理论上来说,只要梯度持续下降,那么可以达到一个全局最优的情况,应该还可以得到几乎接近原图的效果。作为自适应滤波器,LMS 基本上也能应付绝大多数场景需要,除了那种数据信息被完全摧毁的。 当然,这种算法也有问题,想要它找出最合适的模型,需要花费挺久的时间,而且需要有标签数据进行比对。
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/27 4:20:06- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |