structure tenssor(構造テンソル、二次モーメント行列)について
はじめに
OpenCVのチュートリアルの「Anisotropic image segmentation by a gradient structure tensor(勾配構造テンソルによる異方性画像の分割)」ので詰まったので、tructure tensorについて調べた。
定義- 2次元構造テンソル(2D structure tensor)
画像に対して、構造テンソルは次のように定義される。
ここではの偏微分、は窓関数である。
この定義は次のように書き換えることもできる。
性質
二次元構造テンソルの固有値と固有ベクトルがよく用いられる。
これらは画像中における点中心の窓関数内部の勾配の性質を表している。
- 固有ベクトル(またはその逆方向)は勾配が最も整列した方向を表す。
- 固有値のとき(linear symmetry condition)、方向にのみ整列している。このとき画像の等曲線(iso curve)は平行になる。
- 2つの固有値が等しい()とき(balanced body)、勾配は優勢な方向を持たない。これは画像が回転対称なときなどに起こりうる。
- 固有値がいずれも0()のとき、画像は平坦である。
上記の性質から固有値を使って、画像の「傾く方向の一貫性」を評価することができる。
は1~0の値となる。また、のときとする場合が多い。
さらに、画像の傾く方向を次のように計算することもできる。
まとめ
勾配を積分して勾配分布を調べようとすると、正負で打ち消し合ってしまうため、二次モーメントの形で計算しているということである。
参考
https://en.wikipedia.org/wiki/Structure_tensor
https://docs.opencv.org/4.0.0/d4/d70/tutorial_anisotropic_image_segmentation_by_a_gst.html