一、引言
上篇文章涉及的卷積操作針對的是均值卷積,即卷積核的每個系數都是相同的,但有時候我們并不希望每個系數相同,如果想這樣,那么我們應該怎么產生這些系數,系數的產生也不是手動的而是隨機的,這樣就涉及到了高斯模糊(產生高斯卷積核)
高斯模糊考慮了中心像素距離的影響,對距離中心像素使用高斯分布公式生成不同的權重系數給卷積核,然后用此卷積核完成影像卷積得到輸出結果就是影像高斯模糊之后的輸出
高斯卷積數學運算式說明:

均值與高斯的不同:最主要就是卷積核的系數不一樣,高斯的中心的數值最大(上圖中0.159),考慮到了中心像素對輸出的貢獻,離中心距離越遠,數值越小
利用高斯核函式產生的卷積核如下圖,越靠近中心(紅色部分),系數越大,

二、函式原型
c++原型:
引數:
- src 輸入影像; 它可以有任意數量的通道,這些通道是獨立處理的,但深度應該是CV_8U,CV_16U,CV_16S,CV_32F或CV_64F
- dst 輸出與src相同大小和型別的影像
- ksize 卷積核(高斯濾波器視窗大小)
- sigmaX X方向濾波系數
- sigmaY Y方向濾波系數
- borderType 影像邊緣處理方式
注:默認情況下,sigmaX = sigmaY,上面提到的高斯函式公式就是默認sigmaX = sigmaY,所以可以提取出 x的平方+y的平方
三、實作效果
1、未指定視窗大小(卷積核0x0 sigma=15 ):

2、卷積核5x5

四、代碼
void test1::gaussian_blur_demo(Mat &image)
{
Mat dst;
GaussianBlur(image,dst,Size(0,0),15);
imshow("gaussian_blur_image", dst);
}
1、卷積最重要的并不是輸入影像本身,而是你會產生不同的卷積核,并產生不同的輸出效果
2、代碼中Size(0,0),并不是視窗為0x0 ,而是會從sigma來反算視窗的大小,當我們指定了視窗大小,那么sigma就不會起作用,會從視窗大小來計算sigma,這也就是視窗大小與sigma之間的關系,Size、sigma這兩個的值都是越大越模糊,sigma的影響更明顯
拓展:
什么是卷積神經網路:就是我也不知道那個卷積核是什么東西,讓機器去學,學一堆卷積核出來,挑出好的使用
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/423559.html
標籤:AI
下一篇:從零實作一個簡單卷積神經網路


