在OpenCV裡實現高斯平滑4

2021-09-27 01:44:07 字數 574 閱讀 7469

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

可以看到最後的等式,再考慮指數的運算法則:

根據(1)指數運算公式,反向使用它,就可以變換為兩個指數相乘,這樣就有意義了,表明高斯運算元是可以分離的,並且是可以先作一維的水平的卷積運算,再作一維的垂直的卷積運算,這樣的結果是一樣的。

下面先來**一下卷積計算可分離性,演示的例子如下:

#python 3.7.4,opencv4.1

#蔡軍生

#import cv2

import numpy as np

import matpl

在OpenCV裡實現高斯平滑1

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

在OpenCV裡實現高斯平滑5

基於可分離的高斯矩陣的卷積,並且計算量還少,那麼opencv也提供了相應的函式getgaussiankernel來計算高斯平滑,這個函式主要用來計算一維垂直方向的高斯卷積核,它的定義如下 retval cv.getgaussiankernel ksize,sigma ktype 其中引數ksize是...

在OpenCV裡實現高斯平滑6

前面可以看到使用分離的高斯卷積核來計算平滑更快,不過前面使用的卷積函式是採用scipy裡的,現在我們來採用opencv裡函式sepfilter2d來計算,它的定義如下 dst cv.sepfilter2d src,ddepth,kernelx,kernely dst anchor delta bor...