濾波【線性;非線性】 - [含義:不能損壞圖像的輪廓以邊緣等重要信息;使圖像清晰視覺效果好]
測試原始矩陣.png
平滑濾波: 功能:一類是模糊;另一類是消除噪音
平滑分兩種:
·線性濾波 :高斯噪音處理比較好,噪音的值不是很大【如果處理散粒噪音只是讓它變得柔和】
·非線性濾波 :散粒噪音處理比較好,噪音值很大,很孤立
- 方框濾波:BoxBlur
方框濾波非歸一化.png
前后對比.png
結論:像素點變大,意味著圖像模糊了
- 均值濾波:Blur
其實是方框濾波的歸一化處理【歸一化例子:歸一化為20x80像素的圖像,即經切割后的特征塊圖像若尺寸不為20x80像素,就把它們統一歸一化為 20x80像素】
均值.png
前后對比.png
缺點演示.png
結論:模糊效果比較好,原理是局部求均值起到模糊。缺點:如果局部有高頻噪音,就會對局部像素影響較大;如上帶雪花的圖像
- 高斯濾波:GaussianBlur
和前兩種算法的區別;通過一個掩膜mask遍歷圖像中每個像素進行卷積然后替代它
高斯.png
前后對比.png
結論:相對于前兩中平滑,高斯平滑更能保留細節,處理后的像素值更加接近原像素
- 中值濾波:medianBlur
含義:用領域的中值取替代遍歷到的像素
中值.png
前后效果.png
結論:避開了大量的散粒噪音
- 雙邊濾波:bilateralFilter
/*
參三:像素領域的直徑
參四:在像素領域中,這個值越大混合的顏色就越寬廣
參五:數值越大意味著越遠的像素會互相影響
*/
bilateralFilter(srcImg, g_sourceImg, 20, 70, 10);
左上是原圖-右上是中值濾波-下圖是雙邊濾波.png
結論:雙邊濾波在去除散粒噪音的同時還能保留邊緣細節信息。而這個時候我們的中值濾波的效果則還帶模糊。
形態學濾波【平滑作用;且不改變面積】 腐蝕-erode;膨脹-dilate;開閉運算;頂帽;黑帽;形態學梯度
含義介紹
- 腐蝕:突出圖像暗的區域;侵蝕亮的區域
- 膨脹:突出圖像亮的區域;侵蝕暗的區域
- 開運算:先腐蝕后膨脹;將原圖小型亮處的部分排除
- 閉運算:先膨脹后腐蝕;將原圖小型暗處部分排除
- 頂帽:原圖像矩陣減去開運算,得到輪廓邊緣更亮細節
- 黑帽:閉運算減去原圖像矩陣,得到輪廓邊緣更暗細節(為什么不是閉-原;因為越暗的像素值越小,越亮的像素值越大)
- 形態學梯度:膨脹圖減去腐蝕圖的差:突出邊緣輪廓
- 形態學濾波使用
morphologyEx
函數,傳入不同的枚舉值來執行以上6種算法
- 形態學濾波使用
/** morphologyEx 枚舉值
-MORPH_ERODE 腐蝕
-MORPH_DILATE 膨脹
-MORPH_OPEN 開運算
-MORPH_CLOSE 閉運算
-MORPH_GRADIENT 形態學梯度
-MORPH_TOPHAT 頂帽
-MORPH_BLACKHAT 黑帽
*/
int w_h = 3;//傳進來的數 先轉成int整型變量
/**
參二:內核尺寸
參三:錨點 默認是 (-1,-1),為中心
*/
Mat element = getStructuringElement(MORPH_RECT, cv::Size(w_h * 2 +1,w_h *2 +1),cv::Point(w_h,w_h));
morphologyEx(g_sourceImg, dstImg, type, element);
腐蝕-膨脹-閉運算-開運算-頂帽-黑帽-形態學梯度 效果.png
漫水填充floodFill 含義:用特定的顏色填充連通區域,效果和photoshop魔術棒類似;用處:用來標記或分離圖像的一部分;用來制作掩膜
注意:漫水填充設置的g_maskImage必須是比原圖的size大出2,也只能是2,cv::size(g_sourceImg.rows + 2, g_sourceImg.cols + 2)
//g_maskImage 掩膜
g_maskImage.create(g_sourceImg.rows + 2, g_sourceImg.cols + 2, CV_8UC1);
g_maskImage = Scalar::all(0);
cv::Rect ccomp;//定義重繪制區域的最小邊界矩形區域
//閾值處理
threshold(g_maskImage, g_maskImage, 1, 128, THRESH_BINARY);
/*漫水填充
參二:掩膜
參三:seek選擇點,也就是鼠標點擊觸碰要填充的點
參四:newVal 填充的顏色
參五:cv::Rect**類型 ,重繪區域的最小邊界矩形
參六:和觀察點顏色負差最大值
參七:和觀察點顏色正差最大值
*/
floodFill(dst, g_maskImage, seed, newVal,&ccomp,Scalar(LowDifference,LowDifference,LowDifference),Scalar(UpDifference,UpDifference,UpDifference));
漫水填充效果
圖像金字塔reSize 含義:對圖像大小進行調整
- 兩種大小變換方式
resize(g_sourceImg, g_dstImg, cv::Size(),size.width,size.height,INTER_LINEAR); // 按照比例縮放
resize(g_sourceImg, g_dstImg, g_dstImg.size(),INTER_LINEAR);//按照固定cv::size縮放
閾值化:threshold 概念:THRESH_BINARY模式 設定閾值大于遍歷的像素時設置255,小于閾值設置為0;用處:常常作為掩膜
注意:輸入的原圖需要是單通道,深度為8或32位