文章目錄
- 0.前言
- 1.什么是模糊?
- 2.均值模糊
- 1.原理
- 2.API
- 3.案例
- 2.中值模糊
- 1.原理
- 2.API
- 3.作用
- 3.水了,就這樣~
0.前言
影像模糊,原理上利用了數學上的卷積,雖然但是,我覺得就我學到的四個模糊方式,暫且不需要用卷積來解釋,但是也是可以先去了解一下用卷積來解釋的模糊處理,多學點東西準沒壞處吖,(其實我也沒完全弄懂這玩意,而且一起寫起來可能會很冗長,等我慢慢搞明白再水寫一篇吧)
但是說起模糊處理,我們先來理解啥是模糊吧,
1.什么是模糊?
模糊,我覺得近視特別是像我這種有高度近視的同學應該很熟悉,當你摘下眼鏡之后,你會覺得世界都變成了一片,此時我們無法察覺物體的各個細節以及不同物體之間的邊界,或者沒有近視的同學,可以用自己手機拍一張失焦的照片,也可以參考下面這個圖

那么反應在計算機里面,什么是模糊呢?
我們知道圖片是由像素構成的,也就是像素的多少和像素值來取決于圖片呈現給我們觀感,
我們在不改變像素的多少的前提下,通過知道相鄰的像素值相差的更多的時候,我們便會覺得這個圖片顯示的更為分明,也就是說,
如果把相鄰的像素點的值變得更為相近,那么是不是我們就會對應的丟失更多細節和邊緣?也就會達到了模糊的效果,
然后我們看opencv提供的幾種模糊的實作
2.均值模糊
1.原理
假設我們現在有一個圖片是6*6的像素,然后我們把每一個點的像素值改為他周圍的像素值和他本身的像素值的均值,最后的出來的便是經過均值模糊生成的圖片,而我們確定的每一次處理的大小便是一個3*3的像素矩陣,

用矩陣來表示:

其實最后均值模糊的意思就是:
你先確定一個size(像素矩陣的大小),然后把影像的每一個像素都按照這個size去取自己和周圍像素的均值然后賦給自己,size越大,也就是越大范圍內的像素點的值都會更加相似,也就是說影像更加的模糊,(當然函式決定也可以不賦給自己)
ps:在均值濾波中所乘的全為1的矩陣如果用卷積來理解,便被稱為卷積核,只是這個矩陣倒過來后仍然為原矩陣,高斯濾波所乘的高斯函式倒過來其實應該也是他自己,所有沒用用卷積來解釋,反而感徑訓更加迷茫,不明白為什么模糊一定要用到卷積,
我覺得更好的說法是,模糊可以用卷積去解釋,而影像處理其他很多也可以用卷積去解釋
2.API
blur(Mat src, Mat dst, Size(xradius, yradius), Point(-1,-1));
src是你要處理的影像
dst是你處理完后的影像
Size()就是每一次處理的像素矩陣的大小
Point(-1,-1)就是默認將最后的平均值賦給中間像素
3.案例
這里通過滑軌調節size的大小你可以看一下這個效果(ps:size的x,y值不能拖到0!!!!)
int main(int argc, char** argv)
{
string path = "elment/xjj.jpg";
Mat img = imread(path);
Mat img2 = Mat::zeros(img.size(),img.type());
Size size(7, 7);
imshow("img", img);
int x = 1, y = 1;
namedWindow("Trackbars", (640, 200));//新建了一個視窗--軌跡欄
createTrackbar("x", "Trackbars", &x, 200);
createTrackbar("y", "Trackbars", &y, 200);
while (1)
{
size.height = x;
size.width = y;
GaussianBlur(img,img2,size,0,0);
imshow("img", img2);
waitKey(10);
}
return 0;
}
2.中值模糊
1.原理
如果你理解了均值函式的定義,那這個你可以直接從字面意思去理解
就是將size()的那個矩陣里面的所有像素的中值賦值給中間像素
2.API
medianBlur(Mat src, Mat dest, ksize)
注意一下ksize,這是一個int,也就是x和y要相等,并且ksize必須是奇數,
3.作用
可以用來消除椒鹽噪聲
椒鹽噪聲就是在影像上隨機出現黑色白色的像素,
參考:(1條訊息) 椒鹽噪聲_MingChao_Sun-CSDN博客_椒鹽噪聲
原理:因為椒鹽噪聲即黑色或者白色的像素點的值是很大的,所以他本身肯定不會是中值,然后被中值替代
3.水了,就這樣~
餓了,先去吃飯,之后再總結一下高斯模糊和雙邊模糊,,,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/395268.html
標籤:其他
