在圖像處理領域中,在真正的應用過程前,通常需要對圖像進行預先處理,達到去除干擾項的目的。濾波去噪就是其中的一項圖像預處理工作。
在.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;
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
圖像處理
+關注
關注
29文章
1342瀏覽量
59507 -
net
+關注
關注
0文章
127瀏覽量
57092 -
OpenCV
+關注
關注
33文章
652瀏覽量
44786
發布評論請先 登錄
相關推薦
熱點推薦
源碼交流=圖像處理 實現圖像去噪、濾波、銳化、邊緣檢測
本帖最后由 乂統天下 于 2020-4-2 11:54 編輯
新手學習,多多關照,互相交流,共同進步^-^【實現功能】數字圖像處理基本操作 [Matlab2016b]實現圖像去噪、濾波
發表于 04-01 19:03
面向彩色手術顯微圖像的去噪算法改進
對于要求高保真的彩色手術顯微圖像,去除采集過程中引入的脈沖噪聲是一項非常重要的任務。將自適應矢量中值濾波方法應用于彩色圖像去噪,其效果非常理想。該方法可根據噪
發表于 08-12 08:22
?15次下載
基于小波變換的信號濾波和去噪研究
本文介紹了 小波變換 理論, 系統地研究了小波變換在信號處理尤其是信號濾波去噪方面的應用。根據不同類型的噪音, 給出了基于不同小波變換的濾波
發表于 08-03 17:46
?56次下載
基于中值濾波和小波變換的火電廠爐膛火焰圖像去噪方法
針對煤電廠爐膛火焰圖像含有脈沖噪聲和高斯噪聲混合含噪圖像的特點,提出了中值濾波和小波變換相結合的火焰圖像去噪方法。首先采用自適應權重中值
發表于 11-27 09:46
?1次下載
雙邊濾波點云去噪算法
針對三維點云數據模型在去噪光順中存在不同尺度噪聲的問題,提出一種基于噪聲分類的雙邊濾波點云去噪算法。該算法首先將噪聲細分為大尺度和小尺度噪聲
發表于 01-05 10:51
?2次下載
基于python的小波閾值去噪算法
,一般不作處理,只對剩余三個高通部分進行處理。一次閾值去噪并不能完全去除噪聲,還需要對未作處理的低頻部分(LL)再次進行小波分解和閾值
發表于 01-10 16:32
?1.1w次閱讀
基于多通道聯合估計的非局部均值彩色圖像去噪方法
提出一種基于多通道聯合估計的非局部均值彩色圖像去噪方法,包括彩色通道聯合去噪和彩色通道融合去噪兩個步驟:在彩色通道聯合
發表于 02-27 16:02
?2次下載
如何使用PDE實現線條痕跡圖像去噪算法的設計
由于金屬表面的銹蝕,使得線條痕跡圖像易受噪聲影響,造成圖像特征提取、比對和分析困難等問題。常用的去噪方法如高斯濾波易破壞邊緣特征,形成邊緣偏
發表于 09-02 17:50
?11次下載
基于波域調和濾波擴散模型的圖像去噪算法
針對當前圖像去噪算法缺乏對整體結構的分析以及運算量過大的不足,提岀了一種利用波域調和濾波擴散模型改進BM3D去噪技術的新算法。首先,利用傳統
發表于 05-18 15:39
?4次下載
圖像處理技術之濾波去噪
評論