【快速閱讀四】基於邊緣信息的模版匹配中貪婪度參數的簡單解析。

  對這個課題稍作研究,以便記錄。

   在基於邊緣的模版匹配中,我們知道可以有個貪婪度參數可以設置。在Halcon的幫助文檔中,也有對他進行說明。我們在Halcon那本經典的書上,沒有看到對這個參數的解析。不過他也有講到在計算某個候選位置的得分時,如果滿足一定的條件也可以提前結束對得分的判斷,而判定這個點不是一個候選點,原文貼圖如下: 

      

   這裏我通俗的講解下爲什麼可以有這個判斷條件,也就是這個公式是如何得到的。

  我們知道,某個點的最大得分必然是1,這隻有在每個點都和模版的特徵點信息完全一致的情況下獲取,這個時候,每個點的得分都是1/n,同時單獨一個點的最大得分也是1/n,如果我們設定了目標的最小得分位Smin,那麼當計算到第j個點後,還剩下 n-j 個點沒有計算得分,那麼最理想的情況就是這剩下的 n-j 個點都和模版對應的特徵點完全一樣,這樣,剩下點的最大得分即爲:  1/n *(n - j), 此時,如果前n個點的累計得分Sj 再加上後續的最大的理想得分 還小於Smin的話,那這個點肯定就不能滿足目標的得分了,即:

       

  公式稍作移位後即得到:

        

  即書中的公式。

  當Smin = 0.7時,假如有100個邊緣點,則不同的j 和 對應的臨界值如下圖所示:

                  

  前面三十個點對應的臨界值是負數,是沒有什麼意義的,也麼有必要做判斷。

  當在程序中做這種判斷時,所進行的操作是安全的,不會帶來任何邏輯上的錯誤,也不會因爲停止繼續計算而造成目標漏判等問題,這個操作也會大大的提高程序的速度,畢竟大部分目標點都是無效的。

  另外,如果更加激進一點的判斷手段呢,就是如果前面j個點的累計得分小於 平均值,則認爲他不可能得到目標了,即如果符合下式,則直接退出計算:      

                                     

  很明顯,當我們計算的前j個點恰好位於光照不均勻區或瑕疵區域時,很有可能把有效的目標點給剔除了,這樣就喪失了意義,但是在快接近最後一些匹配點時,這樣的規則就能較爲安全的實現提前退出,因此,在codeproject的一個文章裏,就提出了一個帶貪婪度參數的一個停止計算公式:

      

  其中g表示貪婪度參數,其範圍是[0,1],當其爲0是,即爲前述的最安全的公式,爲1時,則爲後續的最激進的公式。

  這個停止標準呢,在計算特徵點時,前面的一些特徵點使用的是較爲安全的推斷公式,隨着特徵點數量的增加,則越來越向後續激進的公式靠近。

  以下是一些比較曲線:

            

   其中紅色爲g = 0.5時的結果,綠色爲g=0.7時的結果,藍色的爲安全的結束線,品紅色的爲最不請安全的停止線。

  其實在實際編程時,還要在前面的那個min公式里加上一個max的,即那個停止值不能小於0的。

  還是感覺這個公式有點不太完美,應該還可以有更爲合適的公式的。

  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章