一、噪声与处理
噪声:常见的有椒盐噪声和高斯噪声。
图像滤波处理:
1.消除图像噪声的滤波,即图像平滑/图像去噪(低通滤波)
2.提取图像中的部分信息的滤波(高通滤波)
由于噪声主要集中在高频段,因此图像去噪是低通滤波。
图像滤波:
1.线性滤波—-对滤波器内所有像素值
1.1均值滤波
1.2方框滤波
1.3高斯滤波
2.非线性滤波
2.1中值滤波
2.2双边滤波
线性滤波
1.均值滤波


2.方框滤波
相当于均值滤波加上了一个系数。
3.高斯滤波
用来处理高斯噪声
ksize
sigmaX
sigmaY
这三个量有一定的转换关系;
当输入尺寸为0时,会根据标准偏差计算滤波器的尺寸;
当标准偏差 有一个为0时,则两个方向都是输入的那个标准偏差的值;
当标准偏差都为0时,则两个方向的标准偏差默认为滤波器尺寸的计算值。
该函数用于生成指定尺寸的高斯滤波器,sigma若为负值,则由ksize默认计算。
如果要生成一个二维的GaussianFilter,需要调用两次getGaussianFilter函数,得到两个方向的一维高斯滤波器,相乘得到二维高斯滤波器。
4.自定义滤波器
两个函数:
void filter2D()void sepFilter2D()

kernel(卷积核)为自定义值。

要输入两个一维的滤波器
非线性滤波
1.中值滤波
用滤波器范围内所有的像素值的中值,代替滤波器中心位置的像素值。
多用于处理椒盐噪声。
ksize越大,图像越模糊。
2.双边滤波
双边滤波的双边,指的是空域滤波和值域滤波;能很好的保留区域信息(边缘);
在保留区域信息的基础上实现对噪声的去除。
d: 滤波过程中每个像素邻域的直径。
sigmaColor,sigmaSpace越大,表面越远的像素会相互影响,图像越模糊。
双边滤波能起到美颜的效果。
二、边缘检测
求取边缘,可以用函数filter2D。
在一类求取边缘的函数中,需要注意的是:
输出图像是用来显示边缘的Mat:可能有负值。
因此,输出图像的类型最好固定为CV_16S,再进行一步 convertScaleAbs();取绝对值
alpha,beta分别是缩放比例和旋转比例。
1.Sobel算子

dx,dy是x,y方向的差分阶数;
scale是对导数计算结果的缩放比例;
分别是x,y方向的滤波器
Sobel(img, ok, CV_16S, 2, 0,3);convertScaleAbs(ok, ok);imshow("1", ok);
2.Scharr算子
3.Laplacian算子


int main(){Mat img, ok, output;img = imread("D:/OpenCV/ycy2.jpg");if (img.empty()){cout << "error!";}Laplacian(img, ok, -1, 3);Laplacian(img, output, CV_16S, 3);convertScaleAbs(output, output);imshow("默认", ok);imshow("CV_16S", output);convertScaleAbs(ok, ok);imshow("abs", ok);waitKey(0);return 0;}
4.Canny算子


输入必须是CV_8U(8位无符号)的单通道或三通道图像;
两个滞后阈值,最好维持在2:1到3:1 的比例;
阈值低,取到的边缘就多;阈值高,取到的边缘就少。
apertureSize:算子直径;
L2gradient:计算方法;
5.获取滤波器
getDerivKernels
kx,ky是行,列滤波器的输出尺寸,Size(ksize,1)
dx,dy是x,y方向的微分阶次;
nomalize 是 是否进行归一化操作的标准,默认不进行。
通过该函数,可以获得不同阶,不同尺寸的滤波器;

