Emgu CV4图像处理之高斯滤波和中值滤波12(C#)

本文测试环境:

win10  64位

vistual studio 2019  

Emgu CV 4.6.0

环境配置准备:

1 新增控制台项目,.net framework为4.7.2

2  把win-x64目录的native目录下的文件全部拷贝到项目的运行目录Debug目录下

3  项目选择x64

4 添加项目引用Emgu.CV.dll、Emgu.CV.Platform.NetFramework.dll、System.Drawing.dll和System.Runtime.InteropServices.RuntimeInformation.dll  

具体配置参考:
Emgu CV4图像处理之环境搭建1(C#)_zxy2847225301的博客-CSDN博客

至于本文后面的核及核计算的逻辑,可以参考我前面写的Emgu CV4图像处理之方框滤波和均值滤波12(C#)_zxy2847225301的博客-CSDN博客

方框滤波

后面的内容转自:EmguCV-第13讲-图像滤波_YADONCHEN的博客-CSDN博客

高斯滤波

函数原型:

 第一个参数src为输出的图像

第二个参数dst为输出的图像

第三个参数ksize为核的大小,常写成Size(w,h),w表示宽度,h表示高度。Size(3,3)就表示3x3的核大小,Size(5,5)就表示5x5的核大小

第四个参数sigmaX  表示卷积核在X方向的的标准误差

  • 若sigmaY为零,就将它设为sigmaX,若是sigmaX和sigmaY都是0,那么就由ksize.width和ksize.height计算出来。

  • sigmaX=0.3×[(ksize.width-1)×0.5-1]+0.8

  • sigmaY=0.3×[(ksize.height-1)×0.5-1]+0.8

第五个参数sigmaY  表示卷积核在Y方向的的标准误差

第六个参数:borderType边界样式,决定了以何种方式处理边界,通常采用默认值便可
 

 

代码例子:

pic_noise.png中的原图如下:

可以看到有很多白点噪声

代码如下:

using Emgu.CV;
using Emgu.CV.Structure;
using Emgu.CV.Util;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace EmguCVDemo2
{
    class Program
    {
        static void Main(string[] args)
        {

            Image<Bgr,Byte> srcPic = new Image<Bgr, Byte>("pic_noise.png");
            GaussianFilter(srcPic);
            CvInvoke.WaitKey(0);
            Console.ReadLine();
        }

        /// <summary>
        /// 高斯滤波
        /// </summary>
        /// <param name="srcPic"></param>
        private static void GaussianFilter(Image<Bgr, Byte> srcPic)
        {
            CvInvoke.Imshow("srvPic", srcPic);
            Mat dstPic = new Mat();
            //进行高斯滤波
            CvInvoke.GaussianBlur(srcPic, dstPic,new Size(3,3),0,0,Emgu.CV.CvEnum.BorderType.Default);
            CvInvoke.Imshow("dstPic", dstPic);
            CvInvoke.WaitKey(0);
        }

        

    }
}

 运行结果如下:

中值滤波

某个像素值=等于原图一小部分区域的像素值排序后的中间那个值

函数原型:

第一个参数src为原图

第二个参数dst为输出图

第三个参数ksize表示为滤波核的大小,注意这里是int形式的ksize,输入一个整数便可,3就表示3x3的核大小,5就表示5x5的核大小 ;注意ksize*ksize的值不能为偶数(即为大于1的奇数),如果为偶数就没有中值了

例子代码如下:

using Emgu.CV;
using Emgu.CV.Structure;
using Emgu.CV.Util;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace EmguCVDemo2
{
    class Program
    {
        static void Main(string[] args)
        {

            Image<Bgr,Byte> srcPic = new Image<Bgr, Byte>("pic_noise.png");
            MedianFilter(srcPic);
            CvInvoke.WaitKey(0);
            Console.ReadLine();
        }

       

        /// <summary>
        /// 中值滤波
        /// </summary>
        /// <param name="srcPic"></param>
        private static void MedianFilter(Image<Bgr, Byte> srcPic)
        {
            CvInvoke.Imshow("srvPic", srcPic);
            Mat dstPic = new Mat();
            //进行中值滤波
            CvInvoke.MedianBlur(srcPic, dstPic,3);
            CvInvoke.Imshow("dstPic", dstPic);
            CvInvoke.WaitKey(0);
        }

    }
}

 运行结果如下:

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值