在OpenCV裡實現均值平滑2

2021-09-27 03:55:19 字數 560 閱讀 5505

通過均值可以實現平滑的效果,不過這樣採用卷積的方式來計算還是不夠快,即使是使用了分離的卷積計算。由於均值的特殊性,可以針對這種卷積計算進行優化。我們知道計算均值就是把所有元素加到一起,然後再除以個數。由於影象很大,而卷積運算元很小,那麼就相當於乙個視窗不斷地滑動在影象上,並且計算這個視窗的和,那麼有沒有方法讓這個計算的和快速一些。我們知道卷積計算是由乘法再求和,要快速就得把乘法替換掉,那麼要怎麼樣才替換掉呢?這裡就得引入乙個技巧性的計算方法—積分影象(integral image)。影象是由一系列的離散畫素點組成, 因此影象的積分其實就是求和. 影象積分圖中每個點的值是原影象中該點左上角的所有畫素值之和。首先建立乙個陣列 a 作為積分影象,其寬高與原影象相等。 然後對這個陣列賦值,每個點儲存的是該點與影象原點所構成的矩形中所有畫素的和。如下圖來說明計算:

在這裡左邊是輸入影象,右邊是積分影象。為了計算方便,一般積分影象需要在原圖的大小上面和左邊補充一行0的元素,這樣採用公式計算就方便。在原圖裡(1,1)的位置是1,在積分影象裡,就變成(

在OpenCV裡實現均值平滑5

從前面來看已經可以把積分影象的功能整合到opencv裡,那麼在它裡面也有相應的均值平滑的函式cv2.blur,這個函式實現的功能與前面實現快速計算平滑的方法是一樣的,只不過它可以處理彩色影象,因為它可以把彩色進行分離成三個顏色的影象進行平滑,再合併回來。它的定義如下 src 輸入影象 dst 輸出影...

在OpenCV裡實現高斯平滑1

在前面複習了卷積的運算,以及使用python裡的函式進行計算卷積,理解到卷積的過程,其實在影象裡就是其中一點畫素值可以與它周圍的畫素值進行加權求和,這就意味著輸出的畫素值是作為平均計算,因此該點的畫素值由這點和這點周圍的畫素來決定了。理論上怎麼樣推導,怎麼樣計算,可以先放下來,首要的問題是先來感覺一...

在OpenCV裡實現高斯平滑4

上面通過 構造了高斯運算元,並且使用二維的卷積運算來平滑影象,也達到了目標,不過還有乙個問題,就是當你處理比較大的,或者比較大的高斯矩陣時,就會發現計算的時間很長。這時候我們就要考慮有沒有高效快速的演算法了,再回過頭來審視一下二維高斯函式 可以看到最後的等式,再考慮指數的運算法則 根據 1 指數運算...