全プロセスの詳細解説
-
チェッカーボードのテスト画像のピクセル (31, 3) における勾配強度 9 ステップ
チェッカーボードのテスト画像 — 純粋な黒と白、正方形の幅 32 ピクセル — において、3×3 のぼかしカーネル、σ = 1.0、Tlo = 30、Thi = 80 とします。最初の垂直境界の直前にある最後の白列のピクセル (31, 3) における勾配強度を導出し、それが属するエッジが何ピクセル幅になるかを求めてください。
-
まずグレースケール化を行いますが、この画像では何も変化しません。3 つの重みの合計はちょうど 1 になるため、赤・緑・青の値が等しいピクセルは元の値を保持します。白は 255 のまま、黒は 0 のままであり、以下に示す数値はすべてこの 2 つの値のみから導かれます。
-
ガウス重みは距離の 2 乗に伴って減少します。σ = 1 のとき、中心は 1、辺を共有する 4 ピクセルは e-0.5 = 0.6065、4 つの角は e-1 = 0.3679 となります。合計の 4.8976 で全体を割ることで、これらは加重平均となります。
-
行 3 は水平な帯の充分内側に位置するため、そこにある任意のウィンドウの 3 行は同一であり、カーネルの垂直構造は相殺されます。重要となるのは列の合計のみであり、それはわずか 2 つしかありません。
-
境界をまたぐぼかしを考えます。x = 31 では、ウィンドウは白 2 列と黒 1 列を覆います。x = 32 では、白 1 列と黒 2 列を覆います。255 から 0 への急激な変化は、255, 185, 70, 0 という階段状の変化(ランプ)になります。丸められたこれらの中央の 2 つの値が、インスペクタに表示される値です。
-
Sobelフィルタは左列に -1, -2, -1、右列に +1, +2, +1 の重みをかけ、中央列には何もかけません。3 つの行がすべて等しいため、これらの重みは単純に 4 という 1 つの係数にまとまります。したがって、畳み込み全体は両側の列の差の 4 倍になります。
-
垂直方向の勾配は、左右対称な理由から消滅します。ピクセルの上の行と下の行は同じ 3 つの数値であるため、+1, +2, +1 の和と -1, -2, -1 の和が項ごとに打ち消し合います。このエッジの勾配は完全に水平方向のみであり、これにより次のステップが容易になります。
-
2 つを合成すると、強度(マグニチュード)は単純に水平方向のものと一致します。
-
ぼかしを行わない場合に同じエッジが得られる結果と比較してみます。同じカーネル全体で 255 の単純な段差が生じます。平滑化によって 280 カウント、利用可能な応答の 27% をわずかに超える分が失われていますが、これはノイズ耐性のための代償であり、丸め誤差ではなく意図的なトレードオフです。
-
次に、右に 1 列移動して同様に計算します。x = 32 では、ウィンドウの値は 185, 70, 0 となるため、差は再び -185 となり、強度は再び 740 になります。さらに両側に 1 列外側へ進むと、差はおよそ -70 に落ち込み、強度は 280 に減少します。
解答
740 — そしてエッジの幅は 2 ピクセルになります。非極大抑制では、勾配に沿った両隣のピクセルの強度に対して、自身の強度が ≥ である場合にそのピクセルを保持します。ここでは勾配は x 方向に向いているため、ピクセル 31 は左側の 280 および右側の 740 と比較され、ピクセル 32 は 740 および 280 と比較されます。両者は互いに同点となり、同点は ≥ の条件を満たすため、両方が生存します。740 という値は Thi = 80 の 9 倍を超えているため、どちらも白として出力されます。どんな閾値の組み合わせであってもこれらを分離することはできません。なぜなら閾値処理が原因ではないからです。本当の境界は x = 31.5、すなわち最後の白ピクセルと最初の黒ピクセルのちょうど中間に存在し、対称的なぼかしによって勾配はその半整数に関して対称に保たれます — 探すべき単一の極大値が存在しないのです。パラメータ調整を行う前にこの点を知っておく価値があります。エッジマップにおける二重線は、閾値処理の失敗による場合もあれば計算上の理由による場合もあり、ここでは正方形の幅がたまたま整数ピクセルである画像での 740 = 740 に起因しています。
-
参考文献 (1)
- Insight block 3 — the three criteria, and the trade-off between two of them: J. Canny, "A Computational Approach to Edge Detection." IEEE Transactions on Pattern Analysis and Machine Intelligence PAMI-8(6), 679–698, 1986.