日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/4 编程问答 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 图像处理技术(二)滤波去噪 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在圖像處理領域中,在真正的應用過程前,通常需要對圖像進行預先處理,達到去除干擾項的目的。濾波去噪就是其中的一項圖像預處理工作。

在.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格式的結果

原圖

二、???? 高斯濾波

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格式的結果

三、???? 均值濾波

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格式的結果

四、???? 方框濾波

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格式的結果

五、???? 雙邊濾波

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));

八、???? 離散余弦變換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;}}

九、???? 閾值濾波

思路:

  • 圖像轉成灰度

  • 計算灰度平均值

  • 以灰度平均值作為臨界點進行二值化處理

  • 輪廓檢測

  • 遍歷所有的輪廓,得到每個輪廓的矩形范圍(一般就是每個噪聲點的范圍)

  • 判斷每個矩形的長寬是否小于給定值,并用白色在原來的圖像上進行填充,即把認為是噪點的范圍用白色顏色填充

  • 返回處理后的圖像

  • 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;

    k=15過濾后的結果

    QQ技術交流群:318860399

    總結

    以上是生活随笔為你收集整理的图像处理技术(二)滤波去噪的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。