特定の軸を中心とした回転を表すワープ行列を OpenCV で計算する必要があります。
Z 軸周り -> 簡単: 標準の回転行列を使用します
[cos(a) -sin(a) 0]
[sin(a) cos(a) 0]
[ 0 0 1]
これは他の回転ではそれほど明白ではないため、ウィキペディアで説明されているように、ホモグラフィを作成してみました。
H = R - t n^T / d
カメラと画像の間の距離が画像の高さの 2 倍であると仮定して、X 軸を中心に単純に回転させてみました。
R は標準回転行列です
[1 0 0]
[0 cos(a) -sin(a)]
[0 sin(a) cos(a)]
n は[0 0 1]
、カメラが (0, 0, z_cam) からの画像を直接見ているためです。
t は翻訳です。[0 -2h*(sin(a)) -2h*(1-cos(a))]
d は距離で、定義ごとに 2h です。
したがって、最終的なマトリックスは次のとおりです。
[1 0 0]
[0 cos(a) 0]
[0 sin(a) 1]
a = 0 の場合は単位元であり、a = pi の場合は x 軸を中心に鏡映されます。
それでも、遠近ワープにこのマトリックスを使用しても、期待どおりの結果が得られません。a の値が小さいと画像が「歪みすぎ」、すぐに消えてしまいます。
それで、私は何を間違っていますか?
(注:私はこの主題に関する多くの質問と回答を読みましたが、すべてが反対の方向に向かっています:ホモグラフィ行列を分解したくはありませんが、3D変換と「固定" カメラまたは固定画像と移動カメラ)。
ありがとうございました。