本文へスキップ

ガボールフィルタで方向別のエッジ・テクスチャ特徴を抽出する【画像処理100本ノック】

3
AIで生成された記事

概要

Q.77〜80ではガボールフィルタを生成し、回転、畳み込み、方向別応答の合成までを実装します。 ガボールフィルタは方向と空間周波数の両方を選択でき、エッジやテクスチャの特徴抽出に使えます。

カーネルを生成する(Q.77)

ガウシアン窓と正弦波を掛け合わせてカーネルを作ります。σが応答する範囲、波長λが 対象とする模様の細かさ、角度θが方向を決めます。

G(x, y) = exp(-(x'² + γ²y'²) / 2σ²) cos(2πx' / λ + ψ)

生成後は係数の絶対値和などで正規化し、画像全体の明るさが過度に変わらないようにします。

方向を変える(Q.78)

座標を0、45、90、135度へ回転し、方向の異なる4種類のカーネルを描画します。角度ごとに 縞模様の向きが変わることを確認できます。

画像へ適用する(Q.79)

各方向のカーネルをグレースケール画像へ畳み込みます。特定方向の線や縞とカーネルが一致した 場所で大きな応答が得られます。

方向別応答を合成する(Q.80)

4方向の応答を画素ごとに加算し、向きに偏らない特徴画像を作ります。単一方向のエッジ検出から、 複数方向をまとめたテクスチャ表現へ発展させる処理です。

Sobelフィルタとの違い

Sobelは主に局所的な輝度勾配を求めます。ガボールフィルタは方向に加えて周波数も指定できるため、 一定間隔の縞や繰り返し模様へ選択的に反応できます。

カーネルの各パラメータ

ガボールカーネルは、向きθに合わせて座標を回転したx'y'を使います。

x' = x cos θ + y sin θ
y' = -x sin θ + y cos θ
g(x, y) = exp(-(x'² + γ²y'²) / 2σ²) cos(2πx' / λ + ψ)

λは反応する縞の間隔、θは向き、σは観測範囲、γは楕円率、ψは波の位相です。 1つずつ変えたカーネル画像を表示すると、出力との対応を理解しやすくなります。

実装と正規化

カーネルサイズは通常σに対して十分大きい奇数にします。係数の平均を引いてDC成分を抑えると、 一様な明るさへの反応を減らせます。正・負の応答を表示するときは絶対値を取る方法と、128を0として 符号を残す方法で見え方が異なります。

方向と波長の組み合わせごとに畳み込みが必要なため、フィルタバンクは計算量が増えます。 同じカーネルを毎フレーム生成せずキャッシュし、必要な方向数と画像解像度を用途に合わせて絞ります。

おすすめの記事

最新の記事

著者について

404

s-yoshiki

ただの備忘録です。

※外部送信に関する公表事項