領域分割 — 画像を「意味のまとまり」へ切り分ける
「この画素はどの物体に属するのか」。画像を意味のあるまとまり=領域へ切り分ける領域分割(セグメンテーション)は、認識・計測・医用画像処理などあらゆる画像理解の土台です。閾値処理と大津の方法、領域成長、k-means、watershed — 古典手法それぞれの発想を、動かしながら掴みます。
1. 「領域」とは何か — 分割問題の定式化
領域分割とは、画像の全画素を互いに素な連結領域 R1, …, Rn に分けることです。形式的には、ある均質性述語 P を決めて、「各領域の内部では P(Ri) = 真」「隣接する2領域を合併すると P(Ri ∪ Rj) = 偽」となる分割を求めます。
問題の本質は、何をもって「均質」とみなすかにあります。輝度が近いこと・色が近いこと・テクスチャが似ていること・同じ物体に属すること — 均質性の定義を変えるたびに、必要なアルゴリズムも変わります。アプローチは大きく2系統です。
- 類似性ベース(ボトムアップ):似た画素をまとめる。閾値処理・領域成長・クラスタリングなど。
- 不連続性ベース:輝度が急変する場所(エッジ)で切る。エッジ検出+輪郭追跡、watershed など。
2. 最も素朴で、最も深い — 閾値処理と大津の方法
明るい物体が暗い背景に載っている画像では、ヒストグラムが二峰性になります。谷のあたりに閾値 t を置き、t 以上を前景・未満を背景とすれば分割完了 — ですが、その「谷」を人手でなく自動で決めたい。これに答えるのが大津の方法(Otsu's method)です。
閾値 t で全画素を2クラスに分けたとき、クラス0(暗)とクラス1(明)の画素数比率を ω0, ω1、平均輝度を μ0, μ1 とすると、クラス間分散 σB2 が定義できます。大津の方法は、これを最大にする t を 0〜255 の全探索で選びます。
3. 種から育てる — 領域成長
閾値処理は画像全体を一律に切るため、照明ムラや複数物体には弱い。そこで「この画素は確実に対象だ」というシード(種)画素から出発し、隣接画素のうち条件を満たすものを波紋のように取り込んでいくのが領域成長(region growing)です。
取り込み条件の代表は「シード近傍の平均輝度との差が許容値 T 以内」。条件を満たす画素がフロンティア(成長前線)に加わり、そこからさらに隣を調べる — 幅優先探索そのものです。
4. 色で塗り分ける — k-means クラスタリング
カラー画像では、各画素を RGB の3次元ベクトルとみなし、色空間でのクラスタリングとして分割する手が使えます。代表が k-means:画像の全画素を k 個のクラスタに分け、各画素を最も近いクラスタ中心(代表色)に割り当てる、中心を割り当ての平均で更新する、を収束まで繰り返します。
5. 地形に水を注ぐ — watershed の直感
watershed(分水嶺法)は、画像の輝度(実用では輝度勾配の大きさ)を地形の標高とみなします。各盆地の底から水位を上げていくと、水たまりが盆地ごとに育ち、別々の水たまりが合流しそうになった稜線にダム=分水嶺を築く。水没が終わったときのダムの線が領域境界です。
6. まとめ — 古典からDNNへ
- 閾値処理・大津の方法:ヒストグラムの統計だけで最適閾値を決める。高速・頑健で今も現役。
- 領域成長:シードから条件を満たす隣接画素を取り込む幅優先探索。許容値の設定と漏れ対策が肝。
- k-means:色空間のクラスタリングとして分割。連結性は別途扱う必要がある。
- watershed:勾配を地形とみなす洪水シミュレーション。境界は正確だが過分割しやすい。