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,在幾乎所有的情況下,總能找到模型的匹配。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM