维纳滤波器(Wiener Filter)在图像处理中的应用(一)
维纳滤波器是一种自适应的滤波器,在数字信号处理中有着广泛的应用。ispforfun会在从今天开始定期给大家带来维纳滤波器在图像处理中应用。本节讲诉维纳滤波器在图像去噪中的简单应用。
让我们从Matlab中的函数wiener2开始。Matlab的help中对wiener2的说明如下:
wiener2估计图像中每个像素的局部均值和局部方差,
其中,是图像A中每个像素的NXM邻域。维纳滤波器的去噪原理如下:
其中是噪声的方差,如果没有给出来,那么会根据图像的局部方差进行估计。
ispforfun根据这段原理,编写了如下的matlab代码,共享给大家。
function J = wiener_image_denoising_filter(I, Win, noise_var)
% J = wiener_image_denoising_filter(I, w)
% -----------------------------------------
% by: ispforfun
% I is the input image. Single channel image.
% Win is the window size for filtering.[img_height, img_width] = size(I);
half_win_size = floor(Win/2.0);[X, Y] = meshgrid(1:img_width, 1:img_height);
[dX, dY] = meshgrid(-half_win_size(2):half_win_size(2), -half_win_size(1):half_win_size(1));dX = reshape(dX, [1 1 Win(1) Win(2)]);
dY = reshape(dY, [1 1 Win(1) Win(2)]);
X = repmat(X, [1 1 Win(1) Win(2)]) + repmat(dX, [img_height img_width 1 1]);
Y = repmat(Y, [1 1 Win(1) Win(2)]) + repmat(dY, [img_height img_width 1 1]);X(X<1) = 2 - X(X<1);
X(X>img_width) = 2*img_width - X(X>img_width);
Y(Y<1) = 2 - Y(Y<1);
Y(Y>img_height) = 2*img_height - Y(Y>img_height);patch = @(f)f(Y + (X-1)*img_height);P = patch(I);img_mean = local_image_mean(P);
img_var = local_image_var(P, img_mean, Win);if nargin < 3estimated_noise_var = sum(sum(img_var))/(img_height * img_width);
elseestimated_noise_var = noise_var;
endgain = (estimated_noise_var == 0.0).*zeros(img_height, img_width) + ...(estimated_noise_var ~= 0.0).*((img_var - estimated_noise_var)./img_var);J = img_mean + gain.*(double(I) - img_mean);J = min(max(J, 0), 255);J = uint8(J);%gain = (img_var - estimated_noise_var)./img_var;function img_mean = local_image_mean(P)
% img_mean = local_image_mean(P)local_img_sum = sum(sum(double(P), 4), 3);
sum_size = size(P,3)*size(P,4);img_mean = local_img_sum/sum_size;function img_var = local_image_var(P, img_mean, Win)
% img_var = local_img_var(P, img_mean)diff_img_patch = double(P) - repmat(img_mean, [1 1 Win(1) Win(2)]);
diff_img_patch_pow2 = diff_img_patch.^2;
local_diff_img_sum = sum(sum(double(diff_img_patch_pow2), 4), 3);
img_var = local_diff_img_sum/(Win(1)*Win(2) - 1);
实验如下,富含噪声的图像如下:
去噪后的图像如下:
维纳滤波器(Wiener Filter)在图像处理中的应用(一)相关推荐
- 数字图像处理实验(13):PROJECT 05-04,Parametric Wiener Filter
实验要求: Objective: To understand the high performance of the parametric Wiener Filter in image restora ...
- 数字图像处理Python语言实现-图像滤波-维纳滤波(Wiener Filter)
维纳滤波(Wiener Filter) 1.前言 维纳滤波器(Wiener Filter)是最早用于图像复原经典滤波之一,目前被广泛用于信号滤波降噪和图像预处理中.维纳滤波器的目的是使用相关信号作为输 ...
- Wiener Filter
假设分别有两个WSS process:$x[n]$,$y[n]$,这两个process之间存在某种关系,并且我们也了解这种关系.现在我们手头上有process $x[n]$,目的是要设计一个LTI系统 ...
- 维纳滤波原理(Wiener Filter)
维纳滤波原理(Wiener Filter) - 知乎 自适应滤波:维纳滤波器--FIR及IIR设计 - 桂. - 博客园
- 中blur函数_Comonad在图像处理中的应用
前几天我回答了一个关于comonad的问题Monad和Comonad到底是什么东西?.其中有讲到comonad的应用例子,但都还不够直观和实用.后来找到一个Comonad在图像处理中的应用的例子,觉得 ...
- 卷积在图像处理中的应用
卷积运算 1.卷积定义 我们称 ( f*g )(n) 为 f,g 的卷积. ● 其连续的定义为: ● 其离散的定义为: 这两个式子有一个共同的特征: 如果遍历这些直线,就好比,把毛巾沿着角卷起来. 观 ...
- 傅里叶变换在图像处理中的应用初步学习
1 理解傅里叶变换在图像处理中的应用 一维傅里叶变换的作用对象是信号,信号是一维连续的:随着时间不断推移,信号强度的变换情况,可称为时域. 图像处理中的傅里叶变换的作用对象是二维矩阵.随着位置的不断改 ...
- 傅里叶变换在图像处理中的作用
傅立叶变换在图像处理中非常的有用.因为不仅傅立叶分析涉及图像处理的很多方面,傅立叶的改进算法, 比如离散余弦变换,gabor与小波在图像处理中也有重要的分量. 印象中,傅立叶变换在图像处理以下几个话题 ...
- 5、VTK在图像处理中的应用
5.VTK在图像处理中的应用 图像是VTK中一个非常重要的数据.数字图像广泛应用于工业生产.生物医学.媒体娱乐.地质.气象等重要领域,数字图像处理具有重要的应用价值.我们在掌握了VTK的基本知识后,这 ...
最新文章
- 后退键无效 html,javascript – Cordova – window.history.back()不支持iOS 9中的HTML后退按钮...
- jfinal js 拦截_jfinal 使用拦截器处理繁琐的前置条件判定
- 配置MySQL8.0 环境变量
- 这是一份面向Android开发者的复习指南,成功入职字节跳动
- java开发中jdbc连接数据 库的操作代码
- mysql+安全性语言实验,实验四--数据库的安全性、完整性控制
- 接口与继承:不允许继承的类
- 异常检测算法:孤立森林(Isolation Forest)
- 在c语言三种编译预处理功能,C语言三种预处理功能
- 开宗明义—UEFI介绍 (二)
- axis调用webservice
- 几种常见的距离计算公式
- python表示倍数的英语句型_英语倍数表达法
- 【kubernetes/k8s概念】CNI详解
- 盛德奇嘉提醒冬季对爱车养护全攻略:保养洗车均要注意
- 如何选择云主机或者VPS挂EA?
- wps打印缩放到一页_WPS文档过长时,如何在A4纸上完美打印
- Android短信数据库简析
- 5款类蝉妈妈抖音数据工具推荐
- Scrolling and zooming chart with ChartScroller