The homography transformation is based on the following formulae[4]:
A Homography is a transformation ( a 3×3 matrix ) that maps the points
in one image to the corresponding points in the other image.[5]
![\[ H = \left[ \begin{array}{ccc} h_{00} & h_{01} & h_{02} \\ h_{10} & h_{11} & h_{12} \\ h_{20} & h_{21} & h_{22} \end{array} \right] \]](http://www.learnopencv.com/wp-content/ql-cache/quicklatex.com-0e501a99a732aad3f7a911294b942aa0_l3.png)
![\[ \left[ \begin{array}{c} x_1 \\ y_1 \\ 1 \end{array} \right] &= H \left[ \begin{array}{c} x_2 \\ y_2 \\ 1 \end{array} \right] &= \left[ \begin{array}{ccc} h_{00} & h_{01} & h_{02} \\ h_{10} & h_{11} & h_{12} \\ h_{20} & h_{21} & h_{22} \end{array} \right] \left[ \begin{array}{c} x_2 \\ y_2 \\ 1 \end{array} \right] \]](http://www.learnopencv.com/wp-content/ql-cache/quicklatex.com-5ed4910ec273ad30626f55eefe5b0373_l3.png)

Image Alignment Using Homography

Translation[6]

Rotation[6]

Affine Transformation[6]

Perspective Transformation[6]

-------------------------------------------------------
How to find angle between two images[10]
cv::Point3d findOrientation(const cv::Mat& src){cv::Moments m = cv::moments(src, true);
double cen_x=m.m10/m.m00; double cen_y=m.m01/m.m00;double m_11= 2*m.m11-m.m00*(cen_x*cen_x+cen_y*cen_y);// m.mu11/m.m00;
double m_02=m.m02-m.m00*cen_y*cen_y;// m.mu02/m.m00;
double m_20=m.m20-m.m00*cen_x*cen_x;//m.mu20/m.m00;
double theta = m_20==m_02?0:atan2(m_11, m_20-m_02)/2.0; // theta = (theta / PI) * 180.0; //if you want in radians.(or vice versa, not sure) return cv::Point3d(cen_x,cen_y,theta);}

請先 登入 以發表留言。