图像处理技术(二)滤波去噪

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

在.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)算法。

    本文将介绍利用Emgu CV进行图像处理滤波去噪的常用方法。

一、     中值滤波

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

原图

2c6f630da29d05b6ee8512eb229962ac.png

9a6373095731418f33558fb33046c3c3.pngde231e80a71adb99a2ffd23ff8850dae.png

二、     高斯滤波

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

931dfdb94d5671d86094572c638beb80.png

443da43c6c7a567d1f2296f61e75cf21.png

三、     均值滤波

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

cce5b82e0fc506d2a152d725e9e94760.png240302b8e015411c01b769086b27e7de.png

四、     方框滤波

Image image = Image.FromFile("xx.jpg");
Image<Bgr, byte> img = new Image<Bgr, byte>((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格式的结果

323cf0d94e6698284b0ae832b1ea7b99.pngd4d56b92baeb4bb1a035d138c6d1ef02.png

五、     双边滤波

Image image = Image.FromFile("xx.jpg");
Image<Bgr, byte> img = new Image<Bgr, byte>((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));

bb5f776589f951a1b9038fc8483f7931.png

010cd41bdfe08dda37cb68327a0c0b61.png

八、     离散余弦变换DCT滤波

/// <summary>///离散余弦变换(Dct)滤波
/// </summary>/// <param name="mat">图像加载到opencv的mat数据格式</param>/// <returns></returns>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;//滤波核,Image<Bgr, Byte> img = new Image<Bgr, byte>((Bitmap)image);Image<Gray, Byte> gray = img.Convert<Gray, Byte>();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;

2c43660bf5827eef7aa03f7e8daf1667.png

k=15过滤后的结果

a2e3cbec149abb5dba65ff61413c9427.png

QQ技术交流群:318860399

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/292883.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iOS开发之Runtime关联属性

2019独角兽企业重金招聘Python工程师标准>>> 首先&#xff0c;推荐给大家一个非常好用的一个网站&#xff1a; 非盈利无广告开发者专用网址导航&#xff1a;http://www.dev666.com/ API介绍 我们先看看Runtime提供的关联API&#xff0c;只有这三个API&#xff0c;使…

shell基础四

Bash 支持很多运算符&#xff0c;包括算数运算符、关系运算符、布尔运算符、字符串运算符和文件测试运算符。原生bash不支持简单的数学运算&#xff0c;但是可以通过其他命令来实现&#xff0c;例如 awk 和 expr&#xff0c;expr 最常用。expr 是一款表达式计算工具&#xff0c…

DecisionTree决策树算法及参数详解+实例+graphviz生成决策树

DecisionTree决策树大全 原文&#xff1a;http://ihoge.cn/2018/DecisionTree.html 利用信息墒判定先对那个特征进行分裂 信息墒是衡量信息不确定性的指标&#xff0c;信息墒公式&#xff1a; H(X)−∑x∈XP(x)log2P(x)其中P(x)表示事件x出现的概率。回到决策树的构建问题上…

穿皮裤放屁,裤子会鼓吗?真相看这里!

1 拉莫斯&#xff1a;没事儿&#xff0c;打今儿起我管你叫哥&#xff0c;你管我叫爸&#xff0c;咱俩各论各的。▼2 妈妈都是为了你好▼3 秃头女孩最后的倔强▼4 新浪OS&#xff1a;呼~太紧张了&#xff0c;放松下▼5 这什么鬼玩意儿&#xff1f;▼6 这到底是爱老婆&…

公布一个软件,轻新视频录播程序,H264/AAC录制视音频,保存FLV,支持RTMP直播...

已经上传到CSDN&#xff0c;下载地址&#xff1a;http://download.csdn.net/detail/avsuper/7421647&#xff0c;不要钱滴&#xff0c;嘿嘿。。。 本程序能够把摄像头视频和麦克风音频&#xff0c;录制为FLV文件。 视频压缩採用H.264编码&#xff0c;音频压缩採用AAC编码&#…

linux共享库及/etc/ld.so.conf文件的应用

Linux 共享库 Linux 系统上有两类根本不同的 Linux 可执行程序。第一类是静态链接的可执行程序。静态可执行程序包含执行所需的所有函数 —换句话说&#xff0c;它们是“完整的”。因为这一原因&#xff0c;静态可执行程序不依赖任何外部库就可以运行。  第二类是动态链接的…

shell之a+b求和l脚本的三种写法

第一种 #!/bin/bash a5 b10 c$[ $a$b ] echo ${c}第二种 #!/bin/bash a5 b10 let "cab" echo ${c} 第三种 #!/bin/bash a5 b10 ((cab)) echo ${c}

如何判断一个程序是 32bit 还是 64bit ?

咨询区 Jonathan Allen我有一个 .NET 应用程序&#xff0c;我觉得它现在是 32bit&#xff0c;但又不确定构建服务器是否真的帮我编译成了 32bit&#xff0c;请问我有什么办法可以检测当前的程序是否是真的 32bit &#xff1f;回答区 Jaco Pretorius你想判断运行的应用程序是 32…

c语言知识点(1)

1、函数strlen()和关键字sizeof()sizeof()是运算符&#xff0c;返回值为unsign_int&#xff0c;参数可以是数组、指针、类型、对象、函数等。strlen()是函数&#xff0c;参数必须是字符型指针(char*)&#xff0c;2、strlen()/strcat()/strcmp()/strcpy 编写3、memset()/memcmp(…

史上最强物理科普

全世界只有3.14 % 的人关注了爆炸吧知识一沙见世界 一花窥天堂手心握无限 须臾纳永恒杨振宁曾说读上面的四句诗可以感受到物理的美但物理的美不止于此物理还有一种庄严美一种神秘美一种初窥宇宙奥秘的畏惧美物理就是如此的迷人任何语言在它的面前都很贫瘠数学让人摆脱了愚昧而…

Oracle常用函数汇总

在Oracle OCP考试中&#xff0c;相当一部分知识点涉及到对于Oracle常见函数的考查。尽管Oracle官方文档SQL Language Reference中Functions一章内列举了所有Oracle自带函数&#xff0c;但如果要系统的看一遍&#xff0c;还是要花费相当的精力&#xff0c;更何况还是英文呢。如果…

直方图python高度_python – 子图中直方图的动画

normed 直方图的True参数使直方图绘制分布的密度.从the documentation开始&#xff1a; normed : boolean, optional If True, the first element of the return tuple will be the counts normalized to form a probability density, i.e., n/(len(x)dbin), i.e., the integra…

【java设计模式之Command(菜单命令) 】

Command模式是最让我疑惑的一个模式,我在阅读了很多代码后,才感觉隐约掌握其大概原理,我认为理解设计模式最主要是掌握起原理构造,这样才对自己实际编程有指导作用.Command模式实际上不是个很具体,规定很多的模式,正是这个灵活性,让人有些confuse.    Command定义  不少C…

经典的01背包问题

01背包问题具体例子: 假设现有容量10kg的背包,另外有3个物品,分别为a1,a2,a3。物品a1重量为3kg,价值为4;物品a2重量为4kg,价值为5;物品a3重量为5kg,价值为6。将哪些物品放入背包可使得背包中的总价值最大? 这个问题有两种解法,动态规划和贪婪算法。本文仅涉及动态…

代码设置Shape和Selector

开发中经常需要使用Shape和Selector&#xff0c;如果每个都用xml设置的话&#xff0c;会占用apk大小&#xff0c;同时命名多了也会混乱&#xff0c;使用代码来设置会方便很多。 需要用到2个类&#xff1a;GradientDrawable和StateListDrawable 相关API&#xff1a; setColor(rg…

Kubernetes:全面了解 Deployment

本文为作者的 Kubernetes 系列电子书的一部分&#xff0c;电子书已经开源&#xff0c;欢迎关注&#xff0c;电子书浏览地址&#xff1a;https://k8s.whuanle.cn【适合国内访问】https://ek8s.whuanle.cn 【gitbook】Deployment 是 Kubernetes 提供的一种自我修复机制来解决机器…

史上最冤!美国原子弹之父被骂了9年!最后他上台领奖,竟一把推开了总统.........

全世界只有3.14 % 的人关注了爆炸吧知识原子裂变不及人心善变“漫天奇光异彩&#xff0c;犹如圣灵逞威&#xff0c;祇有千只太阳&#xff0c;始能与它争辉。”1945年7月15日&#xff0c;奥本海默注视着远处的蘑菇云&#xff0c;想起了《摩诃婆罗多经&#xff1a;福者之歌》中的…

python实例化是什么意思_Python中实例化class的执行顺序示例详解

前言 本文主要介绍了关于Python实例化class的执行顺序的相关内容&#xff0c;下面话不多说了&#xff0c;来一起看看详细的介绍吧 Python里对类的实例化时有怎样的顺序 一般来说一个类里面有类变量和方法&#xff0c;比如我们定义一个名为A的类 class A(): bar "my lover…

IIS集成模式和经典模式 系统部署的不同

http://blog.csdn.net/byondocean/article/details/7074772转载于:https://www.cnblogs.com/mmnyjq/p/3298193.html

贪心算法

贪心算法 一、定义 什么是贪心算法呢?所谓贪心算法是指,在对问题求解时,总是做出在当前看来最好的选择。也就是说,不从整体最优解出发来考虑,它所做出的仅是在某种意义上的局部最优解。 贪心算法不是对所有问题都能得到整体最优解,但对范围相当广泛的许多问题都能产生整体…