勇哥注:
图片过滤器是一切缺陷检测、边缘提取、图片分割前处理、分类器应用等等的基础。有很重要的研究意义。
因此勇哥会写成一个系列贴子以和大家一起分享。
-正文---------------------------------------------------------------------
维纳滤波器(Wiener filter)是由数学家维纳(Norbert Wiener) 提出的一种以最小平方为最优准则的线性滤波器。 在一定的约束条件下,其输出与一给定函数(通常称为期望输出)的差的平方达到最小, 通过数学运算最终可变为一个托布利兹方程的求解问题。 维纳滤波器又被称为最小二乘滤波器或最小平方滤波器,目前是基本的滤波方法之一。 维纳滤波是利用平稳随机过程的相关特性和频谱特性对混有噪声的信号进行滤波的方法, 1942年美国科学家N.维纳为解决对空射击的控制问题所建立, 是40年代在线性滤波理论方面所取得的最重要的成果。
维纳滤波也称最小均方误差滤波,它能处理被退化函数退化和噪声污染的图像。该滤波方法建立在图像和噪声都是随机变量的基础之上。
这里对256×256大小的灰度图像进行退化处理,然后添加均值为0,方差为0.005的高斯噪声,对得到的退化图像使用直接逆滤波和维纳滤波复原,并比较效果。
这个例子的matlab原码与维纳滤波的公式见:https://blog.csdn.net/yi_tech_blog/article/details/53958082?utm_medium=distribute.pc_relevant.none-task-blog-baidulandingword-2&spm=1001.2101.3001.4242
来看看halcon的帮助说明:
算子原型:
wiener_filter(Image, Psf, FilteredImage : RestoredImage : : )
维纳滤波器通过最小化估计值和原始图像之间的均方误差来产生对原始图像(=无噪声和模糊的图像)的估计值。 维纳滤波器可用于恢复被噪声和/或模糊(例如运动模糊、大气湍流或离焦模糊)损坏的图像。 这种恢复技术的方法和实现基于以下模型: 将损坏的图像解释为(受干扰)线性系统的输出。线性系统的功能取决于其特定的脉冲响应。 因此,原始图像与脉冲响应的卷积会导致图像的损坏。比冲激响应描述了图像采集和发生的退化。 在存在附加噪声的情况下,必须考虑附加噪声项。 因此,可以将损坏的图像建模为 [卷积(脉冲响应,原始图像)]+噪声项 噪声项包含描述图像相关和图像无关噪声的两个不同项。根据该模型,维纳滤波恢复必须知道两个条件: 1. 退化比冲激响应 2. 噪声项 因此维纳滤波器需要对输入图像进行平滑处理,以估计噪声和原始图像的功率谱密度。 您可以使用一个平滑的HALCON过滤器(例如,消除最小最大值)来获得这个版本。 维纳滤波器需要进一步的脉冲响应来描述具体的退化。 这种脉冲响应(在空间域中表示)必须符合HALCON图像类型“real”的图像。 对于运动模糊和离焦产生脉冲响应,存在两个HALCON算子(参见gen_psf_motion,gen_psf_散焦)。 脉冲响应的表示假定原点在左上角。 维纳滤波器的工作原理如下: 利用受损图像的平滑版本估计原始图像的功率谱密度, 通过从非平滑版本减去平滑版本来估计每个像素的功率谱密度, 利用噪声和原始图像功率谱密度的商和脉冲响应建立维纳滤波核, 图像的卷积处理和维纳滤波器的频率响应。 结果图像的图像类型为“real”。
例子1:噪声图
实验如下,富含噪声的图像如下:
convert_image_type(Image, ImageConverted, 'real') get_image_size(ImageConverted, Width1, Height1) mean_image(ImageConverted, ImageMean1, 5, 5) gen_psf_motion(Psf, Width1, Height1, 5, 0, 3) wiener_filter(ImageConverted, Psf, ImageMean1, RestoredImage)
例子2:划痕
这个例子不恰当,仅说明算子的用法。
convert_image_type(Image, ImageConverted, 'real') get_image_size(ImageConverted, Width1, Height1) mean_image(ImageConverted, ImageMean1, 5, 5) gen_psf_motion(Psf, Width1, Height1, 2, 0, 3) wiener_filter(ImageConverted, Psf, ImageMean1, RestoredImage) convert_image_type(RestoredImage, ImageConverted1, 'byte') dyn_threshold (Image, ImageConverted1, DarkPixels1,8, 'dark')
原图:
wiener_filter(ImageConverted, Psf, ImageMean1, RestoredImage) 的效果:
dyn_threshold提取的效果:
维纳滤波器的相关算子如下:
gen_psf_defocus 功能:产生一个均匀散焦模糊的脉冲相应。 gen_psf_motion 功能:产生一个(线性)运动模糊的脉冲相应。 simulate_defocus 功能:对一个图像的均匀散焦模糊进行仿真。 simulate_motion 功能:(线性)运动模糊的仿真。 wiener_filter 功能:通过Wiener滤波进行图像恢复。 wiener_filter_ni 功能:通过Wiener滤波进行图像恢复。
未完待续……
---------------------
作者:hackpig
来源:www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!

