Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

ノイズ除去

ノイズ除去(noise removal / denoising) は、画像に混入した不要な変動成分(ノイズ)を取り除き、元の信号をできるだけ忠実に復元する処理のこと。

カメラのセンサーの熱雑音、低照度環境での量子ノイズ、伝送路でのビット誤りなど、様々な原因でノイズが発生する。ノイズ除去は画像処理パイプラインの前処理として広く使われており、後続の特徴抽出・認識精度に大きく影響する。

本節では代表的なノイズの種類と、それぞれに対して有効なフィルタリング手法を学ぶ。

評価指標:PSNR

ノイズ除去の効果を定量的に評価するために PSNR(Peak Signal-to-Noise Ratio、最大信号対雑音比) を使う。

1. ノイズの種類

ガウシアンノイズ(Gaussian Noise)

最も一般的なノイズモデル。各ピクセルに平均 0・標準偏差 σ\sigma の正規分布に従う乱数が加算される。

カメラの熱雑音・アンプのランダムノイズなどを模している。σ\sigma が大きいほどノイズが強くなる。

ソルト&ペッパーノイズ(Salt & Pepper Noise)

画像のランダムな位置に、真っ白(255)または真っ黒(0)の画素が散在するノイズ。インパルスノイズとも呼ばれる。センサーの欠陥や伝送エラーで発生する。

スペックルノイズ(Speckle Noise)

超音波画像やレーダー画像に特有のノイズ。画素値に乗算的に加わる。

<Figure size 1800x400 with 4 Axes>

2. 線形フィルタ

線形フィルタ は、注目画素とその周辺画素の線形結合(重み付き平均)で出力値を計算するフィルタ。演算が単純で高速だが、エッジもぼかしてしまう欠点がある。

平均フィルタ(Box / Mean Filter)

カーネル内の全画素の 単純平均 を取る最もシンプルなフィルタ。

# 平均フィルタ:カーネルサイズの比較
kernel_sizes = [3, 5, 9]

blurred_mean = {k: cv2.blur(noisy_gaussian, (k, k)) for k in kernel_sizes}

fig, axes = plt.subplots(1, 4, figsize=(18, 4))

axes[0].imshow(noisy_gaussian)
axes[0].set_title(f"ガウシアンノイズ\nPSNR={psnr(img, noisy_gaussian):.1f} dB", fontsize=11)
axes[0].axis('off')

for ax, k in zip(axes[1:], kernel_sizes):
    result = blurred_mean[k]
    ax.imshow(result)
    ax.set_title(f"平均フィルタ ({k}×{k})\nPSNR={psnr(img, result):.1f} dB", fontsize=11)
    ax.axis('off')

fig.suptitle("平均フィルタ:カーネルサイズの影響", fontsize=14, fontweight='bold')
plt.tight_layout()
plt.show()
<Figure size 1800x400 with 4 Axes>

ガウシアンフィルタ(Gaussian Filter)

カーネルの重みを ガウス関数(正規分布) に従って設定したフィルタ。中心画素に大きな重みを置き、周辺になるほど重みが小さくなる。単純平均より自然なぼかしが得られる。

<Figure size 1800x400 with 4 Axes>
<Figure size 1400x400 with 3 Axes>

3. 非線形フィルタ

非線形フィルタ は、近傍画素の統計量(中央値など)や画素値の類似度に基づいて出力を決めるフィルタ。計算コストは高いが、エッジを保ちながらノイズを除去できるものが多い。

メディアンフィルタ(Median Filter)

カーネル内の全画素を並べ替えて 中央値(メジアン) を出力する。外れ値(極端に白・黒なピクセル)を自動的に排除するため、ソルト&ペッパーノイズに対して特に強い。

<Figure size 1800x400 with 4 Axes>
<Figure size 1800x400 with 4 Axes>

バイラテラルフィルタ(Bilateral Filter)

ガウシアンフィルタの弱点である「エッジのぼけ」を解消するために開発されたフィルタ。空間的な近さだけでなく、画素値の類似度 も重みに組み込む。

<Figure size 1400x400 with 3 Axes>
<Figure size 1800x400 with 4 Axes>

Non-Local Means(NLM)

「画像内の類似したパッチ(局所領域)は同じ信号から生成されている」という仮定に基づく手法。注目画素の近傍だけでなく、画像全体から類似パッチを探して 重み付き平均を取る。

<Figure size 1400x400 with 3 Axes>

まとめ:全手法の比較

各ノイズに対してすべてのフィルタを適用し、PSNR で定量比較する。

<Figure size 1600x1000 with 6 Axes>
<Figure size 1600x1000 with 6 Axes>
<Figure size 1200x500 with 1 Axes>

各手法のまとめ

手法計算コストエッジ保持ガウシアンS&P特徴
平均フィルタ弱い最もシンプル
ガウシアンフィルタ弱い自然なぼかし
メディアンフィルタ中程度S&P に最強
バイラテラルフィルタ強いエッジを保ちながら平滑化
Non-Local Means非常に高強い最高品質(遅い)