空間フィルタ処理
- 更新日2026-01-08
- 25分で読める
フィルタは、線形(コンボリューションとも呼ばれる)と非線形の2つのタイプに分類されます。
コンボリューションは、コンボリューションカーネルの係数によって加重された独自のピクセル値および近接ピクセルのピクセル値に基づいた値を再度計算するアルゴリズムです。この計算の合計はカーネルの成分の合計値で除算され、新規ピクセル値を取得します。コンボリューションカーネルのサイズには論理的に制限はなく、四角形または長方形(3 × 3、5 × 5、5 × 7、9 × 3、127 × 127など)のどちらかが可能です。
畳み込みは4つのファミリに分類されます。
- 傾斜
- ラプラシアン
- 平滑化
- ガウス
このグループ分けは、中央カーネルピクセルに対するピクセルの地理的な位置に応じて各ピクセルに割り当てられるコンボリューションカーネルの内容または重みによって決定されます。
Visionでは、各シリーズおよび通常のサイズ(3 × 3、5 × 5、7 × 7)用に標準コンボリューションカーネルのセットを特徴としています。また、自由な内容の独自のカーネルを作成することもできます。ユーザ定義のカーネルサイズは実質的に制限がありません。この機能を使用して、特定の特性を持つフィルタを作成することができます。
使用目的
空間フィルタは、特定の方向上のエッジの検出、パターンの輪郭描画、ノイズの除去、細部の輪郭描画または平滑化など、さまざまな目的に使用されます。フィルタは、必要な情報を抽出できるように、画像の平滑化、鮮鋭化、変形、ノイズ除去などを行います。
非線形フィルタは、輪郭を抽出(エッジ検出)または孤立したピクセルを削除します。NI Visionには、輪郭抽出(微分、傾斜、プレウィット、ロバーツ、シグマ、ソーベル)用に使用可能な6つの異なる方法が用意されています。Cannyエッジ検出フィルタは、画像のSN比が低い状態でもエッジを正確に検出するための特殊なエッジ検出法です。
ピクセル値を調整するには、N次フィルタ (NthOrder) またはローパスフィルタ (LowPass) のいずれかのフィルタを使用してください。これらの関数では、カーネルサイズおよび次数または比率(%)のどちらかを入力に指定する必要があります。
空間フィルタによって、照明の光度の変化に従ってピクセル値を変化させます。ピクセルの近傍は、ピクセル自体を中心とした行列またはマスクのサイズによって定義されます。これらのフィルタは、光強度の変化の有無に対して敏感な場合があります。
空間フィルタは2つのカテゴリに分類されます。
- ハイパスフィルタは、通常オブジェクトの境界部分で検出される光の強度の顕著な変化を強調します。ハイパス周波数フィルタによって、鮮鋭なエッジ、細部、ノイズに一致する急激なパターンの変化を際立たせることができます。
- ローパスフィルタは、光の強度の変化を減衰します。ローパス周波数フィルタは、オブジェクトと背景などの徐々に変化するパターンを強調する役割があります。このタイプのフィルタは、細部および不鮮明なエッジを取り除くことで、画像を平滑化する傾向があります。
概念
以下の表は異なるタイプの空間フィルタを示します。
| フィルタタイプ | フィルタ |
|---|---|
|
線形ハイパス |
傾斜、ラプラシアン |
|
線形ローパス |
平滑化、ガウス |
|
非線形ハイパス |
傾斜、ロバーツ、ソーベル、プレウィット、微分、シグマ |
|
非線形ローパス |
中央値、N次、ローパス |
線形フィルタ
線形フィルタは、加重された近接ピクセルの合計によって各ピクセルを置換します。また、近傍を定義する行列は、各近接ピクセルに割り当てられた重みを指定します。マトリックスは、畳み込みカーネル(Convolution Kernel)と呼ばれています。
フィルタカーネルに負および正の両方の係数がある場合、変換関数は加重された微分と等しく、鮮鋭化またはハイパスフィルタを生成します。標準のハイパスフィルタには、傾斜およびラプラシアンフィルタが含まれます。
カーネル内のすべての係数が正数である場合、変換関数は加重された合計値と等しく、平滑化またはローパルフィルタを生成します。標準のローパスフィルタには、平滑化およびガウスフィルタが含まれます。
傾斜フィルタ
傾斜フィルタは、特定の方向上の光の強度の変化を強調します。
以下のソース画像を仮定した場合:
傾斜フィルタは水平エッジを抽出して、以下の画像を生成します。
傾斜フィルタは対角線エッジを強調して、以下の画像を生成します。
カーネルの定義
傾斜コンボリューションフィルタは、一次導関数です。そのカーネルは、以下のモデルを使用します。
ここで、a、b、c、dは整数、x = 0または1になります。
フィルタ軸と方向
このカーネルには、中央の要素を通り、カーネルの正と負の係数間を結ぶ対称軸があります。この対称軸によって、輪郭を描画するエッジの方向が決定します。たとえば、a = 0、b = –1、c = –1、d = –1、x = 0である場合、カーネルは以下のようになります。
対称軸は、135゚に位置します。
特定の方向に対して、傾斜フィルタを設計して、その方向上のエッジを強調または暗くすることができます。フィルタは、実際そのカーネルの対称軸に垂直角度の強度の変化に対して敏感です。カーネルの負の係数から正の係数への方向Dを仮定した場合、フィルタは光の強度が方向D上で増加するピクセルを強調し、光の強度が低下するピクセルを暗くします。
以下の2つのカーネルは、135゚の向きのエッジを強調します。
プレウィット#10は、光の強度が北東から南西の方向にしたがって増加するピクセルを強調します。光の強度が同じ方向にしたがって低下するピクセルを暗くします。この処理によって、図に示すように、明るい領域の北東の手前のエッジの輪郭が描画されます。
プレウィット#2は、光の強度が南西から北東の方向にしたがって増加するピクセルを強調します。光の強度が同じ方向にしたがって低下するピクセルを暗くします。この処理によって、図に示すように、明るい領域の南西の手前のエッジの輪郭が描画されます。
エッジ抽出とエッジ強調
傾斜フィルタには、中央係数x が1または0に等しいかによって異なる2つの作用があります。
- 中央係数がヌル(x = 0)の場合、傾斜フィルタは光の強度変化が係数a、b、c、dの構成によって指定される方向上で発生するピクセルを強調します。変換された画像には元のエッジの部分に白黒の境界線が表示され、パターン全体の階調が暗くなります。
中央係数が1 (x = 1)に等しい場合、傾斜フィルタは上記と同じ変化を検出しますが、ソース画像上に重ね合わされます。変換された画像は、エッジが強調されたソース画像のように表示されます。このタイプのカーネルは、粒子の抽出およびテクスチャの認識に使用します。
プレウィット#15は、以下のように分解されることに注目してください。
この公式は、プレウィット#15がカーネルCによって抽出されたエッジをソース画像に追加することを示します。
プレウィット#15 = プレウィット#14 + ソース画像
エッジの太さ
カーネルのサイズが大きいほど、エッジの幅が広くなります。以下の画像は、西東3 × 3の傾斜を示します。
以下の画像は、西東5 × 5の傾斜を示します。
以下の画像は、西東7 × 7の傾斜を示します。
ラプラシアンフィルタ
ラプラシアンフィルタは、ピクセルの周囲の光の強度の変化を強調します。フィルタはオブジェクトの輪郭を抽出し、詳細部分を描画します。傾斜フィルタとは異なり、全方向性を有します。
以下のソース画像を仮定した場合:
ラプラシアンフィルタは輪郭を抽出して、以下の画像を生成します。
ラプラシアンフィルタは輪郭を強調して、以下の画像を生成します。
カーネルの定義
ラプラシアンコンボリューションフィルタは二次導関数で、そのカーネルは以下のモデルを使用します。
ここで、a、b、c、dは整数です。
ラプラシアンフィルタは、中央係数xが外側の係数の絶対値の合計と比べて等しいか大きいかに応じて、2つの異なる作用をします。
輪郭抽出と強調
中央係数がこの合計x = 2(|a| + |b| + |c| + |d|)に等しい場合、ラプラシアンフィルタは著しい光の強度の変化が検出された部分のピクセルを抽出します。鋭敏なエッジ、オブジェクト間の境界、背景のテクスチャへの変更、ノイズ、またはその他の作用によって、これらの変化が生じます。変換された画像には、黒い背景がある白い輪郭が表示されます。
以下のソース画像、ラプラシアンカーネル、フィルタ処理された画像に注目してください。
中央係数が外側の係数の合計よりも大きい場合(x > 2(a + b + c + d ))、ラプラシアンフィルタは上記と同じ変化を検出しますが、ソース画像上に重ね合わされます。変換された画像は、すべての光の強度の変化が強調されたソース画像のように表示されます。
ラプラシアン #4は、以下のように分解されることに注目してください。
この公式は、ラプラシアン#2カーネルがラプラシアン#1によって抽出された輪郭をソース画像に追加することを示します。
ラプラシアン#4 = ラプラシアン#3 + ソース画像
たとえば、ラプラシアン#4カーネルの中央係数が10の場合、ラプラシアンフィルタは、ラプラシアン#3 カーネルによって抽出された輪郭をソース画像を2で乗算した値に追加する、などとなります。より大きい中央係数は、より不鮮明な輪郭とフィルタによって強調された詳細部分に対応します。
輪郭の幅
より大きいカーネルはより太い輪郭に対応します。以下の画像は、ラプラシアン3 × 3です。
以下の画像は、ラプラシアン5 × 5です。
以下の画像は、ラプラシアン7 × 7です。
平滑化フィルタ
平滑化フィルタは、近傍での光の強度の変化を減衰します。オブジェクトの形状全体を平滑化し、エッジを不鮮明にして、詳細部分を削除します。
以下のソース画像を仮定した場合、
平滑化フィルタは以下の画像を生成します。
カーネルの定義
平滑化コンボリューションフィルタは、カーネルが以下のモデルを使用する等化フィルタです。
ここで、a、b、c、d は正の整数、x = 0または1になります。
平滑化カーネルのすべての係数は正数であるため、各中央ピクセルはその近接ピクセルの加重平均となります。近接ピクセルの重みが強いほど、中央ピクセルの新規値への影響が大きくなります。
所定の係数のセット(a、b、c、d)があると仮定した場合、0 (x = 0) に等しい中央係数を含む平滑化カーネルには、1 (x = 1)に等しい中央係数を含む平滑化カーネルよりも不鮮明性の効果が高くなります。
以下の平滑化カーネルとフィルタ処理された画像に注目してください。より大きいカーネルサイズは、より高い平滑化効果に対応します。
ガウスフィルタ
ガウスフィルタは、近傍での光の強度の変化を減衰します。オブジェクトの形状全体を平滑化して、詳細部分を減衰します。平滑化フィルタと似ていますが、不鮮明効果は抑制されます。
以下のソース画像を仮定した場合、
ガウスフィルタは以下の画像を生成します。
カーネルの定義
ガウスコンボリューションフィルタは、カーネルが以下のモデルを使用する平均化フィルタです。
ここで、a、b、c、dは正の整数、x > 1になります。
ガウスカーネルのすべての係数は正数であるため、各中央ピクセルはその近接ピクセルの加重平均となります。近接ピクセルの重みが強いほど、中央ピクセルの新規値への影響が大きくなります。
平滑化カーネルとは異なり、ガウスフィルタの中央係数は1より大きくなります。したがって、ピクセルの元の値は、近接ピクセルの重みよりも大きい重みで乗算されます。その結果、より大きい中央係数は微妙な平滑化効果に対応します。より大きいカーネルサイズは、より高い平滑化効果に対応します。
非線形フィルタ
非線形フィルタは、周辺ピクセルの非線形関数とピクセル値を置き換えます。線形フィルタのように、非線形フィルタは近傍に作用します。
非線形プレウィットフィルタ
非線形プレウィットフィルタは、オブジェクトの外側の輪郭を抽出するハイパスフィルタです。このフィルタは、垂直および水平軸上の著しい光の強度の変化を強調します。
各ピクセルには、以下のプレウィットコンボリューションカーネルと取得された水平および垂直傾斜の最大値が割り当てられます。
非線形ソーベルフィルタ
非線形ソーベルフィルタは、オブジェクトの外側の輪郭を抽出するハイパスフィルタです。このフィルタは、垂直および水平軸上の著しい光の強度の変化を強調します。
各ピクセルには、以下のソーベルコンボリューションカーネルと取得された水平および垂直傾斜の最大値が割り当てられます。
プレウィットフィルタとは逆に、ソーベルフィルタは中央ピクセルの水平および垂直近接ピクセルにより高い重みを割り当てます。
非線形プレウィットと非線形ソーベルの例
この例では、以下のソース画像を使用します。
非線形プレウィットフィルタは以下の画像を生成します。
非線形ソーベルフィルタは以下の画像を生成します。
両方のフィルタは、オブジェクトの輪郭を描画します。異なるコンボリューションカーネルが結合されるため、非線形ソーベルは正方形の輪郭を抽出するのに対して、非線形プレウィットは曲線輪郭を描画する傾向があります。孤立したピクセルの輪郭を観察すると、この違いが分かります。
非線形傾斜フィルタ
非線形傾斜フィルタは、光の強度の変化が垂直軸上に発生する場合の輪郭を描画します。
ロバーツフィルタ
ロバーツフィルタは、強度の変化が対角線上に発生する場合のピクセルを強調する輪郭を描画します。
微分フィルタ
微分フィルタは、強度の変化がピクセル自体とそのピクセルの3つの左上の近接ピクセルの間で発生する場合のピクセルを強調することで連続的な輪郭を生成します。
シグマフィルタ
シグマフィルタは、ハイパスフィルタです。このフィルタは、この値の偏差値が重要でない場合、近傍で検出された平均値にピクセルを設定することで輪郭と細部を描画します。左側の例は、フィルタ処理前の画像を示します。右側の例は、フィルタ処理後の画像を示します。
ローパスフィルタ
ローパスフィルタは、この値からの偏差値が大きい場合、ピクセルの近傍で検出された平均値にピクセルを設定することによって、詳細部分を減少して、エッジを不鮮明にします。左側の例は、フィルタ処理前の画像を示します。右側の例は、フィルタ処理後の画像を示します。
中央値フィルタ
中央値フィルタはローパスフィルタです。このフィルタは各ピクセルにその近傍の中央値を割り当て、孤立したピクセルを効率的に削除し、細部を減少します。ただし、中央値フィルタはオブジェクトの輪郭を不鮮明にしません。
N次フィルタを実行して、f × fの特定のフィルタサイズに対して、(f2 – 1) / 2に次数を設定することで、中央値フィルタを実装することができます。
N次フィルタ
N次フィルタは、中央値フィルタを拡張したフィルタです。このフィルタは、近接ピクセルが昇順にソートされている場合、各ピクセルにその近傍のN次の値を割り当てます。Nの値は、画像の光の全体的な強度に対するフィルタ効果を緩和するのに使用できるフィルタの次数を決定します。より低い次数はより暗い変換された画像に対応し、より高い次数はより明るい変換された画像に対応します。
N次フィルタの効果を参照するには、明るいオブジェクトと暗い背景のある画像の例に注目してください。この画像をグレーパレットで参照する場合、オブジェクトには背景よりもより高いグレーレベル値が含まれます。
| 所定のフィルタサイズf × fにおいて | フィルタサイズ3 × 3の例 | |
|---|---|---|
|
次数0 (画像を平滑化し、明るいオブジェクトを縮小する) |
|
|
次数4 次数4(中央値フィルタと等しい) |
|
|
次数8 (画像を平滑化し、明るいオブジェクトを膨張する) |
|
詳細情報
P(i, j)が(i, j)の座標を含むピクセルPの強度を表す場合、P(i, j)を囲むピクセルは、以下(3 × 3行列の例)のように指標付けすることができます。
|
P(i – 1, j – 1) |
P(i, j – 1) |
P(i + 1, j – 1) |
|
P(i – 1, j) |
P(i, j) |
P(i + 1, j) |
|
P(i – 1, j + 1) |
P(i, j + 1) |
P(i + 1, j + 1) |
線形フィルタは、P(i, j)に近接ピクセルの線形結合である値を割り当てます。
以下に例を示します。
P(i, j) = P(i, j – 1) + P(i – 1, j) + 2P(i, j) + P(i + 1, j) + P(i, j + 1)非線形フィルタは、P(i, j)に近接ピクセルの線形結合でない値を割り当てます。
以下に例を示します。
P(i, j) = max(P(i – 1, j – 1), P(i + 1, j – 1), P(i – 1, j + 1), P(i + , 1j + 1))
5 × 5近傍の場合、iおよびjの指標は-2から2の範囲になります。P(i, j)とその近接ピクセルを含む一連のピクセルは、P(n, m)の注釈が付けられます。
線形フィルタ
iとjがピクセル座標を示す画像内の各ピクセルP(i, j) の場合、コンボリューションカーネルはP(i, j) を中心とします。カーネルによってマスク処理された各ピクセルは、その上に配置された係数によって乗算されます。P(i, j)は、係数の合計によって除算されるこれらの積の合計値または1のうちより大きい値となります。
3 × 3近傍の場合、P(i, j) の周囲のピクセルおよびカーネルK は以下のように指標付けされます。
| P(i – 1, j – 1) | P(i, j – 1) | P(i + 1, j – 1) |
| P(i – 1, j) | P(i, j) | P(i + 1, j) |
| P(i – 1, j + 1) | P(i, j + 1) | P(i + 1, j + 1) |
| K(i – 1, j – 1) | K(i, j – 1) | K(i + 1, j – 1) |
| K(i – 1, j) | K(i, j) | K(i + 1, j) |
| K(i – 1, j + 1) | K(i, j + 1) | K(i + 1, j + 1) |
ピクセルP(i, j) は、(1 / N)∑ K(a, b)P(a, b)の値が割り当てられます。ここで、a は(i – 1) から (i + 1) の範囲、b は(j – 1) から (j + 1)の範囲を示します。N は、∑ K(a, b) または1のうちより大きい値と等しい正規化因子です。
新規値P(i, j) が負である場合、0に設定されます。新規値P(i, j) が255よりも大きい場合、255に設定されます(8ビット解像度の場合)。
係数K(a, b) の絶対値が大きいほど、ピクセルP(a, b)によるP(i, j) の新規値への影響が大きくなります。係数vが0の場合、近傍P(a, b) は、P(i, j) の新規の値に影響しません(P(a, b)がP(i, j) 自身の場合もあります)。
コンボリューションカーネルが以下の場合:
P(i, j) = (–2P(i – 1, j) + P(i, j) + 2P(i + 1, j)) となります。
コンボリューションカーネルが以下の場合:
P(i, j) = (P(i, j – 1) + P(i – 1, j) + P(i + 1, j) + P(i, j + 1))となります。
非線形プレウィットフィルタ
非線形ソーベルフィルタ
非線形傾斜フィルタ
ピクセルの新規値は、上部の近接ピクセルとその2つの左側の近接ピクセルからの偏差間の最大絶対値になります。
P(i, j) = max[|P(i, j – 1) – P(i, j)|, |P(i – 1, j – 1) – P(i – 1, j)|]
ロバーツフィルタ
ピクセルの新規値は、左上の近接ピクセルとその他の2つの近接ピクセルの偏差間の最大絶対値になります。
P(i, j) = max[|P(i – 1, j – 1) – P(i, j)|, |P(i, j – 1) – P(i – 1, j)|]
微分フィルタ
ピクセルの新規値は、左上の近接ピクセルからの最大偏差の絶対値になります。
P(i, j) = max[|P(i – 1, j) – P(i, j)|, |P(i – 1, j – 1) – P(i, j)|, |P(i, j – 1) – P(i – 1, j)|]
シグマフィルタ
P(i, j) とその近接ピクセルの平均値とされるM、およびそれらの値の標準偏差とされるSを仮定した場合、各ピクセル値が [M – S, M + S] の範囲内である場合、各ピクセルP(i, j) は平均値Mに設定されます。
ローパスフィルタ
P(i, j)とその近接ピクセルの平均値とされるM、およびそれらの値の標準偏差とされるS を仮定した場合、各ピクセル値が [M – S, M + S]の範囲内である場合、各ピクセルP(i, j)は平均値M に設定されます。
中央値フィルタ
P(i, j) = 一連の[P(n, m)]の中央値
N次フィルタ
P(i, j) = 一連の[P(n, m)] のN番目の値
ここで、P(n, m) は昇順でソートされます。
以下の例では、3 × 3近傍を使用します。
以下の表は、各N次値に対する中央ピクセルの新規出力値を示します。
| N次 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 新規ピクセル値 | 4 | 5 | 5 | 6 | 8 | 9 | 10 | 12 | 13 |
フィルタサイズfを仮定した場合、N次数は0~f 2 – 1の階数となります。たとえば、フィルタサイズ3の場合、N次の範囲は0~8 (32 – 1)となります。