1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

矩形とガウスの平滑化をどこで一致させるか?:分散で揃えるフィルタ比較

1
Last updated at Posted at 2025-12-06

はじめに

画像処理や信号処理では、

  • 有限範囲で一定の重みを持つ 矩形(box)フィルタ
  • 無限に広がり、中心から滑らかに減衰する ガウス(Gaussian)フィルタ

を利用する場面が多くあります。本来、周波数特性まで考えるとガウスの方が望ましい状況も多いのですが、計算コストや実装の簡便さから、矩形で近似して扱いたいことがあります。

そのとき問題になるのが次の問いです。

矩形とガウスを「同じ平滑化」とみなしたいとき、どの尺度を揃えるべきか?

本記事では、この点について整理し、代表的な考え方である 分散(variance)を揃える方法 を中心に扱います。


実装コードは Google Colab こちら からも閲覧できます。

1. 同じ平滑化強度として扱うために

平滑化フィルタを比較する際、最初に揃えておくべきなのは 総量(積分値) です。
総量を一致させることで、フィルタによる明るさの変化が起きず、あくまで平滑化のみが行われます。矩形でもガウスでも、面積を同じにすることでこの条件が満たされます。

次に揃えたいのが「平滑化の強さ」です。
しかし、幅をそのまま比較するだけでは意味がありません。

  • 矩形は端まで同じ重み
  • ガウスは端ほど軽い重み

つまり、同じ幅でも平滑化の度合いは異なります
そこで、どの程度の範囲に重みが広がっているかを測る指標として、分散(variance) が有用になります。
分散が大きいほど、広い範囲を平均する(強い平滑化)と解釈できます。

2. 分散一致によるスケール合わせ

区間 $[-a,a]$ に一様分布する矩形フィルタの分散は、

\mathrm{Var}_\mathrm{uniform} = \frac{a^2}{3}

標準偏差 $\sigma$ のガウス分布の分散は、

\mathrm{Var}_\mathrm{gauss} = \sigma^2

これらを一致させると、

\sigma = \frac{a}{\sqrt{3}}

となります。
つまり、幅 $2a$ の矩形フィルタは、標準偏差 $\sigma = a/\sqrt{3}$ のガウスと同程度の平滑化の強さを持つと考えることができます。
ここで揃えているのは形ではなく、平均する“範囲”の大きさです。

3. 実空間での比較

以下に、分散一致($\sigma=a/\sqrt{3}$)による比較図を示します。

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm

a = 1.0
sigma = a / np.sqrt(3)

x = np.linspace(-2*a, 2*a, 400)

uniform_pdf = np.where(np.abs(x) <= a, 1/(2*a), 0)
gauss_pdf = norm.pdf(x, 0, sigma)

plt.figure(figsize=(6,4))
plt.plot(x, uniform_pdf, label="Uniform [-a,a]")
plt.plot(x, gauss_pdf, label=f"Gaussian (σ={sigma:.3f})")
plt.title("Uniform vs Gaussian (same variance)")
plt.xlabel("x")
plt.ylabel("Density")
plt.legend()
plt.grid(alpha=0.4)
plt.show()

image.png

中央付近は類似している一方で、端の振る舞いは大きく異なります。
分散一致は、平滑化のスケールを揃えているのであって、形状そのものを揃えるわけではありません。

4. 周波数空間での違い

実空間での違いは、フーリエ空間ではさらに明確になります。
矩形は端が不連続であり、そのフーリエ変換は sinc 型となり、サイドローブによるリンギングが生じます。
一方、ガウスは無限に滑らかであり、フーリエ変換も単調減衰し、サイドローブを持ちません。

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm

x = np.linspace(-10, 10, 200)
a = 1.0
sigma = a / np.sqrt(3)

uniform_pdf = np.where(np.abs(x) <= a, 1/(2*a), 0)
gauss_pdf = norm.pdf(x, 0, sigma)

f_uniform = np.fft.fftshift(np.abs(np.fft.fft(uniform_pdf)))
f_gauss = np.fft.fftshift(np.abs(np.fft.fft(gauss_pdf)))

plt.figure(figsize=(6, 4))
plt.plot(f_uniform, label="Uniform")
plt.plot(f_gauss, label="Gaussian")
plt.title("Fourier amplitude")
plt.xlabel("frequency index")
plt.ylabel("Amplitude")
plt.legend()
plt.grid(alpha=0.4)
plt.show()

image.png
(内側ほど低周波数)

分布 実空間の特徴 周波数空間の特徴
矩形 端が不連続 サイドローブ発生(リンギング)
ガウス 滑らか 単調減衰、サイドローブなし

分散を揃えても、周波数特性は一致しません。
平滑化の強さは近似できても、周波数挙動は根本的に異なることがわかります。

5. 多次元における拡張

$n$ 次元の半径 $R$ の球内に一様分布する場合、軸方向分散は

\mathrm{Var}(x_i) = \frac{R^2}{n + 2}

これと対等なガウス分布は、

\sigma = \frac{R}{\sqrt{n + 2}}

となります。

次元 一様分布の分散 対応ガウスの標準偏差
1 $R^2/3$ $R/\sqrt{3}$
2 $R^2/4$ $R/2$
3 $R^2/5$ $R/\sqrt{5}$

次元が増えるほど、同じ半径でも「揺らぎは小さく見える」ことが確認できます。

6. 実務における選択

目的 選択
高速に大まかに平滑化したい 矩形(box)、分散一致を用いてスケール調整
リンギングを抑えたい、高周波特性を制御したい ガウス

分散一致は、形状を揃える方法ではなく、平滑化の強さを揃えるための近似と考えると理解しやすいでしょう。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?