halcon 模板匹配 -- find_shape_model

find_shape_model(Image : :  //搜索圖像

                   ModelID, //模板句柄

                  AngleStart,  // 搜索時的起始角度

                  AngleExtent, //搜索時的角度範圍,必須與創建模板時的有交集

                  MinScore, //最小匹配值,輸出的匹配的得分Score 大於該值

                  NumMatches, //定義要輸出的匹配的最大個數

                  MaxOverlap, //當找到的目標存在重疊時,且重疊大於該值時選擇一個好的輸出

                 SubPixel, //計算精度的設置,五種模式,多選2,3

                 NumLevels, //搜索時金字塔的層數

                Greediness : //貪婪度,搜索啓發式,一般都設爲0.9,越高速度快,容易出現找不到的情況

                Row, Column, Angle, Score) //輸出匹配位置的行和列座標、角度、得分。

 

注意:

1. Row、Column的座標並不是模板在搜索圖像中的精確位置,因此不能直接使用他們。這些數值是爲了創建變換矩陣被優化後的,你可以用這個矩陣的匹配結果完成各種任務,比如調整後續步驟的ROI。

2. Score是一個0到1之間的數,是模板在搜索圖像中可見比例的近似測量。如果模板的一半被遮擋,該值就不能超過0.5。

3. Image的domain定義了模型參考點的搜索區域,模型參考點是在create_shape_model中用來創建模型的圖像的domain區域的重 心。不考慮使用函數set_shape_model_origin設置不同的初始位置。在圖像domain區域的這些點內搜索模型,其中模型完全屬於這幅 圖像。這意味着如果模型超出圖像邊界,即使獲得的質量係數(score)大於MinScore也不能找到模型。這種性能可以通過 set_system('border_shape_models','true')改變,這樣那些超出圖像邊界,質量係數大於MinScore的模型也 能找到。這時那些在圖像外面的點看作是被遮擋了,可以降低質量係數。在這種模式下搜索的時間將要增加。

4. 參數AngleStart和AngleExtent確定了模型搜索的旋轉角度,如果有必要,旋轉的範圍會被截取成爲create_shape_model 函數中給定的旋轉範圍。這意味着創建模型和搜索時的角度範圍必須真正的重疊。在搜索時的角度範圍不會改變爲模2*pi的。爲了簡化介紹,在該段落剩下的部 分所有角度都用度來表示,而在find_shape_model函數中使用弧度來設置的。因此,如果創建模板時,AngleStart=-20°、 AngleExtent=40°,在搜索模板函數find_shape_model中設置AngleStart=350°、 AngleExtent=20°,儘管角度模360後是重疊的,還是會找不到模板的。爲了找到模板,在這個例子中必須將AngleStart=350°改 爲AngleStart=-10°。

5. 參數MinScore定義模板匹配時至少有個什麼樣的質量係數纔算是在圖像中找到模板。MinScore設置的越大,搜索的就越快。如果模板在圖像中沒有被遮擋,MinScore可以設置爲0.8這麼高甚至0.9。

6. NumMatches定義了在圖像上找到模板的最大的個數。如果匹配時的質量係數大於MinScore的目標個數多於NumMatches,僅僅返回質量 係數最好的NumMatches個目標位置。如果找的匹配目標不足NumMatches,那麼就只返回找到的這幾個。參數MinScore優於 NumMatches。

7. 如果模型具有對稱性,會在搜索圖像的同一位置和不同角度上找到多個與目標匹配的區域。參數MaxOverlap是0到1之間的,定義了找到的兩個目標區域 最多重疊的係數,以便於把他們作爲兩個不同的目標區域分別返回。如果找到的兩個目標區域彼此重疊並且大於MaxOverlap,僅僅返回效果最好的一個。 重疊的計算方法是基於找到的目標區域的任意方向的最小外接矩形(看smallest_rectangle2)。如果MaxOverlap=0, 找到的目標區域不能存在重疊, 如果MaxOverla p=1,所有找到的目標區域都要返回。

8. SubPixel確定找到的目標是否使用亞像素精度提取。如果SubPixel設置爲'none'(或者'false' 背景兼容),模型的位置僅僅是一個像素精度和在create_shape_model中定義的角度分辨率。如果SubPixel設置爲'interpo lation'(或'true'),位置和角度都是亞像素精度的。在這種模式下模型的位置是在質量係數函數中插入的,這種模式幾乎不花費計算時間,並且能 達到足夠高的精度,被廣泛使用。然而在一些精度要求極高的應用中,模板的位置應該通過最小二乘調整決定,比如通過最小化模板點到相關圖像點的距離。與 'interpolation'相比,這種模式需要額外的計算時間。對於最小二乘調整的模式有:'least_squares', 'least_squares_high', 和'least_squares_very_high'。他們可用來定義被搜索的最小距離的精度,選擇的精度越高,亞像素提取的時間越長。然而,通常 SubPixel設置爲'interpolation'。如果希望設置最小二乘就選擇'least_squares', 因爲這樣才能確保運行時間和精度的權衡。

9. NumLevels是在搜索時使用的金字塔層數,如有必要,層數截成創建模型時的範圍。如果NumLevels=0,使用創建模板時金字塔的層數。另外 NumLevels還可以包含第二個參數,這個參數定義了找到匹配模板的最低金字塔層數。NumLevels=[4,2]表示匹配在第四層金字塔開始,在 第二層金字塔找到匹配(最低的設爲1)。可以使用這種方法降低匹配的運行時間,但是這種模式下位置精度是比正常模式下低的,所謂正常模式是在金字塔最底層 匹配。因此如果需要較高的精度,應該設置SubPixel至少爲'least_squares'。如果金字塔最底層設置的過大,可能不會達到期望的精度, 或者找到一個不正確的匹配區域。這是因爲在較高層的金字塔上模板是不夠具體的,不足以找到可靠的模板最佳匹配。在這種情況下最低金字塔層數應設爲最小值。

10. 參數Greediness確定在搜索時的“貪婪程度”。如果Greediness=0,使用一個安全的搜索啓發式,只要模板在圖像中存在就一定能找到模 板,然而這種方式下搜索是相對浪費時間的。如果Greediness=1,使用不安全的搜索啓發式,這樣即使模板存在於圖像中,也有可能找不到模板,但只 是少數情況。如果設置Greediness=0.9,在幾乎所有的情況下,總能找到模型的匹配。

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