structure tenssor(構造テンソル、二次モーメント行列)について

はじめに

OpenCVチュートリアル「Anisotropic image segmentation by a gradient structure tensor(勾配構造テンソルによる異方性画像の分割)」ので詰まったので、tructure tensorについて調べた。

定義- 2次元構造テンソル(2D structure tensor)

画像I(p),(p=(x,y)T)に対して、構造テンソルSw(p)は次のように定義される。

ここでIx,Iyx,y偏微分w(r)は窓関数である。
この定義は次のように書き換えることもできる。

性質

二次元構造テンソルSw(p)固有値λ1,λ2(λ1λ20)固有ベクトルe1,e2がよく用いられる。
これらは画像中における点p中心の窓関数w(r)内部の勾配の性質を表している。

  1. 固有ベクトルe1(またはその逆方向)は勾配が最も整列した方向を表す。
  2. 固有値λ2=0のとき(linear symmetry condition)、e1方向にのみ整列している。このとき画像Iの等曲線(iso curve)は平行になる。
  3. 2つの固有値が等しい(λ1=λ2)とき(balanced body)、勾配は優勢な方向を持たない。これは画像Iが回転対称なときなどに起こりうる。
  4. 固有値がいずれも0(λ1=λ2=0)のとき、画像Iは平坦である。

上記の性質から固有値λ1,λ2を使って、画像I「傾く方向の一貫性cw」を評価することができる。
cw=(λ1λ2λ1+λ2)2cwは1~0の値となる。また、λ1=λ2=0のときcw=0とする場合が多い。

さらに、画像Iの傾く方向αを次のように計算することもできる。
α=12arctan2Sw12Sw22Sw11

まとめ

勾配I積分して勾配分布を調べようとすると、正負で打ち消し合ってしまうため、二次モーメントの形で計算しているということである。

参考

https://en.wikipedia.org/wiki/Structure_tensor
https://docs.opencv.org/4.0.0/d4/d70/tutorial_anisotropic_image_segmentation_by_a_gst.html