pythonで二次元ガウス分布を得る
結論
インパルス画像にガウシアンフィルタを適用させることで得られる
まえがき
中央に重み付けして加算したい*1ことがあったので, 二次元ガウス分布が欲しかったのですが, ライブラリにはなさそうだし式から起こすのも面倒なのでいい方法を探しました.
そこで, 簡単に得る方法を見つけたのでまとめておきます.
コード
import scipy.ndimage.filters as fi import numpy as np def gkern(kernlen=21, nsig=3): # kernlen x kernlen のゼロ行列を作成 inp = np.zeros((kernlen, kernlen)) # 中央の要素を1にする inp[kernlen // 2, kernlen // 2] = 1 # ガウシアンフィルタを適用し, 結果を返す return fi.gaussian_filter(inp, nsig)
解説
kernlenは得られるガウス分布のサイズ, nsigはガウス分布の広がりです. 大きい方がよりとんがってない分布になります. 1のときにいわゆる標準正規分布となります.
ためしてないですが, 中央の要素ではなく好きな場所を指定すればカーネルがずれてくれると思います
*1:普通にガウシアンフィルタを適用して総和を取れば良いことにあとから気づきました