web AR 前端二維碼跟蹤 - 2 homography pose的計算

最近工作特別忙,沒時間寫博客,今天抽點時間隨便寫一些簡單的東西。

在正式進入跟蹤之前,和上一篇一樣,還是做預先準備工作。本篇文章主要講解關於homography pose的計算。之前提到過,基於zxing的jsqrcode庫可以識別到二維碼,並且根據二維碼的四個點計算出homography矩陣,但是局限性比較大,只是針對二維碼的情況,而且封裝看起來比較複雜,不利於單獨拿出來給其他方面來用。

homography矩陣的計算有很多種,這裡主要使用一種最簡單的辦法進行計算。

在計算機視覺演算法與應用這本書中,提到了使用最小二乘法,以及迭代方法來對參數進行估測。本質上是使用雅克比矩陣,得到線性方程組,然後基於迭代的思路再求解。具體的推導過程如下(p 242):

當有n組點作為輸入時候,最終可以得到方程如下(我數學方面很差,所以推導過程沒有仔細看,不過結論可以直接拿過來用):

我們設置最左邊的矩陣為A 中間h11到h32是我們需要求解的Pose矩陣

最後的xy的差值矩陣為B,假設一共有n組點

那麼A矩陣的大小為 2n x 8

B矩陣的大小為 2n x 1

然後我們需要求取的pose矩陣為 8 x 1

通過上面的公式,通過輸入的N組點的x,y坐標(每一組包含一個初始點,和一個投影點),可以非常簡單的把A矩陣和B矩陣通過一個for循環計算出來。

然後使用 numericjs 中的solve方法(由於前端沒有openCV庫,所以用numericjs來負責數學計算),可以直接得到8x1的矩陣,最後一位補充1就可以得到 homography的3x3矩陣了。

實際測試,最終計算得到的矩陣,在輸入相同的情況下,和二維碼庫得到的矩陣基本一致。具體的效率還沒有具體評估。如果想提高準確度,可以求解後用投影點作為初始點,再次迭代。

此方法也可以用於求解affine仿射矩陣,只是雅克比矩陣不同,affine的方程會更簡單一些。由於沒有用到RANSAC,所以要求輸入的投影點誤差不能太大。

接下來會繼續討論關於跟蹤方面的其他準備工作。


推薦閱讀:

opencv和pcl的區別?
如何從入門開始學習OpenCV?
[5]OpenCV4Android機器視覺應用入門-拍照預覽界面動態繪圖
[171103] 基於縮略圖哈希值比較的圖像相似性檢索

TAG:增强现实AR | 计算机视觉 | OpenCV |