画像処理でよく使われる空間フィルタの比較

画像処理でよく使われる空間フィルタ(平滑化用、ノイズ除去用、輪郭・エッジ検出用など)の比較をしてみました。

空間フィルタリングとは

画像の各画素とその周囲の画素を利用して、画像を変換することを「空間フィルタリング」といい、その中で使用されるフィルタのことを「空間フィルタ」といいます。
空間フィルタは、主に画像からの輪郭抽出やノイズ除去に使用され、画像処理の分野においてとても重要な技術です。

そこで今回は、輪郭抽出やノイズ除去で使われる代表的な「空間フィルタ」をいくつか紹介します。

解説動画

平滑化フィルタ

画像処理では、平滑化フィルタは主にノイズ除去に利用されます。ノイズのある画像をそのまま使用すると、輪郭検出や特徴抽出といった後続の処理結果の精度が悪くなります。そのため、前処理として平滑化フィルタを適用して、ノイズの影響を軽減することが重要となります。

■平滑化処理なし(左)と平滑化処理あり(右)
→
※上写真より、平滑化処理を掛けることでゴマ塩状の細かいノイズが消えていることがわかります

以下は、画像処理でよく用いられる平滑化フィルタを比較した表です。

フィルタ ノイズ除去能力 計算量 備考
平均値フィルタ 低 低 平均値を使用してノイズ除去
メディアンフィルタ 高 中 ゴマ塩状のノイズ除去に強い
ガウシアンフィルタ 中 中 ガウス分布を使用し、自然にノイズ除去
バイラテラルフィルタ 高 高 、「空間的な距離」と「画素値の差」の両方に基づいて重み付けを行い、輪郭を保持しながらノイズ除去
非局所的平均フィルタ 高 高 各画素に対して類似する画素の重み付き平均を計算して輪郭を保持しながらノイズ除去
Wienerフィルタ 中 中 ノイズ推定に基いてノイズ除去
Waveletフィルタ 高 高 ウェーブレット変換に基づてノイズ除去

平滑化フィルタの種類毎の特性を理解し、目的に応じて適切に選択・使用することで、後続の処理がより効果的に行えるようになります。

輪郭検出用フィルタ

輪郭(エッジ)は画像内にある物体の形状や構造に関する重要な情報を含んでおり、物体認識や画像解析の基礎となります。

■入力画像(左)と輪郭画像(右)
→

以下は、画像処理でよく用いられる輪郭検出用のフィルタを比較した表です。

フィルタ 微分 横方向 縦方向 斜め方向 計算量 備考
一次微分フィルタ 1次微分 ○ ○ △ 低
Prewittフィルタ 1次微分 ○ ○ △ 低 ノイズの影響を抑えながら輪郭検出
Sobelフィルタ 1次微分 ◎ ◎ ○ 中 自然にノイズの影響を抑えながら輪郭検出
ロバーツフィルタ 1次微分 △ △ ○ 低 斜め方向の輪郭検出
Laplacianフィルタ 2次微分 △ △ △ 中 方向に依存しない
LoGフィルタ 2次微分 △ △ △ 高 ラプラシアンフィルタの欠点(ノイズに弱い)をガウシアンフィルタで克服
DoGフィルタ 1次微分 △ △ △ 中 2つの異なるガウシアンフィルタの差で輪郭検出。LoGより高速。
DoMフィルタ 1次微分 △ △ △ 中 2つの異なるメディアンフィルタの差で輪郭検出。
エンボスフィルタ 1次微分 △ △ ○ 低 輪郭の立体感を強調
Cannyアルゴリズム 多段階 ◎ ◎ ◎ 高 高精度な輪郭検出

◎○△は検出する輪郭の強度を表します。強いほど輪郭をよく強調する反面、ノイズの影響を受けやすいです。これらのフィルタを目的に応じて適切に選択し使用することで、画像解析や物体認識の精度を高めることができます。

関連ページ

プログラミングによる実装例について以下ページで解説しています。

PythonとOpenCVで画像処理プログラミング超入門
Python版OpenCVで画像処理プログラミングを行う方法を入門者向けにソースコード付きで解説するページです。
【画像処理超入門】アルゴリズムの仕組みと実装方法を簡単に解説
画像処理超アルゴリズムの仕組みとプログラミングによる実装方法を簡単に解説します。
記事の監修者
西住技研

在学中はシステム制御理論や画像処理、機械学習を専攻分野として研究していました。就職後は、プログラミング(Python)を活用したデータ分析や作業自動化に取り組み、現在に至ります。そこで得たノウハウをブログで発信しています。
⇓YoutubeやX(旧Twitter)でも情報発信中です

西住技研をフォローする
画像処理

コメント