平面マーカーからポーズ推定システムを開発しています(Matlabを使用)。そのために、Webカメラでキャプチャした画像から長方形を検出し、4つのコーナーポイントの座標を取得して、これらのコーナーポイント間のホモグラフィを同次座標で計算します。
58 46 75 90
M = 67 108 133 89
1 1 1 1
ここで、最初の行は垂直座標で、2番目の行は水平座標です。
マーカーが正方形であることがわかっているので、これらのポイントと参照ポイントの間で、DLTを使用してホモグラフィを計算します(Webで見つけたいくつかの異なるホモグラフィ計算関数とMatlabのcp2tformを使用してすべて同じ結果が得られます) 、
1 1 100 100
m = 1 100 100 1
1 1 1 1
[編集:どちらも反時計回りに並べ替えられているので、一致していることを確認します。]
次に、これらの参照点の再投影をプロットします
m* = H*m
ホモグラフィがどの程度適合しているかを確認するために、Webカメラの画像に戻ります。
マーカーをz軸(=マーカーのノルムベクトル)を中心に回転させる(つまり、Webカメラの前に保持して手動で傾ける)だけなので、結果は問題ありません。再投影されたポイントは、以前に検出されたマーカーのコーナーポイントにほぼ正確に投影され、分解されたz軸角度は適切に計算されます。
ただし、マーカーをx軸および/またはy軸を中心に回転させると、再投影されたポイントがかなりずれます。それから私が気付いたのは、計算されたホモグラフィ行列Hはほとんどアフィンなものであるということです。例えばH =
0.2339 -0.0967 57.8362
H = 0.1339 0.4714 66.3639
-0.0010 0.0005 1.0000
(要素h31とh32は、マーカーをいくら傾けてもほぼゼロです)これは、射影ではなく、常にアフィン変換の結果のように見える再射影された点を調べることで確認できます。当然のことながら、x軸とy軸の分解された角度はほぼゼロ/ゼロに等しくなります。
明らかに、私がWebで見つけた関数は、ホモグラフィの計算をすべて間違っているわけではなく、Matlabのcp2tformも間違っているわけではありませんが、残念ながら、私の間違いが何であるかがわかりません。ピクセル座標の使い方に違いないのですが、ホモグラフィの説明をたくさん見て「ホモグラフィ推定結果アフィン」を検索しても結果が出なかったので、誰かが私を正しい方向に向けてくれたら嬉しいです。
ありがとう。