find_aniso_shape_model(Image : : ModelID, AngleStart, AngleExtent, ScaleRMin, ScaleRMax, ScaleCMin, ScaleCMax, MinScore, NumMatches, MaxOverlap, SubPixel, NumLevels, Greediness : Row, Column, Angle, ScaleR, ScaleC, Score)
1、算子find_aniso_shape_model在輸入圖像Image(參數)中找到各向異性尺度不變形狀模型ModelID(參數)的最佳NumMatches(參數)個實例。模型ModelID(參數)必須先通過調用create_aniso_shape_model或read_shape_model創建。
2、所得實例在行和列方向上的位置,旋轉和縮放會以參數Row,Column,Angle,ScaleR和ScaleC的形式返回。 其中座標Row和Column是搜索圖像中形狀模型原點的座標。 默認情況下,原點是用於使用create_aniso_shape_model創建形狀模型的圖像的域(區域)的重心。 可以使用set_shape_model_origin設置不同的原點。
3、請注意,座標Row和Column不完全對應於搜索圖像中模型的位置。 因此,您不能直接使用它們。 相反,這些值可以進行優化後用於創建轉換矩陣。
4、通過轉換矩陣,我們可以使用匹配結果來完成各種任務。例如調整其他處理步驟的ROI。
5、每個找到的實例的得分都在Score中返回。 分數是介於0和1之間的數字,這是模型在圖像中可見多少的近似度量。 例如,如果模型的一半被遮擋,則得分不能超過0.5。
6、圖像Image(參數)的域確定了模型參考點的搜索空間。模型參考點是指在算子create_aniso_shape_model中用於創建形狀模型的圖像的域的重心。 不考慮使用set_shape_model_origin設置的不同原點。 在圖像的域內搜索模型,模型必須完全位於圖像內。 這意味着如果模型擴展超出圖像邊界,則該模型將不會被發現,即使它的分數大於MinScore(參數),這個行爲可以通過set_system('border_shape_models','true')來改變,這可以使得超出圖像邊框的模型在得分大於MinScore時被發現。 在這裏,位於圖像之外的點被認爲被遮擋,即,它們會降低得分。 應該注意的是,在這種模式下,搜索的運行時間會增加。
7、參數AngleStart和AngleExtent決定了搜索模型的旋轉範圍。
8、 ScaleRMin,ScaleRMax,ScaleCMin和ScaleCMax的參數決定了搜索模型的行和列方向的縮放範圍。
9、如有必要,將兩個範圍縮小到使用create_aniso_shape_model創建模型時給出的範圍。這意味着模型和搜索的角度範圍必須真正重疊。
10、搜索中的角度範圍不適用於模數360°。例如,如果使用AngleStart = -20°和AngleExtent = 40°創建模型,使用AngleStart = 350°和AngleExtent = 20°搜索模型,則模型不會被發現。即使將他們視爲模數360°時,角度範圍將重疊,模型也是不會被發現。所以需要以AngleStart = -10°和AngleExtent = 20°搜索模型。
11、如果模型ModelID是由算子create_shape_model或create_scaled_shape_model創建的,那將會以1.0的各向同性縮放或者在ScaleRMin到ScaleRMax範圍內的各向同性縮放來搜索模型。
12、參數ScaleR和ScaleC返回實際的縮放率。
13、注意:某些稍微超出旋轉和縮放範圍的實例也有可能被識別出來。如果指定的搜索範圍小於創建模型時給出的範圍,則可能會發生這種情況。
14、參數MinScore確定了實例的最小匹配分數。選擇較大的MinScore,搜索速度越快。如果模型可以預測到不會被遮擋,MinScore可能設置爲高達0.8甚至0.9。如果匹配沒有跟蹤到最低金字塔級別,那麼可能會發現比分低於MinScore的匹配。
15、可以使用NumMatches確定要查找的最大實例數。如果圖像中找到的分數大於MinScore的NumMatches實例多,則只返回最佳的NumMatches個實例。如果少於NumMatches,則只返回能找到的實例,即參數MinScore優先於NumMatches。
16、如果模型呈現對稱性,則可能發生在圖像中發現具有類似位置但具有不同旋轉的多個實例。參數MaxOverlap通過分數(即,0和1之間的數字)來確定兩個實例可以最多重疊,以便將它們視爲不同的實例,並且單獨返回。如果兩個實例彼此重疊超過MaxOverlap,則只返回最佳實例。重疊的計算基於所找到的實例的任意方向(見minimum_rectangle2)的最小包圍矩形。如果MaxOverlap = 0,發現的實例可能根本不重疊,而對於MaxOverlap = 1,所有實例都將返回。
17、參數SubPixel確定是否應以亞像素精度提取實例。如果SubPixel設置爲“none”(或“false”用於向後兼容),則只能通過像素精度和使用create_aniso_shape_model指定的角度和比例分辨率來確定模型的姿態。如果SubPixel設置爲“interpolation”(或“true”),則以亞像素精度確定位置以及旋轉和縮放。在這種模式下,模型的姿態是通過得分函數進行插值得到的的。該模式幾乎不需要計算時間,並達到了對於大多數應用來說足夠高的精度。
18、然而,在一些應用中,精度要求非常高。在這些情況下,可以通過最小二乘法調整來確定模型的姿態。與“interpolation”相反,該模式需要額外的計算時間。可以使用不同的最小二乘法調整模式('least_squares','least_squares_high'和'least_squares_very_high')來確定正在搜索最小距離的準確性。然而,選擇精度越高,子像素提取將採取越長的時間。通常,SubPixel應設置爲“interpolation”。如果需要進行最小二乘法調整,則應選擇“least_squares”,因爲這將導致運行時和精度之間的最佳權衡。
19、相對於模型而言有稍微變形的物體,在某些情況下,無法被找到或者即使被找到,精度也很低。對於這樣的對象,可以在參數SubPixel中額外傳遞最大允許對象變形。變形必須以像素爲單位指定。這可以通過傳遞可選參數值“max_deformation”,後跟一個0到32之間的整數值(在同一個字符串中),該值指定最大變形。例如,如果對象的形狀相對於存儲在模型中的形狀可以變形多達2個像素,則必須在SubPixel中傳遞值“max_deformation 2”。傳遞值“max_deformation 0”時,進行搜索時要求物體不能變形,與不設定“max_deformation”的作用一樣。
20、請注意,最大變形值設定得較高時通常會導致運行時間增加。此外,選擇變形值越高,發現錯誤模型實例的風險越高。這兩個問題主要出現在搜索小物體或具有精細結構的物體時。這是因爲這種物體在高變形時會失去其特徵形狀,而特徵形狀對於強大的搜索來說是很重要的。還要注意,對於較高的變形,如果在物體附近存在雜波,部分遮擋物體的精度可能會降低。因此,最大變形應儘可能選擇儘可能小,只有在有必要的時候才設置得高一點。
21、當指定高於0的變形時,匹配分數的計算取決於亞像素提取的所選值即subpixel的值。在大多數情況,如果選擇了“minimum_squares”,“minimum_squares_high”或“least_squares_very_high”(參考上文第17點),則匹配的分數會發生變化(與“none”或“interpolation”進行比較)。此外,如果選擇最小二乘調整中的一個,則增加最大變形時得分可能增加,因爲對於模型點,可以找到更多對應的圖像點。
22、搜索期間使用的金字塔數量由NumLevels確定。如果需要,使用create_aniso_shape_model創建形狀模型時的金字塔數量,如果NumLevels設置爲0,則使用create_aniso_shape_model中指定的金字塔級別數。可選地,NumLevel可以包含第二個值,用於確定跟蹤發現的匹配項的最低金字塔級別。因此,NumLevel的值[4,2]意味着匹配從第四個金字塔級別開始,並跟蹤匹配到第二個最低金字塔級別(最低金字塔級別由值1表示)。該機制可用於減少匹配的運行時間。然而,應當注意,一般來說,在該模式中提取的姿態參數的準確度比在正常模式中更低,在正常模式中,匹配被跟蹤到最低金字塔級。因此,如果需要高精度,則應將SubPixel設置爲至少“'least_squares”。
23、如果使用的最低金字塔級別被選擇得太大,可能會無法實現所需的精度,或者發現模型的錯誤實例,因爲模型在較高的金字塔級別上不夠具體,不能可靠地選擇正確的模型實例。在這種情況下,要使用的最低金字塔級別必須設置爲較小的值。
24、在質量差的輸入圖像中,即在例如散焦,變形或嘈雜的圖像中,通常在最低金字塔級別上不能發現形狀模型的實例。這種行爲的原因是丟失或變形的邊緣信息是由於圖像質量差的結果。然而,邊緣信息在更高的金字塔水平上可能是足夠的。但是,如果使用在高級金字塔級別上發現的實例,請記住上述對準確性和魯棒性的限制。合適的金字塔級別的選擇,即可以在其上找到形狀模型的至少一個實例的最低金字塔級別取決於模型和輸入圖像。這個金字塔級別可能因圖像而異。爲了便於對質量差的圖像進行匹配,可以在匹配期間自動確定可以找到至少一個模型實例的最低金字塔級別。要激活此機制,必須在NumLevels中指定最低金字塔級別。如果例如NumLevels被設置爲[4,-2],則匹配從第四金字塔級別開始並且跟蹤到第二最低金字塔級別的匹配。這意味着在金字塔級別2上搜索形狀模型的實例。如果在該金字塔級別上沒有找到模型實例,則確定最低金字塔級別,可以在哪個模型的至少一個實例上找到。然後將返回此金字塔級別的實例。
25、參數Greediness決定了搜索的貪婪程度。如果Greediness = 0,則使用安全搜索模式,如果模型在圖像中可見,則始終會找到該模型。然而,在這種情況下,搜索將相對耗時。如果貪婪= 1,則使用不安全的搜索模式,即使在圖像中可見,也可能導致在極少數情況下找不到該模型。對於貪婪= 1,實現最大搜索速度。
26、使用運算符set_shape_model_param可以爲find_aniso_shape_model指定'timeout'。如果find_aniso_shape_model達到此“timeout”,則會終止搜索,並返回錯誤代碼9400(H_ERR_TIMEOUT)。
27、根據ScaleRMin,ScaleRMax,ScaleCMin和ScaleCMax指定的縮放範圍,如果形狀模型未預先生成,則find_aniso_shape_model需要大量時間才能釋放緩存的轉換。由於在發生超時之後必須釋放此轉換,所以在這種情況下find_aniso_shape_model的運行時間超過了此時指定的“timeout”的值。
參數
1、Image
(input_object) (multichannel-)image → object (byte / uint2)
需要找到模型的圖像。
2、ModelID
(input_control) shape_model → (integer)
模型的句柄。
3、AngleStart
(input_control) angle.rad → (real)
模型的最小旋轉角度。
默認值:-0.39
建議值:-3.14,-1.57,-0.78,-0.39,-0.20,0.0
4、AngleExtent
(input_control) angle.rad → (real)
旋轉角度的範圍。
默認值:0.78
建議值:6.29,3.14,1.57,0.78,0.39,0.0
限制:AngleExtent> = 0
5、ScaleRMin
(input_control) number → (real)
模型在行方向上的最小縮放比例。
默認值:0.9
建議值:0.5,0.6,0.7,0.8,0.9,1.0
限制:ScaleRMin> 0
6、ScaleRMax
(input_control) number → (real)
模型在行方向上的最大縮放比例。
缺省值:1.1
建議值:1.0,1.1,1.2,1.3,1.4,1.5
限制:ScaleRMax> = ScaleRMin
7、ScaleCMin
(input_control) number → (real)
模型在列方向上的最小縮放比例。
默認值:0.9
建議值:0.5,0.6,0.7,0.8,0.9,1.0
限制:ScaleCMin> 0
8、ScaleCMax
(input_control) number → (real)
模型在列方向上的最大縮放比例。
缺省值:1.1
建議值:1.0,1.1,1.2,1.3,1.4,1.5
限制:ScaleCMax> = ScaleCMin
9、MinScore
(input_control) real → (real)
要找到的模型的實例的最小分數。
默認值:0.5
建議值:0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0
典型值範圍:0≤MinScore≤1
最小增量:0.01
推薦增量:0.05
10、NumMatches
(input_control) integer → (integer)
要找到的模型的實例數。
默認值:1
建議值:0,1,2,3,4,5,10,20
11、MaxOverlap
(input_control) real → (real)
要找到的模型的實例的最大重疊。
默認值:0.5
建議值:0.0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0
典型值範圍:0≤MaxOverlap≤1
最小增量:0.01
推薦增量:0.05
12、SubPixel
(input_control) string(-array) → (string)
亞像素精度。
默認值:'least_squares'
值列表:'none','interpolation','least_squares','least_squares_high','least_squares_very_high','max_deformation
1','max_deformation 2','max_deformation 3','max_deformation 4','max_deformation 5'
max_deformation 6'
13、NumLevels
(input_control) integer(-array) → (integer)
匹配中使用的金字塔數量(如果| NumLevels | = 2,則使用最低金字塔級別)。
默認值:0
值列表:0,1,2,3,4,5,6,7,8,9,10
14、Greediness
(input_control) real → (real)
搜索模式的“貪婪”(0:安全但緩慢; 1:快速,但可能會錯過匹配)。
默認值:0.9
建議值:0.0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0
典型值範圍:0≤貪婪度≤1
最小增量:0.01
推薦增量:0.05
15、Row
(output_control) point.y-array → (real)
找到的模型的實例的行座標。
16、Column
(output_control) point.x-array → (real)
找到的模型實例的列座標。
17、Angle
(output_control) angle.rad-array → (real)
找到的模型的實例的旋轉角度。
18、ScaleR
(output_control) number-array → (real)
在行方向上找到模型的實例的比例。
19、ScaleC
(output_control) number-array → (real)
在列方向上找到模型的實例的比例。
20、Score
(output_control) real-array → (real)
發現的模型實例的得分。
例子
find_aniso_shape_model(m_hImageView,
htSearchModel, -(HTuple(10).Rad()), HTuple(20).Rad(),
0.9, 1.7, 0.9, 1.1, 0.7, 0, 0.5, "least_squares", 0, 0.8, &htRow, &htCol, &htAgl, &htScor1, &htScor2, &htScor);
1、模板的旋轉角度範圍:[-10,10]
2、行座標縮放範圍:[0.9,1.7]
3、縱座標縮放範圍:[0.9,1.1]
4、最小匹配分數:0.7
5、要找到模板的數量:0(有多少個返回多少個)
6、最大重疊:0.5,重疊超過一半的面積就返回分數高的。
7、亞像素精度:最小二乘法其中一種模式,least_squares
8、金字塔數量:0,即使用create_aniso_shape_model中指定的金字塔級別數。
9、貪婪度:0.8