opencv cv2.findHomography sift、surf特征匹配 單應(yīng)性矩陣?yán)斫?/h2>

opencv cv2.findHomography 單應(yīng)性矩陣?yán)斫?/h1>

單應(yīng)性矩陣H獲得

單應(yīng)性矩陣是一個3*3的矩陣,可以從cv2.findHomography獲得
例如:
H, status = cv2.findHomography(ptsA, ptsB, cv2.RANSAC, 5)
ptsA, ptsB對應(yīng)兩幅圖獲得的sift或者surf特征點,這里不細(xì)講
參考:https://www.cnblogs.com/lzq116/p/11836657.html

單應(yīng)性矩陣分析

cv2.findHomography得到的H是圖一到圖二的單應(yīng)性矩陣
如果需要圖二到圖一的單應(yīng)性矩陣,則求逆:np.linalg.inv(H)


image.png

上圖僅作參考,得到得的H和上面圖中得不太一樣
(原因:opencv坐標(biāo)原點是左上角,上圖坐標(biāo)原點是左下角)
以下圖為例介紹


image.png

下面介紹一下opencv坐標(biāo)系下應(yīng)該是這樣的
image.png

然后H矩陣的所有變換操作都是基于上圖opencv坐標(biāo)
image.png

其中theta順時針為正
上面的H矩陣可以看成先旋轉(zhuǎn)再平移

坐標(biāo)單應(yīng)性變換計算

計算不用人工算,仿著下面寫就行

h = np.array([[1.0, 0.0, 0.0],
              [0.0, 1.0, 0.0],
              [0.0, 0.0, 1.0]])
coordinate = np.array([[[0, 0]],[[100,100]]).astype('float64')
new_coordinate = cv2.perspectiveTransform(coordinate, h).astype(np.int)
print(new_coordinate)

注意:每個坐標(biāo)外面兩層中括號,不然會報錯。
上面是圖一到圖二的坐標(biāo)變換
如果需要圖二到圖一的單應(yīng)性矩陣,則求逆:np.linalg.inv(h)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容