项目场景:
一般传感器会有极端噪点出现,比如热传感器,LCD光感器等。
这些噪点应该选用什么降噪最合适呢?
基本原理:
图像的中值滤波是一种非线性图像处理方法,是统计排序滤波器的一种典型应用。与之前介绍的均值处理的思想有所不同,中值滤波是通过对邻域内像素按灰度排序的结果决定中心像素的灰度。具体的操作过程如下:用一个奇数点的移动窗口,将窗口中心点的值用窗口内各点的中值代替。假设窗口内有5个点,其值为1,2,3,4和5,那么此窗口内各点的中值即为3,也就是用3来代替中心点的像素值。
数字图像存在冗余信息,具体分为六大冗余:空间冗余、时间冗余、视觉冗余、信息熵冗余、结构冗余、知识冗余。其中第一个空间冗余就可以很好的解释中值滤波的作用。空间冗余指的是:图像内部相邻像素之间存在较强的相关性而造成的冗余。简单来说就是,同一景物表面上采样点的颜色之间通常存在着空间相关性,相邻各点的取值往往相近或者相同,这就是空间冗余。而脉冲噪声通常是在一个邻域内有一个点或多个点的灰度值很高或很低,这就与周围像素存在较大差异,因此中值滤波能很好的去除这种噪声。
在《数字图像处理 原理与实践MATLAB版》书中,作者利用简单直观的矩阵来演示了中值滤波的原理。如下所示:
选择3x3的正方形作为采样窗口,下图显示了中值滤波去除杂点的效果。其中0位杂点,b为对a进行中值滤波的结果。
![](https://i-blog.csdnimg.cn/blog_migrate/2976f0ddb47e8a76e65f228797819ee0.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/86cdb189572394e359b6344b23cfe110.jpeg)
中值滤波不仅对孤立杂点的消除效果显著,对稍密集的杂点也有很好的去除效果。如下图所示。对比简单平滑的结果,不难看出中值滤波对消除离散型杂点的显著效果。
这些都只需要使用cv2中的一个函数就可以做到
vidata = cv2.medianBlur(vidata, 3) # vidata为需要滤波的数据-ndarray
中值滤波完胜!
原博文:
matlab图像处理-中值滤波原理
中值滤波