参考:https://blog.csdn.net/qq_29462849/article/details/80728757
参考:https://blog.csdn.net/mogebuyi/article/details/83036369
参考:https://docs.opencv.org/4.5.2/d9/d0c/group__calib3d.html#ga59b0d57f46f8677fb5904294a23d404a
一、 仿射变换与透视变换
1、透视变换(单应性变换 Homography):
[ X Y W ] = [ m 11 m 12 m 13 m 21 m 22 m 23 m 31 m 32 m 33 ] [ x y 1 ] \begin{bmatrix} X \\ Y \\ W \\ \end{bmatrix}= \begin{bmatrix} m11 & m12 & m13 \\ m21 & m22 & m23 \\ m31 & m32 & m33 \\ \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \\ \end{bmatrix} ⎣⎡XYW⎦⎤=⎣⎡m11m21m31m12m22m32m13m23m33⎦⎤⎣⎡xy1⎦⎤
- 长方形映射为一般四边形
2、仿射变换:
[ X Y W ] = [ m 11 m 12 m 13 m 21 m 22 m 23 0 0 1 ] [ x y 1 ] \begin{bmatrix} X \\ Y \\ W \\ \end{bmatrix}= \begin{bmatrix} m11 & m12 & m13 \\ m21 & m22 & m23 \\ 0 & 0 & 1 \\ \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \\ \end{bmatrix} ⎣⎡XYW⎦⎤=⎣⎡m11m210m12m220m13m231⎦⎤⎣⎡xy1⎦⎤
[ X Y ] = [ A 11 A 12 b 1 A 21 A 22 b 2 ] [ x y 1 ] \begin{bmatrix} X \\ Y \\ \end{bmatrix}= \begin{bmatrix} A_{11} & A_{12} & b_1 \\ A_{21} & A_{22} & b_2 \\ \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \\ \end{bmatrix} [XY]=[A11A21A12A22b1b2]⎣⎡xy1⎦⎤
- 长方形映射为平行四边形
3、平移:
[ X Y W ] = [ 1 0 m 13 0 1 m 23 0 0 1 ] [ x y 1 ] \begin{bmatrix} X \\ Y \\ W \\ \end{bmatrix}= \begin{bmatrix} 1 & 0& m13 \\ 0 & 1 & m23 \\ 0 & 0 & 1 \\ \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \\ \end{bmatrix} ⎣⎡XYW⎦⎤=⎣⎡100010m13m231⎦⎤⎣⎡xy1⎦⎤
- 长方形映射为长方形
二、使用RANSAC图像配准
1、透视变换
Mat cv::findHomography ( InputArray srcPoints,
InputArray dstPoints,
OutputArray mask,
int method = 0,
double ransacReprojThreshold = 3 )
# 例子
cv2.findHomography(src_pts, dst_pts, cv2.RANSAC, 5.0)
dst = cv2.perspectiveTransform(pts, M)
2、仿射变换
cv::Mat cv::estimateAffine2D (InputArray from,
InputArray to,
OutputArray inliers = noArray(),
int method = RANSAC,
double ransacReprojThreshold = 3,
size_t maxIters = 2000,
double confidence = 0.99,
size_t refineIters = 10 )
[ x y ] = [ a 11 a 12 a 21 a 22 ] [ X Y ] + [ b 1 b 2 ] \begin{bmatrix} x\\ y\\ \end{bmatrix} = \begin{bmatrix} a_{11} & a_{12}\\ a_{21} & a_{22}\\ \end{bmatrix} \begin{bmatrix} X\\ Y\\ \end{bmatrix} + \begin{bmatrix} b_1\\ b_2\\ \end{bmatrix} [xy]=[a11a21a12a22][XY]+[b1b2]