pythonはopencvに基づいてガウス平滑化を実現します。


一つの列数がWであると仮定して、行数がHのガウスロール計算子gaussKernelで、ここでW、Hは共に奇数で、点の位置をなぞって(H-1)/2、(W-1)/2)、ガウスの畳込み核を構築するステップは以下の通りである。
1.ガウス行列の計算

2.ガウス行列の和を計算する

3.ガウスマトリックスはその和、すなわち正規化で割る

以下はPythonを利用してガウス積演算子の構築を実現します。

def getGaussKernel(sigma, H, W):
  r, c = np.mgrid[0:H:1, 0:W:1]
  r -= (H - 1) / 2
  c -= (W - 1) / 2
  gaussMatrix = np.exp(-0.5 * (np.power(r) + np.power(c)) / math.pow(sigma, 2))
  #         
  sunGM = np.sum(gaussMatrix)
  #    
  gaussKernel = gaussMatrix / sunGM
  return gaussKernel
ガウス畳み込み核は一次元水平方向のガウス核と一次元垂直方向のガウス核に分離でき、OpenCVでは一次元垂直方向のガウス畳み核を構築する関数を与えた。
Mat get GaussianKernel(int ksize,double sigma,in ktype=CV/u64 F)
パラメータ
釈然とする
ksize
一次元の垂直方向のガウス核の行数は、正の奇数です。
シンプル
標準偏差
ktype
戻り値のデータタイプはCV_です。32 FまたはCV_64 F、デフォルトはCV_です64 F
次にPythonコードにより画像のガウス平滑化を具体的に実現します。まず画像の水平方向を畳込みしてから垂直方向を畳み込みます。ここでsigmaはガウス畳み込み核の標準偏差を表します。

def gaussBlur(image,sigma,H,W,_boundary = 'fill', _fillvalue = 0):
  #           
  gaussKenrnel_x = cv2.getGaussianKernel(sigma,W,cv2.CV_64F)
  #    
  gaussKenrnel_x = np.transpose(gaussKenrnel_x)
  #            
  gaussBlur_x = signal.convolve2d(image,gaussKenrnel_x,mode='same',boundary=_boundary,fillvalue=_fillvalue)
  #           
  gaussKenrnel_y = cv2.getGaussianKernel(sigma,H,cv2.CV_64F)
  #               
  gaussBlur_xy = signal.convolve2d(gaussBlur_x,gaussKenrnel_y,mode='same',boundary= _boundary,fillvalue=_fillvalue)
  return gaussBlur_xy
if __name__ == "__main__":
  image = cv2.imread("../images/timg.jpg", cv2.IMREAD_GRAYSCALE)
  cv2.imshow("image",image)
  #    
  blurImage = gaussBlur(image, 5, 400, 400, 'symm')
  # bIurImage       
  blurImage = np.round(blurImage)
  blurImage = blurImage.astype(np.uint8)
  cv2.imshow("GaussBlur", blurImage)
  cv2.waitKey(0)
  cv2.destroyAllWindows()
実行スクリーンショット:

以上はpythonがopencvに基づいてガウスの平滑化の詳しい内容を実現して、更にpythonガウスの平滑化に関しての資料は私達のその他の関連している文章に注意して下さい!