在圖像處理領(lǐng)域中,在真正的應(yīng)用過程前,通常需要對(duì)圖像進(jìn)行預(yù)先處理,達(dá)到去除干擾項(xiàng)的目的。濾波去噪就是其中的一項(xiàng)圖像預(yù)處理工作。
在.NET下常用OpenCV進(jìn)行圖像處理工作,常用的.NET下的OpenCV庫(kù)有Emgu CV和OpenCVSharp。
** EmguCV**是.NET平臺(tái)下對(duì)OpenCV圖像處理庫(kù)的封裝,也就是.NET版的OpenCV。由于OpenCV是用C和C++編寫的,Emgu用C#對(duì)其進(jìn)行封裝,允許用.Net語言來調(diào)用OpenCV函數(shù),如C#、VB、VC++等。
OpenCvSharp ^ ^是一個(gè)OpenCV的.Net wrapper,應(yīng)用最新的OpenCV庫(kù)開發(fā),使用習(xí)慣比EmguCV更接近原始的OpenCV,有詳細(xì)的使用樣例供參考。。使用OpenCvSharp,可用C#,VB.NET等語言實(shí)現(xiàn)多種流行的圖像處理(image processing)與計(jì)算機(jī)視覺(computer vision)算法。
一、 中值濾波
Image image = Image.FromFile("xx.jpg");
Imagebyte> img = new Imagebyte>((Bitmap)image);//實(shí)例化一個(gè)三通道的OPENCV的圖像對(duì)象
Int k=3;//濾波核,奇數(shù)
img =img.SmoothMedian(k);//按照指定的濾波核進(jìn)行中值濾波
Bitmap bitmap= img.Bitmap;//輸出Bitmap格式的結(jié)果
二、 高斯濾波
Image image = Image.FromFile("xx.jpg");
Imagebyte> img = new Imagebyte>((Bitmap)image);//實(shí)例化一個(gè)三通道的OPENCV的圖像對(duì)象
Int k=3;//濾波核,奇數(shù)
img = img. SmoothGaussian (k);//按照指定的濾波核進(jìn)行高斯濾波
Bitmap bitmap= img.Bitmap;//輸出Bitmap格式的結(jié)果
三、 均值濾波
Image image = Image.FromFile("xx.jpg");
Imagebyte> img = new Imagebyte>((Bitmap)image);//實(shí)例化一個(gè)三通道的OPENCV的圖像對(duì)象
Int k=3;//濾波核,奇數(shù)
img = img. SmoothBlur (k,k);//按照指定的濾波核進(jìn)行均值濾波
Bitmap bitmap= img.Bitmap;//輸出Bitmap格式的結(jié)果
四、 方框?yàn)V波
Image image = Image.FromFile("xx.jpg");
Imagebyte> img = new Imagebyte>((Bitmap)image);//實(shí)例化一個(gè)三通道的OPENCV的圖像對(duì)象
Int k=3;//濾波核,奇數(shù)
CvInvoke.BoxFilter(img, img, DepthType.Default, new Size(k, k), new Point(-1, -1));//按照指定的濾波核進(jìn)行方框?yàn)V波
Bitmap bitmap= img.Bitmap;//輸出Bitmap格式的結(jié)果
五、 雙邊濾波
Image image = Image.FromFile("xx.jpg");
Imagebyte> img = new Imagebyte>((Bitmap)image);//實(shí)例化一個(gè)三通道的OPENCV的圖像對(duì)象
Int k=3;//濾波核,奇數(shù)
CvInvoke.EdgePreservingFilter(img, img, EdgePreservingFilterFlag.NormconvFilter, k, 0.4f);;//按照指定的濾波核進(jìn)行雙邊濾波
Bitmap bitmap= img.Bitmap;//輸出Bitmap格式的結(jié)果
六、 非局部去噪
CvInvoke.FastNlMeansDenoising(img, img);
七、 彩色模糊
色彩聚類平滑濾波 用于區(qū)域分割
CvInvoke.PyrMeanShiftFiltering(img, img,5, 5, 2, newMCvTermCriteria(2));
八、 離散余弦變換DCT濾波
///
///離散余弦變換(Dct)濾波
///
/// 圖像加載到opencv的mat數(shù)據(jù)格式
///
public static Mat Dct(Mat mat)
{
if (mat.NumberOfChannels < 3)//單通道圖像,即二值化圖或者灰度圖
{
if (mat.Size.Height % 2 != 0)//圖像長(zhǎng)寬需要為偶數(shù),如果不是則進(jìn)行擴(kuò)邊處理
{
CvInvoke.CopyMakeBorder(mat, mat, 0, 1, 0, 0, BorderType.Constant);
}
if (mat.Size.Width % 2 != 0) //圖像長(zhǎng)寬需要為偶數(shù),如果不是則進(jìn)行擴(kuò)邊處理
{
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();//三通道圖像,需要拆分三個(gè)獨(dú)立的單通道進(jìn)行處理,
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;
}
}
九、 閾值濾波
思路:
- 圖像轉(zhuǎn)成灰度
- 計(jì)算灰度平均值
- 以灰度平均值作為臨界點(diǎn)進(jìn)行二值化處理
- 輪廓檢測(cè)
- 遍歷所有的輪廓,得到每個(gè)輪廓的矩形范圍(一般就是每個(gè)噪聲點(diǎn)的范圍)
- 判斷每個(gè)矩形的長(zhǎng)寬是否小于給定值,并用白色在原來的圖像上進(jìn)行填充,即把認(rèn)為是噪點(diǎn)的范圍用白色顏色填充
- 返回處理后的圖像
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;
-
圖像處理
+關(guān)注
關(guān)注
27文章
1275瀏覽量
56577 -
net
+關(guān)注
關(guān)注
0文章
125瀏覽量
56117 -
OpenCV
+關(guān)注
關(guān)注
29文章
625瀏覽量
41215
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論