0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

图像处理技术之滤波去噪

jf_78858299 来源:明月心技术学堂 作者:饶玉田 2023-02-08 16:34 次阅读

在图像处理领域中,在真正的应用过程前,通常需要对图像进行预先处理,达到去除干扰项的目的。滤波去噪就是其中的一项图像预处理工作。

在.NET下常用OpenCV进行图像处理工作,常用的.NET下的OpenCV库有Emgu CV和OpenCVSharp。

** EmguCV**是.NET平台下对OpenCV图像处理库的封装,也就是.NET版的OpenCV。由于OpenCV是用C和C++编写的,Emgu用C#对其进行封装,允许用.Net语言来调用OpenCV函数,如C#、VB、VC++等。

OpenCvSharp ^ ^是一个OpenCV的.Net wrapper,应用最新的OpenCV库开发,使用习惯比EmguCV更接近原始的OpenCV,有详细的使用样例供参考。。使用OpenCvSharp,可用C#,VB.NET等语言实现多种流行的图像处理(image processing)与计算机视觉(computer vision)算法

一、 中值滤波

Image image = Image.FromFile("xx.jpg");
Imagebyte> img = new Imagebyte>((Bitmap)image);//实例化一个三通道的OPENCV的图像对象
Int k=3;//滤波核,奇数
 img =img.SmoothMedian(k);//按照指定的滤波核进行中值滤波
Bitmap bitmap= img.Bitmap;//输出Bitmap格式的结果

二、 高斯滤波

Image image = Image.FromFile("xx.jpg");
Imagebyte> img = new Imagebyte>((Bitmap)image);//实例化一个三通道的OPENCV的图像对象
Int k=3;//滤波核,奇数
img = img. SmoothGaussian (k);//按照指定的滤波核进行高斯滤波
Bitmap bitmap= img.Bitmap;//输出Bitmap格式的结果

三、 均值滤波

Image image = Image.FromFile("xx.jpg");
Imagebyte> img = new Imagebyte>((Bitmap)image);//实例化一个三通道的OPENCV的图像对象
Int k=3;//滤波核,奇数
img = img. SmoothBlur (k,k);//按照指定的滤波核进行均值滤波
Bitmap bitmap= img.Bitmap;//输出Bitmap格式的结果

四、 方框滤波

Image image = Image.FromFile("xx.jpg");
Imagebyte> img = new Imagebyte>((Bitmap)image);//实例化一个三通道的OPENCV的图像对象
Int k=3;//滤波核,奇数
CvInvoke.BoxFilter(img, img, DepthType.Default, new Size(k, k), new Point(-1, -1));//按照指定的滤波核进行方框滤波
Bitmap bitmap= img.Bitmap;//输出Bitmap格式的结果

五、 双边滤波

Image image = Image.FromFile("xx.jpg");
Imagebyte> img = new Imagebyte>((Bitmap)image);//实例化一个三通道的OPENCV的图像对象
Int k=3;//滤波核,奇数
CvInvoke.EdgePreservingFilter(img, img, EdgePreservingFilterFlag.NormconvFilter, k, 0.4f);;//按照指定的滤波核进行双边滤波
Bitmap bitmap= img.Bitmap;//输出Bitmap格式的结果

六、 非局部去噪

CvInvoke.FastNlMeansDenoising(img, img);

七、 彩色模糊

色彩聚类平滑滤波    用于区域分割
CvInvoke.PyrMeanShiftFiltering(img, img,5, 5, 2, newMCvTermCriteria(2));

八、 离散余弦变换DCT滤波

/// 
       ///离散余弦变换(Dct)滤波
/// 
        /// 图像加载到opencv的mat数据格式
        /// 
        public static Mat Dct(Mat mat)
        {
            if (mat.NumberOfChannels < 3)//单通道图像,即二值化图或者灰度图
            {
                if (mat.Size.Height % 2 != 0)//图像长宽需要为偶数,如果不是则进行扩边处理
                {
                    CvInvoke.CopyMakeBorder(mat, mat, 0, 1, 0, 0, BorderType.Constant);
                }
                if (mat.Size.Width % 2 != 0) //图像长宽需要为偶数,如果不是则进行扩边处理
                {
                    CvInvoke.CopyMakeBorder(mat, mat, 0, 0, 0, 1, BorderType.Constant);
                }
                Mat matdst = new Mat();
                Emgu.CV.XPhoto.XPhotoInvoke.DctDenoising(mat, matdst, 8);
                return matdst;
            }
            else
            {
                Mat[] Matbgr = mat.Split();//三通道图像,需要拆分三个独立的单通道进行处理,
                for (int i = 0; i < Matbgr.Length; i++)
                {
                    Matbgr[i] = Dct(Matbgr[i]);//按单通道处理
                }
                List<Mat> listmat = new List<Mat>();
                for (int i = 0; i < Matbgr.Length; i++)
                {
                    listmat.Add(Matbgr[i]);
                }
                VectorOfMat vm = new VectorOfMat(listmat.ToArray());//合并处理后的通道
                CvInvoke.Merge(vm, mat);
                return mat;
            }
        }

九、 阈值滤波

思路:

  1. 图像转成灰度
  2. 计算灰度平均值
  3. 以灰度平均值作为临界点进行二值化处理
  4. 轮廓检测
  5. 遍历所有的轮廓,得到每个轮廓的矩形范围(一般就是每个噪声点的范围)
  6. 判断每个矩形的长宽是否小于给定值,并用白色在原来的图像上进行填充,即把认为是噪点的范围用白色颜色填充
  7. 返回处理后的图像
Image image = Image.FromFile("xx.jpg");
Int k=5;//滤波核,
  ImageByte> img = new Imagebyte>((Bitmap)image);
                ImageByte> gray = img.ConvertByte>();
                Gray average = gray.GetAverage();//平均值
                CvInvoke.Threshold(gray, gray, average.MCvScalar.V0 - average.MCvScalar.V0 * 0.2, 255, ThresholdType.Binary);//二值化


                using (VectorOfVectorOfPoint contours = new VectorOfVectorOfPoint())
                {
                    CvInvoke.FindContours(gray, contours, gray, RetrType.List, ChainApproxMethod.ChainApproxSimple);
                    int count = contours.Size;
                    for (int i = 0; i < count; i++)
                    {
                        using (VectorOfPoint contour = contours[i])
                        using (VectorOfPoint approxContour = new VectorOfPoint())
                        {
                            Rectangle rec = CvInvoke.BoundingRectangle(contour);
                            if (rec.Width <= k && rec.Height <= k)
                            {
                                CvInvoke.Rectangle(img, rec, new MCvScalar(255, 255, 255), -1);
                            }
                        }
                    }
                }
                return img.Bitmap;
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 图像处理
    +关注

    关注

    27

    文章

    1274

    浏览量

    56554
  • net
    net
    +关注

    关注

    0

    文章

    125

    浏览量

    56113
  • OpenCV
    +关注

    关注

    29

    文章

    624

    浏览量

    41206
收藏 人收藏

    评论

    相关推荐

    求基于fpga的图像去噪的设计

    求用vrilog语言的用双边滤波算法的图像去噪程序代码。谢谢,急!!!
    发表于 05-12 21:36

    源码交流=图像处理 实现图像去噪滤波、锐化、边缘检测

    本帖最后由 乂统天下 于 2020-4-2 11:54 编辑 新手学习,多多关照,互相交流,共同进步^-^【实现功能】数字图像处理基本操作 [Matlab2016b]实现图像去噪滤波
    发表于 04-01 19:03

    基于稀疏分解的图像去噪

    基于稀疏分解的图像去噪处理是将被噪声污染的图像分解成图像的稀疏成分和其他成分。稀疏成分对应于图像中的有用信息,其他成分对应于
    发表于 12-03 12:59 39次下载

    面向彩色手术显微图像算法改进

    对于要求高保真的彩色手术显微图像,去除采集过程中引入的脉冲噪声是一项非常重要的任务。将自适应矢量中值滤波方法应用于彩色图像去噪,其效果非常理想。该方法可根据
    发表于 08-12 08:22 15次下载

    基于小波变换的信号滤波研究

    本文介绍了 小波变换 理论, 系统地研究了小波变换在信号处理尤其是信号滤波方面的应用。根据不同类型的噪音, 给出了基于不同小波变换的滤波
    发表于 08-03 17:46 56次下载

    基于Gauss滤波和Euler修复模型的SAR图像去噪

    基于Gauss滤波和Euler修复模型的SAR图像去噪_王田芳
    发表于 01-07 16:24 2次下载

    基于中值滤波和小波变换的火电厂炉膛火焰图像去噪方法

    针对煤电厂炉膛火焰图像含有脉冲噪声和高斯噪声混合含图像的特点,提出了中值滤波和小波变换相结合的火焰图像去噪方法。首先采用自适应权重中值
    发表于 11-27 09:46 1次下载
    基于中值<b class='flag-5'>滤波</b>和小波变换的火电厂炉膛火焰<b class='flag-5'>图像去噪</b>方法

    图像分割的非局部均值算法

    针对传统非局部均值(NLM)算法的滤波参数非自适应及后边缘易模糊的缺点,提出一种基于图像分割的非局部均值
    发表于 11-30 14:19 1次下载
    <b class='flag-5'>图像</b>分割的非局部均值<b class='flag-5'>去</b><b class='flag-5'>噪</b>算法

    双边滤波点云算法

    针对三维点云数据模型在光顺中存在不同尺度噪声的问题,提出一种基于噪声分类的双边滤波点云算法。该算法首先将噪声细分为大尺度和小尺度噪声
    发表于 01-05 10:51 2次下载
    双边<b class='flag-5'>滤波</b>点云<b class='flag-5'>去</b><b class='flag-5'>噪</b>算法

    小波阈值的应用

    介绍了小波阈值的三种应用:小波阈值技术在ECG信号处理中的应用、小波阈值
    发表于 01-10 14:25 6040次阅读
    小波阈值<b class='flag-5'>去</b><b class='flag-5'>噪</b>的应用

    基于python的小波阈值算法

    ,一般不作处理,只对剩余三个高通部分进行处理。一次阈值并不能完全去除噪声,还需要对未作处理的低频部分(LL)再次进行小波分解和阈值
    发表于 01-10 16:32 1w次阅读

    图像去噪算法的优点和缺点

    BM3D 是一种降噪方法提高了图像在变换域的稀疏表示。BM3D 降噪方法的优点是更好的保留图像中的一些细节,BM3D采用了不同的策略。通过搜索相似块并在变换域进行
    的头像 发表于 05-04 18:36 1.8w次阅读
    <b class='flag-5'>图像去噪</b>算法的优点和缺点

    如何使用PDE实现线条痕迹图像去噪算法的设计

    由于金属表面的锈蚀,使得线条痕迹图像易受噪声影响,造成图像特征提取、比对和分析困难等问题。常用的方法如高斯滤波易破坏边缘特征,形成边缘偏
    发表于 09-02 17:50 11次下载
    如何使用PDE实现线条痕迹<b class='flag-5'>图像去噪</b>算法的设计

    基于波域调和滤波扩散模型的图像去噪算法

    针对当前图像去噪算法缺乏对整体结构的分析以及运算量过大的不足,提岀了一种利用波域调和滤波扩散模型改进BM3D技术的新算法。首先,利用传统
    发表于 05-18 15:39 4次下载

    图像识别技术的原理是什么

    图像识别技术是一种利用计算机视觉和机器学习技术图像进行分析和理解的技术。它可以帮助计算机识别和理解图像
    的头像 发表于 07-16 10:46 783次阅读