在图像处理领域中,在真正的应用过程前,通常需要对图像进行预先处理,达到去除干扰项的目的。滤波去噪就是其中的一项图像预处理工作。
在.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;
}
}
九、 阈值滤波
思路:
- 图像转成灰度
- 计算灰度平均值
- 以灰度平均值作为临界点进行二值化处理
- 轮廓检测
- 遍历所有的轮廓,得到每个轮廓的矩形范围(一般就是每个噪声点的范围)
- 判断每个矩形的长宽是否小于给定值,并用白色在原来的图像上进行填充,即把认为是噪点的范围用白色颜色填充
- 返回处理后的图像
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;
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
图像处理
+关注
关注
26文章
1226浏览量
55831 -
net
+关注
关注
0文章
123浏览量
55730 -
OpenCV
+关注
关注
29文章
611浏览量
40789
发布评论请先 登录
相关推荐
我正在做基于MATLAB的语音去噪处理的实习报告
时域采样的相关知识;(4)掌握信号频谱的概念;(5)掌握滤波器的设计方法;(6)通过对语音去噪的处理,更深刻地理解了信号频谱的含义,也加深了对滤波
发表于 09-29 22:42
张工教你FPGA图像处理技术
本帖最后由 enlinux123 于 2014-11-7 16:41 编辑
想参加技术培训学习可以加张工2232894713最近一段时间一直在研究基于FPGA的图像处理,乘着这个机会和大家交流
发表于 11-05 09:50
基于LabVIEW和Matlab混合编程的小波去噪方法
显示结果可以看出,经小波降噪后,滤除了噪声干扰信号,各激励响应信号更加明显,这对于后期的信号分析处理奠定了良好基础。5 结语小波去噪方法相比于传统的滤波器方法,在
发表于 01-16 15:21
数字图像处理的技术方法和应用
曝光,也可一对同一个场景的多幅图像求平均值,这样可以降低噪声。图像相减可以用于运动检测或去除图像中不需要的加性图案。常用的去噪方法:主要是采
发表于 11-18 11:45
基于Matlab的图像增强与复原技术在SEM图像中的应用
Wiener2函数进行二维自适应去噪滤波;该函数可对一幅被加性噪声污染的灰度图进行低通滤波处理。它的运算法则是Winner2函数估计
发表于 11-14 15:47
【案例分享】LabVIEW和Matlab混合编程的小波去噪方法
可以看出,经小波降噪后,滤除了噪声干扰信号,各激励响应信号更加明显,这对于后期的信号分析处理奠定了良好基础。5 结语小波去噪方法相比于传统的滤波器方法,在
发表于 08-06 04:00
源码交流=图像处理 实现图像去噪、滤波、锐化、边缘检测
本帖最后由 乂统天下 于 2020-4-2 11:54 编辑
新手学习,多多关照,互相交流,共同进步^-^【实现功能】数字图像处理基本操作 [Matlab2016b]实现图像去噪、滤波
发表于 04-01 19:03
求程序,matlab图像处理添加椒盐噪声,高斯噪声,乘性噪声然后用sobel,roberts,prewitt滤波去噪。
求大神给个程序!!matlab图像处理添加椒盐噪声,高斯噪声,乘性噪声然后用sobel,roberts,prewitt滤波去噪。
发表于 12-10 18:18
小波分析应用在图像处理去噪及压缩
前言本篇把小波分析应用在图像处理中的去噪以及压缩进行了简单介绍与实例应用,不过由于知识储备还有限,有些专业知识还是无法详细的表述出来,所以感兴趣的需要自行查资料学习了,公式看多了,看着
发表于 03-29 09:48
评论