1. 程式人生 > 其它 >OpenCV-Python系列之單應性查詢物件理論篇

OpenCV-Python系列之單應性查詢物件理論篇

注意:本教程中將涉及到機器學習的一些概念,但不進行過多的詳述。

我們在上一個教程中所提及到的FLANN演算法就屬於單應性演算法,先解釋一下單應性,在計算機視覺中:平面的單應性被定義為從一個平面到另一個平面的投影對映。比如,一個二維平面上的點對映到攝像機成像儀上的對映就是平面單應性的例子。

之前我們使用一個查詢影象,在其中找到一些 特徵點(關鍵點),我們又在另一幅影象中也找到了一些特徵點,最後對這兩幅 影象之間的特徵點進行匹配。簡單來說就是:我們在一張雜亂的影象中找到了 一個物件(的某些部分)的位置。這些資訊足以幫助我們在目標影象中準確的 找到(查詢影象)物件。

為了達到這個目的我們可以使用calib3d模組中的cv2.findHomography()函式。如果將這兩幅影象中的特徵點集傳給這個函式,他就會找到這個物件的****圖變換。然後我們就可以使用函式 cv2.perspectiveTransform() 找到這個物件了,至少要 4 個正確的點才能找到這種變換。

我們已經知道在匹配過程可能會有一些錯誤,而這些錯誤會影響最終結果。為了解決這個問題,演算法使用 最小二乘法RANSAC LMEDSPROSAC(可以通過引數來設定)。所以好的匹配提供的正確的估計被稱為 inliers,剩下的被稱為 outliers。cv2.findHomography() 返回一個掩模,這個掩模確定了 inlier 和 outlier 點。

接下來我們將介紹四個相關演算法,本次教程只介紹前兩個。

最小二乘法

我們以最簡單的一元線性模型來解釋最小二乘法。什麼是一元線性模型呢? 監督學習中,如果預測的變數是離散的,我們稱其為分類(如決策樹,支援向量機等),如果預測的變數是連續的,我們稱其為迴歸。迴歸分析中,如果只包括一個自變數和一個因變數,且二者的關係可用一條直線近似表示,這種迴歸分析稱為一元線性迴歸分析。如果迴歸分析中包括兩個或兩個以上的自變數,且因變數和自變數之間是線性關係,則稱為多元線性迴歸分析。對於二維空間線性是一條直線;對於三維空間線性是一個平面,對於多維空間線性是一個超平面。

對於一元線性迴歸模型, 假設從總體中獲取了n組觀察值(X1,Y1),(X2,Y2), …,(Xn,Yn)。對於平面中的這n個點,可以使用無數條曲線來擬合。要求樣本回歸函式儘可能好地擬合這組值。綜合起來看,這條直線處於樣本資料的中心位置最合理。 選擇最佳擬合曲線的標準可以確定為:使總的擬合誤差(即總殘差)達到最小。有以下三個標準可以選擇:

1)用“殘差和最小”確定直線位置是一個途徑。但很快發現計算“殘差和”存在相互抵消的問題。
2)用“殘差絕對值和最小”確定直線位置也是一個途徑。但絕對值的計算比較麻煩。
3)最小二乘法的原則是以“殘差平方和最小”確定直線位置。用最小二乘法除了計算比較方便外,得到的估計量還具有優良特性。這種方法對異常值非常敏感。

最常用的是普通最小二乘法:所選擇的迴歸模型應該使所有觀察值的殘差平方和達到最小。(Q為殘差平方和),即採用平方損失函式。

樣本回歸模型:

其中ei為樣本(Xi, Yi)的誤差。

平方損失函式:

則通過Q最小確定這條直線,即確定,以為變數,把它們看作是Q的函式,就變成了一個求極值的問題,可以通過求導數得到。求Q對兩個待估引數的偏導數:

根據數學知識我們知道,函式的極值點為偏導為0的點。

解得:

這就是最小二乘法的解法,就是求得平方損失函式的極值點。

RANSAC演算法

通俗的來講,普通最小二乘是保守派:在現有資料下,如何實現最優。是從一個整體誤差最小的角度去考慮,儘量誰也不得罪。

RANSAC是改革派:首先假設資料具有某種特性(目的),為了達到目的,適當割捨一些現有的資料。

給出最小二乘擬合(紅線)、RANSAC(綠線)對於一階直線、二階曲線的擬合對比:

可以看到RANSAC可以很好的擬合。RANSAC可以理解為一種取樣的方式,所以對於多項式擬合、混合高斯模型(GMM)等理論上都是適用的。

RANSAC簡化版的思路就是:

第一步:假定模型(如直線方程),並隨機抽取Nums個(以2個為例)樣本點,對模型進行擬合:

第二步:由於不是嚴格線性,資料點都有一定波動,假設容差範圍為:sigma,找出距離擬合曲線容差範圍內的點,並統計點的個數:

第三步:重新隨機選取Nums個點,重複第一步~第二步的操作,直到結束迭代:

第四步:每一次擬合後,容差範圍內都有對應的資料點數,找出資料點個數最多的情況,就是最終的擬合結果

至此:完成了RANSAC的簡化版求解。

事實上,以上這些思想屬於機器學習的思想,現在只是簡述,機器學習屬於相當複雜的學科門類,現在不多進行贅述。

我們本次教程只介紹前兩個演算法,下次我們介紹另外兩個演算法,它們都屬於機器學習的相關範疇。

天道酬勤 循序漸進 技壓群雄