scipyのガウシアンフィルタについて


scipy.ndimage.gaussian_filter [reference]

usage.py
from scipy.ndimage import gaussian_filter
blur_array = gaussian_filter(input, sigma)

v1.5.4時点で引数はこんな感じ.

引数 説明 デフォルト
input array形式ならOK. 必須
sigma ガウス分布の標準偏差,ぼかし具合.軸ごとに設定可能.
(例) 3Dならsigma=[3,6,9]
必須
order 微分階数,1以上ならフィルタをorder次微分.軸ごとに設定可能. 0
output 出力のデータ形式. 入力と同じ
mode フィルタを端で適用するときの挙動,後述.
(種類) ‘reflect’‘constant’‘nearest’‘mirror’‘wrap’
‘reflect’
cval 入力配列外の値.mode=‘constant’のとき適用. 0.0
truncate フィルタの適用範囲.フィルタ半径=int(sigma*truncate+0.5) 4.0

※ カラー画像(HEGHT, WIDTH, 3)を入力すると,3番目の軸(カラーチャネル方向)でも平滑化されるのでsigma=[n,n,0] とする必要がある.画像形式ならcv2skimageが楽.逆にscipyは何次元のテンソルでも適用可能なのがメリット(?)

sigmaについて

・スカラー値だと全部の軸で同じ$\sigma$.
・シーケンス(要素数=入力次元)だと各軸ごとに$\sigma$指定

結果例

カラー画像
色も平滑化
カラー画像 グレースケール画像 X方向のみ平滑化 Y方向のみ平滑化

modeについて

・エッジ(配列の端)より外の値をどう処理するか.
・デフォルトは‘reflect’
・入力シーケンスをabcdとしたときの挙動を表に記載.

mode= 説明 配列外 左 入力配列 配列外 右
‘reflect’ エッジを軸に反射.(エッジも反射) d c b a a b c d d c b a
‘constant’ 定数cval,デフォルトは0 k k k k a b c d k k k k
‘nearest’ 最も近いエッジの値. a a a a a b c d d d d d
‘mirror’ エッジを軸に反射.(エッジは反射しない) d c b a b c d c b a
‘wrap’ 反対側のエッジに回り込む a b c d a b c d a b c d

truncateについて

・平滑化を行う範囲
・デフォルトは4
・コードを確認すると,おそらくフィルタ半径=int(sigma*truncate+0.5) [code]

結果例

truncateは4以上だとほとんど変わらないので,特にイジる必要はなさそう.