*滤波简介:
1)滤波实际上*是信号处理的一个概念,图像可以看成一个二维信号,其中像素点的灰度值的高低代表信号的强弱
2)高频:图像中剧烈变化的部分
3)低频:图像中变化缓慢,平坦的部分
4)根据图像的高低频特性,设置高通和低通滤波器,高通滤波器可以检测图像中尖锐,变化明显的地方,低通滤波器可以让图像变得平滑,消除噪声干扰
5)图像滤波是OpenCv图像处理的重要部分,在图像预处理方面应用广泛,图像滤波的好坏决定后续处理结果的好坏
线型滤波: 方框滤波,均值滤波,高斯滤波非线性滤波: 中值滤波, 双边滤波**
1, 方框滤波:BoxFilter
public static void BoxFilter(InputArray src,
OutputArray dst,
MatType ddepth,
Size ksize,
Point? anchor = null,
bool normalize = true,
BorderTypes borderType = BorderTypes.Reflect101);
src: 输入图像
dst: 输出图像
ddepth: MatType类型,图像深度,如果为-1则为源图像深度,例:src.Depth
ksize: 平滑核大小,决定图像的质量
anchor: 锚点。默认值Point(-1,-1)表示锚位于内核中心
normalize: 指示内核是否归一化
borderType : 输出图像的边框样式,一般用默认样式
当normalize为 true 时,方框滤波也就成了均值滤波,
Mat src = new Mat(@"I:\OpenCvSharp学习\3副本.jpg", ImreadModes.AnyColor);
Mat dst1 = new Mat();
Mat dst2 = new Mat();
Window srcWin = new Window("src", WindowMode.AutoSize, src);
Cv2.BoxFilter(src, dst1, dst1.Depth(), new Size(5,5), new Point(-1, -1), true);
Cv2.BoxFilter(src, dst2, dst1.Depth(), new Size(5, 5), new Point(-1, -1), false);
Window dstWin1 = new Window("dst1", WindowMode.AutoSize, dst1);
Window dstWin2 = new Window("dst2", WindowMode.AutoSize, dst2);
Cv2.WaitKey(0);
2,均值滤波Blur:
public static void Blur(InputArray src,
OutputArray dst,
Size ksize,
Point? anchor = null,
BorderTypes borderType = BorderTypes.Reflect101);
src: 输入图像
dst: 输出图像
ksize: 内核大小,size(X,Y),假如size(3,3)则表示33的内核大小
anchor: 锚点。默认值Point(-1,-1)表示锚位于内核中心
*borderType: 输出图像的边框样式,一般用默认样式
Mat src = new Mat(@"I:\OpenCvSharp学习\3副本.jpg", ImreadModes.AnyColor);
Mat dst1 = new Mat();
Mat dst2 = new Mat();
Window srcWin = new Window("src", WindowMode.AutoSize, src);
Cv2.Blur(src,dst1,new Size(3,3));
Window dstWin1 = new Window("dst1", WindowMode.AutoSize, dst1);
Cv2.WaitKey(0);
方框滤波(当normalize为True) 与
均值滤波, 就是利用区域内像素的均值替换掉原有的像素值,在去噪的同时也会破坏掉原有图像的细节部分