opencv:线性和非线性滤波

来源:互联网 发布:看图猜字网络世界 编辑:程序博客网 时间:2024/05/21 15:42

各种滤波学习
各种滤波:减小图片的噪声点
图像滤波得目的:1、抽出对象的特征作为图像识别的特征
2、消除图像所混入的噪声
平滑滤波:低频增强的滤波:1:模糊 2:消除噪音
%线性滤波器
1)方框滤波-BoxBlur
2)均值滤波-Blur
3)高斯滤波-GaussianBlur
%非线性滤波器
4)中值滤波-medianBlur
5)双边滤波-bilateralFilter
python函数学习
1、方框滤波

cv2.boxFilter(src,dst,ddepth,Size,Point,normalize,borderType)

src:原图片,Mat类型;
dst:目标图片(可默认)
ddepth=-1(默认原始图像深度)
Size:ksize,内核大小
boxFilter所用的核
全1的矩阵:
这里写图片描述
2、均值滤波
主要是用领域平均,将图片区域的个像素的均值代替原图像的各个像素值。
缺陷:不能很好的保护图片的细节,去除噪声的同时破坏了图片的细节部分。
用blur函数:
3、高斯滤波
可以消除高斯噪声,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,是通过与周围的点经过加权平均得到。就是图像与正态分布做卷积。
函数为:

cv2.GaussianBlur(src,ksize,sigmaX,sigmaY)

src:图片
ksize:高斯核大小
sigmaX,sigmaY:高斯分布的方差。
高斯计算:
通过对卷积核(高斯核)进行权重分配,权重分配遵循高斯分布,接着对矩阵做高斯滤波。高斯权重分配矩阵:假设以中心点为原点(0,0),其他点在正太分布的曲线上。

非线性滤波
有时非线性滤波会得到更好的效果。在噪声不是高斯噪声而是散粒噪声时,即图像偶尔会出现很大的值得时候,用高斯滤波只是将其变得更加柔和而已。
1)中值滤波
思想:用像素点邻域灰度值,的中值代替像素的灰度值,该方法去除椒盐噪声、脉冲噪声又同时保留图像的边缘细节。
计算方式:选择每个像素的邻域像素中的中值作为输出。
函数:

cv2.medianBlur(src,ksize)%ksize:表示必须是奇数

2)双边滤波
结合图像的空间领域和像素相似度的一种这种方法。考虑到了空间信息和灰度值信息,从而进行去燥。
双边滤波可以很好的保留边缘信息。
这里写图片描述
函数为

cv2.bilateralFilter(img,4,25,25))cv2.bilateralFilter(src,d,sigmaColor,sigmaspace)

src:原始图像
d:每个像素领域的直径
sigmaColor:颜色空间滤波器sigma的值,参数越大表明与邻域像素相关性越大
sigmaSpace:空间坐标中sigma的值,坐标方差大,表明越远的像素会相互影响。