I'm trying to solve system of equations. I have 4 points before perspective projection and after and I whant to obtain matrix of perspective projection $m_{i,j}$ ($x,y,u,v$ are known , $m_{i,j}$ unknown)
$u_{1}= (m_{13} + m_{11}*x_{1} + m_{12}*y_{1})/(1 + m_{31}*x_{1} + m_{32}*y_{1})$ $v_{1}= (m_{23} + m_{21}*x_{1} + m_{22}*y_{1})/(1 + m_{31}*x_{1} + m_{32}*y_{1})$ $u_{2}= (m_{13} + m_{11}*x_{2} + m_{12}*y_{2})/(1 + m_{31}*x_{2} + m_{32}*y_{2})$ $v_{2}= (m_{23} + m_{21}*x_{2} + m_{22}*y_{2})/(1 + m_{31}*x_{2} + m_{32}*y_{2})$ $u_{3}= (m_{13} + m_{11}*x_{3} + m_{12}*y_{3})/(1 + m_{31}*x_{3} + m_{32}*y_{3})$ $v_{3}= (m_{23} + m_{21}*x_{3} + m_{22}*y_{3})/(1 + m_{31}*x_{3} + m_{32}*y_{3})$ $u_{4}= (m_{13} + m_{11}*x_{4} + m_{12}*y_{4})/(1 + m_{31}*x_{4} + m_{32}*y_{4})$ $v_{4}= (m_{23} + m_{21}*x_{4} + m_{22}*y_{4})/(1 + m_{31}*x_{4} + m_{32}*y_{4})$
I tried Solve
but it seems to work infinite time.
my input in mathematica
Solve[u1== (m13 + m11*x1 + m12*y1)/(1 + m31*x1 + m32*y1)&&
v1== (m23 + m21*x1 + m22*y1)/(1 + m31*x1 + m32*y1)&&
u2== (m13 + m11*x2 + m12*y2)/(1 + m31*x2 + m32*y2)&&
v2== (m23 + m21*x2 + m22*y2)/(1 + m31*x2 + m32*y2)&&
u3== (m13 + m11*x3 + m12*y3)/(1 + m31*x3 + m32*y3)&&
v3== (m23 + m21*x3 + m22*y3)/(1 + m31*x3 + m32*y3)&&
u4== (m13 + m11*x4 + m12*y4)/(1 + m31*x4 + m32*y4)&&
v4== (m23 + m21*x4 + m22*y4)/(1 + m31*x4 + m32*y4),{m11,m12,m13,m21,m22,m23,m31,m32}]
UPDATE:
another question rises when I try to solve the same equation but when $x,y$ not given, but I have some restrictions that give me more equations. What I trying to do: I have points $u,v$ (distorted points) and I don't have original points $x,y$ but I can foto the same segment in different places and I know that distance $dx=x_{2}-x_{1}$ and $dy=y_{2}-y_{1}$ is always the same,so I want to reconstruct perspective transform that I don't know.
my input in mathematica
Solve[(m31 x1 + m32 y1 + 1) u1 == (m11 x1 + m12 y1 + m13) &&
(m31 x1 + m32 y1 + 1) v1 == (m21 x1 + m22 y1 + m23) &&
(m31 x2 + m32 y2 + 1) u2 == (m11 x2 + m12 y2 + m13) &&
(m31 x2 + m32 y2 + 1) v2 == (m21 x2 + m22 y2 + m23) &&
(m31 x3 + m32 y3 + 1) u3 == (m11 x3 + m12 y3 + m13) &&
(m31 x3 + m32 y3 + 1) v3 == (m21 x3 + m22 y3 + m23) &&
(m31 x4 + m32 y4 + 1) u4 == (m11 x4 + m12 y4 + m13) &&
(m31 x4 + m32 y4 + 1) v4 == (m21 x4 + m22 y4 + m23) &&
(m31 x5 + m32 y5 + 1) u5 == (m11 x5 + m12 y5 + m13) &&
(m31 x5 + m32 y5 + 1) v5 == (m21 x5 + m22 y5 + m23) &&
(m31 x6 + m32 y6 + 1) u6 == (m11 x6 + m12 y6 + m13) &&
(m31 x6 + m32 y6 + 1) v6 == (m21 x6 + m22 y6 + m23) &&
(m31 x7 + m32 y7 + 1) u7 == (m11 x7 + m12 y7 + m13) &&
(m31 x7 + m32 y7 + 1) v7 == (m21 x7 + m22 y7 + m23) &&
(m31 x8 + m32 y8 + 1) u8 == (m11 x8 + m12 y8 + m13) &&
(m31 x8 + m32 y8 + 1) v8 == (m21 x8 + m22 y8 + m23) &&
(m31 x9 + m32 y9 + 1) u9 == (m11 x9 + m12 y9 + m13) &&
(m31 x9 + m32 y9 + 1) v9 == (m21 x9 + m22 y9 + m23) &&
(m31 x10 + m32 y10 + 1) u10 == (m11 x10 + m12 y10 + m13) &&
(m31 x10 + m32 y10 + 1) v10 == (m21 x10 + m22 y10 + m23) &&
dx == x2 - x1 &&
dy == y2 - y1 &&
dx == x4 - x3 &&
dy == y4 - y3 &&
dx == x6 - x5 &&
dy == y6 - y5 &&
dx == x8 - x7 &&
dy == y8 - y7 &&
dx == x10 - x9 &&
dy == y10 - y9
, {m11, m12, m13, m21, m22, m23, m31, m32}]
but Mathematica give me {}
just trivial solution.what is wrong?
maybe it's possible to automatically rewrite system of equations as linear system $AX=B$ ?
PseudoInverse
orLeastSquares
for that. I'll try to add an example in my answer. $\endgroup$ – Thies Heidecke Aug 9 '12 at 12:16x1,x2,...
in the list of unknowns forSolve
then. For measured values which can have measurement errors or inaccuracies it's usually better to use "soft" methods likePseudoInverse
orLeastSquares
which also work when contradictions arise. $\endgroup$ – Thies Heidecke Aug 9 '12 at 12:32