一、知识
- 卷积核:用来对图像矩阵进行平滑的矩阵,也称为过滤器。
- 锚点:卷积核和图像矩阵重叠,进行内积运算,运算后锚点位置的像素点会被计算值代替。默认其中心点为锚点。
- 步长:卷积核沿着图像矩阵移动的方向。
- 内积:卷积核和图像矩阵对应像素点相乘,然后相加得到一个总和。
二、实现
1、均值滤波
/// <summary>
/// 均值滤波(模糊)
/// 线性模糊
/// </summary>
/// <param name="mat">图片</param>
/// <param name="ksize">滤波模版Kernel的尺寸;必须是正奇数,值越大越模糊;new Size(11, 11)</param>
/// <param name="anchor">锚点;默认为(-1,-1)即kernel的中心点</param>
/// <param name="borderType">外部像素的边界模式</param>
/// <returns></returns>
public static Mat Blur(Mat mat, Size ksize, Point? anchor = null, BorderTypes borderType = BorderTypes.Default)
{
Mat dstMet = new Mat();
Cv2.Blur(mat, dstMet, ksize, anchor, borderType);
return dstMet;
}
2、中值滤波
/// <summary>
/// 中值滤波(模糊)
/// 非线性模糊
/// 对去除斑点噪声和椒盐噪声很有用
/// </summary>
/// <param name="mat">图片</param>
/// <param name="ksize">滤波模版Kernel的尺寸;必须是正奇数,值越大越模糊;11</param>
/// <returns></returns>
public static Mat MedianBlur(Mat mat, int ksize)
{
Mat dstMet = new Mat();
Cv2.MedianBlur(mat, dstMet, ksize);
return dstMet;
}
3、高斯滤波
/// <summary>
/// 高斯滤波(模糊)
/// 线性模糊
/// </summary>
/// <param name="mat">图片</param>
/// <param name="ksize">滤波模版Kernel的尺寸;必须是正奇数,值越大越模糊;new Size(11, 11)</param>
/// <param name="sigmaX">X轴方向的标准差,值越大越模糊</param>
/// <param name="sigmaY">Y轴方向的标准差,值越大越模糊</param>
/// <param name="borderType">外部像素的边界模式</param>
/// <returns></returns>
public static Mat GaussianBlur(Mat mat, Size ksize, double sigmaX,
double sigmaY = 0, BorderTypes borderType = BorderTypes.Default)
{
Mat dstMet = new Mat();
Cv2.GaussianBlur(mat, dstMet, ksize, sigmaX, sigmaY, borderType);
return dstMet;
}
4、双边滤波
双边滤波(非线性模糊),原理为一个与空间距离相关的高斯函数与一个与灰度距离有关的高斯函数相乘。
案例:略
标签:Mat,dstMet,C#,模糊,滤波,OpenCV,ksize,mat From: https://www.cnblogs.com/qq2806933146xiaobai/p/18294405