图像处理之滤波器:均值滤波、中值滤波、高斯滤波

假设,现在有输入:
在这里插入图片描述

一. 均值滤波

代码如下:

import cv2
import numpy as np

x = np.array([[1, 2, 3],
              [4, 5, 6],
              [7, 8, 9]], dtype=np.float32)
x_mean = cv2.blur(x, (3, 3))
print(x)
print('------------------------')
print(x_mean)

输出结果:
在这里插入图片描述
计算过程:
(1)边界填充:
均值滤波默认的边界填充方式为:BORDER_DEFAULT,

在这里插入图片描述
BORDER_REFLECT_101,以一种对称的方式对边界进行填充
在这里插入图片描述
填充结果如下图所示:
对于上下边界,以[1,2,3]和[7,8,9]为对称轴,把[4,5,6]填充到上下边界,如下图所示:
在这里插入图片描述
同理,对于左右边界,以纵轴为对称轴,进行填充,如下图所示:
在这里插入图片描述
(2)根据滤波器的大小k,取区域内k*k个数字,取均值。以第1个位置为例:
在这里插入图片描述
如图所示,取5,4,5,2,1,2,5,4,5一共9个数字,计算均值为: (5+4+5+2+1+2+5+4+5)/9 = 3.666。
跟程序计算的结果一致,同理可求得其他位置的值。

二. 中值滤波

代码如下:

import cv2
import numpy as np

x = np.array([[1, 2, 3], 
              [4, 5, 6], 
              [7, 8, 9]], dtype=np.float32)
x_median = cv2.medianBlur(x, 3)
print(x)
print('------------------------')

print(x_median)

输出结果:
在这里插入图片描述
计算过程:
(1)对边界进行填充:
在这里插入图片描述
中值滤波的边界填充方式为: BORDER_REPLICATE,即复制相邻的值作为边界的值,如上图所示。
在这里插入图片描述

(2)根据滤波器大小k,选取区域内的k*k个数字,排序选取中值。以第一个位置1为例:
在这里插入图片描述
选取数字1, 1, 1, 1, 2, 2, 4, 4, 5,可以看到中值为2,所以滤波后第1个位置的值为2。

同理,求得其他位置的值。

三. 高斯滤波

代码如下:

import cv2
import numpy as np

x = np.array([[1, 2, 3],
              [4, 5, 6],
              [7, 8, 9]], dtype=np.float32)
x_gaussian = cv2.GaussianBlur(x, (3, 3), 1)
print(x)
print('------------------------')
print(x_gaussian)

输出结果:
在这里插入图片描述
计算过程:
(1)边界填充
高斯滤波默认的边界填充方式和均值滤波的方式一样,也是BORDER_REFLECT_101,因此填充完毕后,如下所示:
在这里插入图片描述
(2)高斯滤波

  • 正态分布,也叫“高斯分布”,曲线如下所示:
    在这里插入图片描述

  • 一维正态分布公式如下所示,其中μ为x的均值,σ表示标准差。
    在这里插入图片描述

  • 图像一般都是二维的,二维正态分布的公式如下所示,假设均值μ为0,(x,y)表示坐标:
    在这里插入图片描述
    它的三维图像如下图所示:
    在这里插入图片描述
    我们可以总结出一个规律:对称,中间大,两边小。

  • 高斯滤波器的值 (注意:这里设置μ=0,σ=1 )
    滤波器大小为3*3,以中心为圆点坐标(0,0),其他位置的作为如下所示:
    在这里插入图片描述
    将坐标值代入上面的公式,可得到每个位置的值:
    在这里插入图片描述
    再对上面的滤波器进行“归一化”,就是每个位置的值除以各个位置的总和,得到最终的高斯滤波器为:
    在这里插入图片描述
    可以看到,高斯滤波器符合“对称,中间大,两边小”的规律
    (3)计算
    将最终得到的滤波器在填充完边界的输入上滑动,作点乘操作,得到各个位置的值。以第一个位置为例:
    在这里插入图片描述
    0.07511358 x 5 + 0.07511358 x 5 + 0.07511358 x 5 + 0.07511358 x 5 + 0.12384135 x 4 + 0.12384135 x 4 + 0.12384135 x 2 + 0.12384135 x 2 + 0.20417997 x 1 = 3.19254777,

跟程序计算出来的一致,同理,可得其他位置的值。

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值