單應矩陣H,求解及影象透射變換warpPerspective
阿新 • • 發佈:2018-12-30
1.代數求解
K為內參,R為旋轉矩陣
2.函式求解
getPerspectiveTransform()和findHomography()
都用於計算單應性矩陣,即解一個線性方程組。由於單應矩陣有8個未知數(3*3,其中第9個數為1),所以至少需要4個點(每個點-x,y,提供2個約束方程)。
getPerspectiveTransform用的是SVD分解,getPerspectiveTransform只會拿前4個點去計算,getPerspectiveTransform()比較簡單粗暴。
findHomography則會拿一堆點(>=4)去計算(其是不斷從一堆點中重複拿出4個點去計算出一個結果,再採用一些優化演算法RANSAC/LMEDS去篩選出最優解)。
3.影象透射變換warpPerspective
import sys import math ros_path = '/opt/ros/kinetic/lib/python2.7/dist-packages' if ros_path in sys.path: sys.path.remove(ros_path) import cv2 sys.path.append('/opt/ros/kinetic/lib/python2.7/dist-packages') import numpy as np K1=np.matrix([[1504.72958809729,0,965.092514870106], [0,1407.38572229267,569.748552278095], [0,0,1]]) K3=np.matrix([[1501.83680551596,0,813.810666146807], [0,1398.24220677846,560.287775632716], [0,0,1]]) R1=np.matrix([[1,0,0], [0,1,0], [0,0,1]]) R3=np.matrix([[0.8560 , 0.0170 , -0.5167], [-0.0351 , 0.9991 ,-0.0253], [0.5158 , 0.0398 , 0.8558]]) img=cv2.imread("/home/XXX/F/image/3/3.jpg") H=K3*R1*R3.I*K1.I res = cv2.warpPerspective(img,H,(4000,2000)) cv2.namedWindow("1",0) cv2.imshow("1",res) cv2.waitKey(0)