31.2、幾何定位---不支援縮放(1)
⑶、AngleStart, AngleExtent, AngleStep 2
1、clear_shape_model( : : ModelID: ) 13
2、clear_all_shape_models( : : : ) 14
- 建立模板
1、create_shape_model(Template : : NumLevels, AngleStart, AngleExtent, AngleStep, Optimization, Metric, Contrast,
Template:輸入要建立模板的影象
NumLevels:輸入最大影象金字塔級別,預設值為'auto'
AngleStart:輸入模板旋轉的起始角度(單位:弧度)
AngleExtent:輸入模板旋轉角度的範圍(單位:弧度),等於最大旋轉角度於最小旋轉角度的的差值的絕對值。假
設旋轉角度為-10到+10,那麼AngleStar = rad(-10),AngleExtent = rad(+10) - (-10)
AngleStep:輸入角度步長。預設值為'auto'
Optimization:輸入模板優化和模板建立的方法,預設值為'auto'
Metric:極性。預設值'use_polarity'
Contrast:模板影象的模板邊緣對比度的閾值或滯後閾值,以及可選的最小元件(最小邊緣輪廓資訊),預設值'auto'
MinContrast:搜尋影象邊緣的最小對比度。預設值為'auto'
ModelID:模板控制代碼,用於運算元find_shape_model
⑴、Template
運算元create_shape_model根據輸入影象Template建立模板,用於形狀匹配。模板的ROI通過Template的定義
域傳遞,即如果對全圖建立模板,直接傳遞原圖,如果對非全圖建立模板,需要用reduce_domain運算元來減少
定義域。模板影象Template的定義域(區域)的質心(即模板區域的質心)用作模板的原點(參考點),可以
使用運算元set_shape_model_origin設定不同的原點。
⑶、AngleStart, AngleExtent, AngleStep
①定義了模板旋轉角度的範圍,引數AngleStep定義了在旋轉角度範圍類的步長。如果在find_shape_model
運算元中沒有指定亞畫素精度,這個引數制定了find_shape_model的角度所達到的精度。引數AngleSetp的選擇基於目標的大小。如果模板太小,不能產生許多不同離散角度的影象,因此對於較小的模板,AngleStep應該設定的比較大。由於find_shape_model運算元中的角度可以使用亞畫素,一個直徑小於200個畫素可以選擇AngleStep>=1。如果選擇AngleStep = 'auto',運算元create_shape_model將會基於模板大小自定義一個合適的角度步長。可以使用get_shape_model_params來查詢自動計算出來的AngleStep。如果AngleExtent不是AngleStep的整數倍,將會相應的修改AngleStep。
②如果選擇模板的完整預生成(complete pregeneration)模式,不同角度的模板將預生成並儲存到記憶體中。
用來儲存模板的記憶體與角度步長的數量(等於AngleExtent除以AngleStep)和模板的點數成正比。因此,如果AngleStep太小或是AngleExtent太大,將會出現該模板不再合適(虛擬)記憶體的情況。在這種情況下,應該加大角度步長AngleStep或較少角度範圍AngleExtent。在任何情況下,希望模板是完全合適主儲存器的,因為這避免了作業系統的記憶體分頁,較少模板匹配時間。
③如果沒有選擇完成預生成模式(complete pregeneration),基於金字塔的每一層參考姿勢建立模板。這
樣在使用find_shape_model運算元時,該模板在執行時必須轉換為不同的角度和尺度。正因為如此,模板匹配可能需要更多時間。
①引數Optimization設定為不等於'auto'的數字,可以有效的減少模板(邊緣)點數(對於對於特別大的模板
尤為有用)。如果Optimization= 'none' ,這要儲存所有的模板點。在其他情況下,按照Optimization的值來減少模板點數。如果模板點數減少了,需要在find_shape_model算在中將引數Greediness設定一個比較小的值,比如0.7或0.8,。對於比較小的模板,減少模板點數並不能提高搜尋速度,因為這種情況下必須檢查更多的潛在的模板例項。
②如果Optimization設定為'auto',運算元create_shape_model自動確定較少模板點數。
③Optimization有可選的第二個值。Optimization第二個值定義了模板是否進行完整預定義生成是通過選擇
④還應該指出,不能指望兩個模板返回完全相同的結果,因為在執行時變換模板一定會導致變換模板和預生
①引數Metric定義了在影象中匹配模板的條件。如果Metric = 'use_polarity',影象中的目標必須與模板具有一
樣的對比度。例如,如果模板是一個亮的目標在一個暗的背景上,那麼只有那些比背景亮的目標才能被
③如果Metric = 'ignore_local_polarity',及時區域性對比度改變也能走到模板。例如當目標包含一部分中等灰度,
上面三個Metric僅僅使用與單通道影象。如果是多通道影象作為模板或搜尋影象,僅僅第一通道被使用(並且不會返回錯誤資訊)
④如果Metric = 'ignore_color_polarity',及時區域性顏色對比度變化也能找到模板。例如,當目標的部分割槽域顏
①引數Contrast決定模板的對比度。對比度是用來測量目標與背景之間和目標不同部分之間區域性的灰度
差異Contrast的選擇應該確保用於建立模板的主要特徵。Contrast可以是兩個數值,這時模板使用近似edges_image運算元中的滯後閾值方式來進行分割。這裡的第一個數值是比較低的閾值,第二個是比較高的閾值。較低的閾值,能夠檢測出的邊線越多,結果也就越容易受到圖片噪聲的影響,並且越容易從影象中挑出不相關的特性。與此相反,一個高的閾值將會遺失細的或者短的線段。為了取得比較好的結果,這裡使用了雙閾值(遲滯閾值)的方法,綜合它們結果,取各其優點去其缺點。方法如下:首先使用一個高閾值去尋找邊線開始的地方。一旦找到了一個開始點,我們在影象上逐點跟蹤邊緣路徑,當大於低閾值數值時一直紀錄邊緣位置,直到數值小於低閾值數值之後才停止紀錄。這種方法假設邊緣是連續的界線,並且我們能夠跟蹤前面所看到的邊緣的模糊部分,而不會將影象中的噪聲點標記為邊緣。
②Contrast有第三個可選引數,這個數值決定了選擇重要模板邊緣最小長度。即如果按照指定的對比度查
找出來的邊緣長度小於這個引數,則這個邊緣邊則被忽略。
③三個引數的引數設定方式(具體設定方式不用深究,在匹配助手中調好後會自動插入):
▲如果Contrast設定為'auto',則create_shape_model會自動確定上面三個閾值。
▲如果要設定第三個可選引數(模板最小長度),而不是用遲滯閾值(只使用一個閾值)。在
Contrast中必須指定三個數值,前面兩個數值設定為相等即可。[20,20,5]
▲僅僅自動設定對比度('auto_contrast')、自動滯後閾值('auto_contrast_hyst')或自動最小長度
('auto_min_size')中的一個,其他沒有自動設定的數值可以按照上面的格式在進行設定。同樣可以允許各種組合,例如:如果設定['auto_contrast','auto_min_size']表示對比度和最小邊緣長度自動確定;如果設定為['auto_min_size',20,30],最小尺寸自動設定,遲滯閾值分別被設定為20和30.
④有時候對比度閾值自動設定的結果並不滿意,例如,由於一些具體應用的原因當某一個模板元件被包含或
是被抑制時,目標包含幾種不同的對比度是,手動設定的效果會更好。因此對比度閾值可以使用determine_shape_model_params運算元自動確定,也可以在呼叫create_shape_model之前使用
①MinContras決定模板的最小對比度,即這個引數從影象中吧模板和噪聲分離。因此,MinContras一個
②如果要在一幅對比度非常低的影象中匹配模板,MinContras要設定成一個很小的值。
③如果在噪聲嚴重的影象中匹配模板,為了保證算在find_shape_model提取的模板的位置和角度的魯棒性和
④如果MinContras設定為'auto',則create_shape_model根 據模板影象自動確定。
⑤如果匹配影象中的噪聲和模板中的噪聲相類似,自動確定MinContras才有意義。
⑥此外,在一些情況下,為了增大(針對被遮擋的物體)魯棒性,建議增大自動確定的值。自動計算的最小
對比度可以使用get_shape_model_params運算元來檢視。
2、create_shape_model_xld(Contours : : NumLevels, AngleStart, AngleExtent, AngleStep, Optimization, Metric, MinContrast :
功能:根據輸入的XLD建立幾何形狀模板
Contours:輸入XLD輪廓
NumLevels:輸入最大影象金字塔級別,預設值為'auto'
AngleStart:輸入模板旋轉的起始角度(單位:弧度)
AngleExtent:輸入模板旋轉角度的範圍(單位:弧度),等於最大旋轉角度於最小旋轉角度的的差值的絕對值。假
設旋轉角度為-10到+10,那麼AngleStar = rad(-10),AngleExtent = rad(+10) - (-10)
AngleStep:輸入角度步長。預設值為'auto'
Optimization:輸入模板優化和模板建立的方法,預設值為'auto'
Metric:極性。預設值'use_polarity'
MinContrast:搜尋影象邊緣的最小對比度。預設值為5
ModelID:模板控制代碼,用於運算元find_shape_model
(1)、create_shape_model_xld建立模板運算元和 create_shape_model的引數類似,create_shape_model_xld比
create_shape_model少了Contrast,因為輸入的輪廓(xld-contours)是沒有對比度的。其餘引數描述看
create_shape_model
(2)、如果Contours提供了屬性'edge_direction'(定義了邊緣極性),Metric引數的值只能選'use_polarity'和
'ignore_global_polarity'。建立的輪廓具有該屬性,例如使用運算元edges_sub_pix(例如引數模式設定為'canny')建立的邊緣。否則,可以通過set_shape_model_metric(這個運算元確定影象邊緣極性)來選擇兩個極性。
注:
與運算元create_shape_model相比,運算元create_shape_model_xld不能指定模板元件最小尺寸(最小邊緣長度)。為了消除模板的最小元件,在呼叫create_shape_model_xld前,應該先呼叫select_contours_xld,消除短的輪廓。