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]
とする必要がある.画像形式ならcv2やskimageが楽.逆に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]