*滤波简介:

1)滤波实际上*是信号处理的一个概念,图像可以看成一个二维信号,其中像素点的灰度值的高低代表信号的强弱

2)高频:图像中剧烈变化的部分

3)低频:图像中变化缓慢,平坦的部分

4)根据图像的高低频特性,设置高通和低通滤波器,高通滤波器可以检测图像中尖锐,变化明显的地方,低通滤波器可以让图像变得平滑,消除噪声干扰

5)图像滤波是OpenCv图像处理的重要部分,在图像预处理方面应用广泛,图像滤波的好坏决定后续处理结果的好坏

线型滤波: 方框滤波,均值滤波,高斯滤波非线性滤波: 中值滤波, 双边滤波**

1, 方框滤波:BoxFilter

  1. public static void BoxFilter(InputArray src,
  2. OutputArray dst,
  3. MatType ddepth,
  4. Size ksize,
  5. Point? anchor = null,
  6. bool normalize = true,
  7. BorderTypes borderType = BorderTypes.Reflect101);

src: 输入图像
dst: 输出图像
ddepth: MatType类型,图像深度,如果为-1则为源图像深度,例:src.Depth
ksize: 平滑核大小,决定图像的质量
anchor: 锚点。默认值Point(-1,-1)表示锚位于内核中心
normalize: 指示内核是否归一化
borderType : 输出图像的边框样式,一般用默认样式
normalizetrue 时,方框滤波也就成了均值滤波,

  1. Mat src = new Mat(@"I:\OpenCvSharp学习\3副本.jpg", ImreadModes.AnyColor);
  2. Mat dst1 = new Mat();
  3. Mat dst2 = new Mat();
  4. Window srcWin = new Window("src", WindowMode.AutoSize, src);
  5. Cv2.BoxFilter(src, dst1, dst1.Depth(), new Size(5,5), new Point(-1, -1), true);
  6. Cv2.BoxFilter(src, dst2, dst1.Depth(), new Size(5, 5), new Point(-1, -1), false);
  7. Window dstWin1 = new Window("dst1", WindowMode.AutoSize, dst1);
  8. Window dstWin2 = new Window("dst2", WindowMode.AutoSize, dst2);
  9. Cv2.WaitKey(0);

image.png

2,均值滤波Blur:

  1. public static void Blur(InputArray src,
  2. OutputArray dst,
  3. Size ksize,
  4. Point? anchor = null,
  5. BorderTypes borderType = BorderTypes.Reflect101);

src: 输入图像
dst: 输出图像
ksize: 内核大小,size(X,Y),假如size(3,3)则表示33的内核大小
anchor: 锚点。默认值Point(-1,-1)表示锚位于内核中心
*borderType
: 输出图像的边框样式,一般用默认样式

  1. Mat src = new Mat(@"I:\OpenCvSharp学习\3副本.jpg", ImreadModes.AnyColor);
  2. Mat dst1 = new Mat();
  3. Mat dst2 = new Mat();
  4. Window srcWin = new Window("src", WindowMode.AutoSize, src);
  5. Cv2.Blur(src,dst1,new Size(3,3));
  6. Window dstWin1 = new Window("dst1", WindowMode.AutoSize, dst1);
  7. Cv2.WaitKey(0);

image.png

方框滤波(当normalize为True) 与
均值滤波, 就是利用区域内像素的均值替换掉原有的像素值,在去噪的同时也会破坏掉原有图像的细节部分