Thresholding

**閾値処理(thresholding)**は、グレースケール画像を画素ごとの二値判定 ── 保持するか捨てるか、前景か背景か、エッジかそうでないか ── に変換する。シンプルな処理でありながら、明示的な画像の二値化として、また輝度やスコアをカットオフと比較する検出器・記述子の内部処理として、ビジョンパイプライン全体に登場する。

大域閾値処理

最も単純な形式は、画像全体に単一の閾値 TT を適用する:

B(x,y)={1if I(x,y)>T0otherwiseB(x, y) = \begin{cases} 1 & \text{if } I(x, y) > T \\ 0 & \text{otherwise} \end{cases}

TT を手作業で選ぶのは脆いため、大津の方法(Otsu’s method)は輝度ヒストグラムから自動的に TT を選択する:得られる2つの画素クラス間のクラス間分散を最大化する TT を選ぶ:

σB2(T)=ω0(T)ω1(T)(μ0(T)μ1(T))2\sigma_B^2(T) = \omega_0(T)\, \omega_1(T)\, \big(\mu_0(T) - \mu_1(T)\big)^2

ここで ω0,ω1\omega_0, \omega_1TT 以下/以上の画素の割合、μ0,μ1\mu_0, \mu_1 はそれらの平均輝度である。クラス間分散を最大化することは、クラス内分散を最小化することと等価である ── これはヒストグラムを2つのモードに最もよく分離する閾値である。

適応的(局所)閾値処理

単一の大域的な TT は、不均一な照明(影、ビネッティング)の下では失敗する。適応的閾値処理は、局所的な近傍から画素ごとの閾値を計算する:

T(x,y)=mW(x,y)CT(x, y) = m_W(x, y) - C

ここで mWm_W は画素周りのウィンドウ WW 上の(単純または加重ガウシアン)平均、CC は小さな定数である。各画素はその後、自身の局所閾値と比較される。これは、フィデューシャルマーカー検出器(ArUco、AprilTag)が白黒マーカーのグリッドを抽出する前に画像を確実に二値化する方法である。

ヒステリシス閾値処理

Cannyエッジ検出は2つの閾値を使う。勾度の大きさが ThighT_{\text{high}} を超える画素は強いエッジとして採用される。TlowT_{\text{low}}ThighT_{\text{high}} の間の画素は、強いエッジに接続している場合にのみ保持される。これにより、長く弱いエッジのセグメントは保持されつつ、孤立したノイズ応答は排除される ── これは、単一のカットオフが良い構造を分断してしまうか、あるいはノイズを許容し過ぎてしまう場合に思い出す価値のあるテクニックである。

特徴点パイプライン内部の暗黙的な閾値

閾値処理は、ほとんどの特徴点処理機構に組み込まれている:

SLAMにおける意義

SLAMシステムは閾値だらけであり、それらを適切に選ぶための標準的な手法を知っていることが、堅牢なシステムと脆いシステムを分ける。適応的閾値処理は、照明の変化を通してマーカーベース・特徴点ベースのパイプラインを機能させ続ける。FASTの閾値は、下流のすべてのモジュールが依存する特徴点の密度と安定性を左右する。ヒステリシス型の2閾値ロジックは、多くの採用/棄却判定(例:マッチングのフィルタリング)に一般化できる。SLAMのフロントエンドが屋内から屋外に移動した際に動作しなくなる場合、ハードコードされた大域閾値がよくある原因である。

関連ノート