5.3 只存在噪声的复原-空间滤波

本文介绍了数字图像处理中用于噪声复原的空间滤波方法,包括均值滤波、几何均值滤波和自适应滤波。均值滤波通过邻域像素的算术平均值来平滑图像,而几何均值滤波则保留更多图像细节。自适应滤波器根据图像局部特征调整,提供更好的降噪效果,但计算复杂度较高。文章通过实例展示了各种滤波器对高斯噪声、椒盐噪声的处理效果。
摘要由CSDN通过智能技术生成

本节所用图片素材共享于原始图片,提取码 523o

数字图形处理过程中引入噪声可分为两类,一类是由于经过系统引起的噪声,一类是由于干扰引起的加性噪声,当仅考虑加性噪声时,含有噪声的图像可表示:
g ( x , y ) = f ( x , y ) + η ( x , y ) (1) g(x, y)=f(x, y)+\eta(x,y) \tag{1} g(x,y)=f(x,y)+η(x,y)(1)
和DFT形式:
G ( u , v ) = F ( u , v ) + N ( u , v ) (2) G(u,v) = F(u, v) + N(u,v) \tag {2} G(u,v)=F(u,v)+N(u,v)(2)
对于这种形式的噪声,主要考虑空间域滤波。

均值滤波器

为描述方便,后文中用 S x y S_{xy} Sxy表示 f ( x , y ) f(x,y) f(x,y)周围 m × n m \times n m×n邻域内的点的坐标的集合,那么,那么 ( s , t ) (s,t) (s,t)就表示该邻域内某一点的坐标, g ( s , t ) g(s,t) g(s,t)就表示该邻域内某一点的灰度值

  • 算数均值滤波器

    算数均值滤波是通过计算点 f ( x , y ) f(x,y) f(x,y)周围大小为 m × n m \times n m×n的邻域中像素灰度的算数平均值来完成的,即:
    f ^ ( x , y ) = 1 m n ∑ ( s , t ) ∈ S x y g ( s , t ) (3) \hat f(x,y) = \frac{1}{mn} \sum_{(s,t) \in S_{xy}}g(s,t) \tag{3} f^(x,y)=mn1(s,t)Sxyg(s,t)(3)
    显然,该滤波器可以通过如下方式实现:

    filter = ones(m, n) / (m*n);
    g = imfilter(f, filter, 'replicate');
    

    不过,为了减少双精度浮点数计算的舍入误差,一般将将系数 1 m n \frac{1}{mn} mn1放在最后计算:

    filter = ones(m, n);
    g = imfilter(f, filter, 'replicate') / (m * n);
    

    当然,图像处理工具箱中也提供了算数均值滤波器的实现:

    filter = fspecial('average', [m, n]);
    g = imfilter(f, filter, 'replicate');
    

    实际中使用哪种都是可以的

  • 几何均值滤波器

    几何均值滤波是通过计算点 f ( x , y ) f(x,y) f(x,y)周围大小为 m × n m \times n m×n的邻域中像素灰度的几何平均值来完成的,即:
    f ^ ( x , y ) = [ ∏ ( s , t ) ∈ S x y g ( s , t ) ] 1 m n (4) \hat f(x,y) =\left [ \prod_{(s,t) \in S_{xy}}g(s,t) \right ]^{\frac{1}{mn}} \tag{4} f^(x,y)=(s,t)Sxyg(s,t)mn1(4)
    几何均值滤波器与算数均值滤波器相比,丢失的图像细节更少
    matlab中提供了计算几何均值的函数geomean(),故几何均值滤波可通过如下代码实现:

    g = colfilt(f, [m, n], 'sliding', @geomean);
    

如下图(a)是一块8比特X射线图,图(b)显示了被均值为0,方差为400的加性高斯噪声污染的结果,图(c)和图(d)显示了使用大小为3x3的算数均值滤波和几何均值滤波的结果,显然这两种滤波器都衰减了噪声,几何均值滤波与算数均值滤波相比,图像模糊程度更小(注意例如图(c)和图(d)顶部连接片)。
算数均值滤波与几何均值滤波在这里插入图片描述 本节所用完整代码如下

f = imread('Fig0507(a)(ckt-board-orig).tif');
figure
subplot(1, 2, 1);
imshow(f);
title('(a)原始图像');

f_with_noise = imread('Fig0507(b)(ckt-board-gauss-var-400).tif');
subplot(1, 2, 2);
imshow(f_with_noise);
title('(b)被均值为0,方差为400的加行高斯噪声污染的图像');

g_mean = colfilt(f_with_noise, [3, 3], 'sliding', @mean) / (3 * 3);
figure
subplot(1, 2, 1);
imshow(g_mean, [ ]);
title('(c)算数平均值滤波');

% 注意, geomean使用了进行了取对数加快运算,因此为了防止丢失精度和
% log0的出现,要将原图转为double类型并加上eps(matlab所能表示的最小的数)
g_geomean = colfilt(double(f_with_noise) + eps, [3, 3], 'sliding', @geomean);
subplot(1, 2, 2);
imshow(g_geomean, [ ]);
title('(d)几何平均值滤波');
  • 谐波均值滤波器
    谐波滤波器由如下式子给出:
    f ^ ( x , y ) = m n ∑ ( s , t ) ∈ S x y 1 g ( s , t ) (5) \hat f(x,y) =\frac {mn}{\sum_{(s, t) \in S_{xy}} \frac {1}{g(s,t)}} \tag{5} f^(x,y)=(s,t)Sxyg(s,t)1mn(5)
    谐波均值滤波器对于盐粒噪声(白点)效果较好,但不适用于胡椒噪声(暗点),也善于处理像高斯噪声那样的其他噪声

  • 逆谐波均值滤波器
    逆谐波均值滤波器由如下式子给出
    f ^ ( x , y ) = ∑ ( s , t ) ∈ S x y g ( s , t ) Q + 1 ∑ ( s , t ) ∈ S x y g ( s , t ) Q (6) \hat f(x,y) =\frac {\sum_{(s, t) \in S_{xy}} g(s,t)^{Q+1} }{\sum_{(s, t) \in S_{xy}} g(s,t)^Q} \tag{6} f^(x,y)=(s,t)Sxyg(s,t)Q(s,t)Sxyg(s,t)Q+1(6)
    其中Q为滤波器的阶数,这种滤波器适合消除椒盐噪声,当Q为正时,消除胡椒噪声;当Q为负时,消除盐粒噪声。当Q=0时,(6)式简化为一个算数均值滤波器,当Q = -1时,(6)简化为一个谐波均值滤波器。
    根据逆谐波均值滤波器的定义,逆谐波均值滤波器可通过如下代码实现:
    这里分母在计算完成后要加上eps防止分母为0的情形出现。

    g = imfilter(f .^ (Q + 1), ones(m,n), 'replicate') ./ (imfilter(f .^ (Q), ones(m,n), 'replicate') + eps);
    

    下图(a)和(c )显示了一幅被概率为0.1的胡椒噪声(a)和盐粒噪声(c )污染的图像,图(b)是对图(a)使用Q=1.5的逆谐波均值滤波器滤波的结果,图(d)是对图(c )使用Q = -1.5的逆谐波均值滤波器滤波的结果,可以看到在正确选择Q后,胡椒噪声与盐粒噪声均被消除。另外,逆谐波均值滤波器不能同时处理椒盐噪声,换言之,如果使用正Q处理盐粒噪声或负Q处理胡椒噪声,则会产生不可预估的后果,如图(e)(f)是使用Q=-1.5处理图(a)和Q=1.5处理图(c )的结果,显然,这两个都没有完成去噪的任务。
    胡椒噪声与滤波结果 盐粒噪声与滤波结果错误滤波结果本节所用的完整代码如下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值