1,中值滤波

中值滤波 : 是一种非线性滤波,使用像素点领近点的的灰度值的中值代替改点的灰度值,
可以去除脉冲噪声跟椒盐噪声.

  1. public static void MedianBlur(InputArray src, OutputArray dst, int ksize);

ksize : 改参数必须大于1,且为奇数

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

本例所示将源图的白点都消除了
image.png

2, 双边滤波

双边滤波是一种非线性滤波器,是结合图像空间邻近度和像素值相似度的一种折中处理,尽量在降噪的同时保存边缘

  1. public static void BilateralFilter(InputArray src,
  2. OutputArray dst,
  3. int d,
  4. double sigmaColor,
  5. double sigmaSpace,
  6. BorderTypes borderType = BorderTypes.Reflect101);

src: 输入原图
dst: 输出图
d: 在滤波过程中使用的每个像素邻域的直径
sigmaColor: 在颜色空间中过滤sigma。该参数值越大,表示像素邻域内更多的颜色会混合在一起,从而产生更大的半均等颜色区域

sigmaSpace: 在坐标空间中过滤。参数值越大,越远的像素会相互影响(只要它们的颜色足够接近;见sigmaColor)。然后d>0,它指定的邻域大小与sigmspace无关,否则d与sigmspace成比例

borderType : 一般是用默认值

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

image.png