-----接上一篇文章------------------------------------------------------
六、 非區域去噪
使用非區域平均去噪演算法進行影像去噪,并多次計算進行優化 CvInvoke.FastNlMeansDenoising(img, img);
七、 彩色模糊
色彩聚類平滑濾波 用于區域分割 CvInvoke.PyrMeanShiftFiltering(img, img, 5, 5, 2, new MCvTermCriteria(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; } }
九、 閾值濾波
思路:
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;

k=15 濾波結果,小黑點基本除去干凈


轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/413006.html
標籤:其他
