zoukankan      html  css  js  c++  java
  • 图像维纳滤波实现(1)

    在图像复原应用中,在含有噪声的情况下进行简单的逆滤波会带来很大的失真,最常见的滤波方法就是维纳滤波。

    在频率域中做滤波的话,根据表达式:

    F(u,v)为滤波后清晰图像的傅里叶频谱图像,H(u,v)为模糊核频谱图像,G(u,v)为模糊图像频谱图像。

    理解该公式有一点要求,就是上述三个频谱图像矩阵的维度必须一致,其实也就是模糊核和模糊图像一致就可以。计算时,取相对应位置上的值出来进行计算既可以,假设维度为300*400,也就是说要进行120000次该公式的计算就可以求出清晰图像频谱图,且这120000次计算之间相互独立不干扰,这点是很重要的,120000次计算可以并行执行,为计算提速带来了极大方便。

    但是涉及具体计算时,我个人觉得存在一个问题,就是按照一般理解,模糊核比起图像来说是相对较小的,同时图像的傅里叶变换得到的频谱图像的大小是跟原始图像一样的,所以这里的H(u,v)和G(u,v)照理说是不同维数的,但是要能计算必须变成相同的维数。

    这里理论上我不知道该怎么办。但是翻看matlab中deconvwnr.m发现代码中使用了psf2otf函数,将我们的点扩散函数变成了光传播函数(optical transfer function,otf),这个函数可以将otf变为你指定的大小。在后面的计算中就用这个作为模糊核的频谱图进行计算。

    摘自百度百科的一句话:点扩展函数是一点光源经光学系统后所成的衍射斑分布的函数。它在空域表征光学系统的特性,传递函数在频域表征系统的特性。实际上两者有简单关系,即点扩展函数的傅里叶变换就是光学系统的传递函数。

    但这里就存在一个疑问,我用matlab对相同的一个psf做fft和psf2otf,第一个得到的是一个复数矩阵,第二个得到的是一个实数矩阵。

  • 相关阅读:
    C++虚继承内存布局
    编译OpenJDK记录
    Node.js + Express 调研
    软件工程开发工具
    Servlets & JSP & JavaBean 参考资料
    Eclipse AST 相关资料
    Git & github 最常用操作笔记
    Java入门学习资料整理
    从变量的类型转换看C语言的思维模式
    数学地图(1)
  • 原文地址:https://www.cnblogs.com/ideawu1001/p/2770548.html
Copyright © 2011-2022 走看看