1. 程式人生 > 其它 >31.2、幾何定位---不支援縮放(1)

31.2、幾何定位---不支援縮放(1)

一、    建立模板    1

1create_shape_model(Template : : NumLevels, AngleStart, AngleExtent, AngleStep, Optimization, Metric, Contrast,    1

⑴、Template    1

⑵、NumLevels    1

⑶、AngleStart, AngleExtent, AngleStep    2

⑷、Optimization    3

⑸、Metric    4

⑹、Contrast    5

⑺、MinContrast    7

2create_shape_model_xld(Contours : : NumLevels, AngleStart, AngleExtent, AngleStep, Optimization, Metric, MinContrast :    7

二、    查詢模板    8

1find_shape_model(Image : : ModelID, AngleStart, AngleExtent, MinScore, NumMatches, MaxOverlap, SubPixel,    8

(1)AngleStart, AngleExtent    8

(2)

MinScore    9

(3)NumMatches    9

(4)MaxOverlap    9

(5)SubPixel    9

(6)NumLevels    11

(7)Greediness    11

(8)Row, Column, Angle    12

(9)Score    12

2find_shape_models(Image : : ModelIDs, AngleStart, AngleExtent, MinScore, NumMatches, MaxOverlap, SubPixel,    12

3、出邊界計算方式    13

4、設定超時    13

三、    釋放模板資源    13

1clear_shape_model( : : ModelID: )    13

2clear_all_shape_models( : : : )    14

四、    引數關係優化匹配    14

 

  1. 建立模板

1、create_shape_model(Template : : NumLevels, AngleStart, AngleExtent, AngleStep, Optimization, Metric, Contrast,

                    MinContrast : ModelID)

    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設定不同的原點。

    ⑵、NumLevels

模板建立使用了多影象的金字塔級別,儲存在記憶體中。如果選擇了完整預建立模式,在每一級別生成多旋轉角度的模板,NumLevels確定金字塔的級別,級別越大,匹配使用的時間就越少。另外必須保證最高金字塔的影象具有足夠的資訊(資訊指的是模板的邊緣點)(至少四個點),可以通過運算元inspect_shape_model運算元的輸出結果來檢視。如果最高層金字塔沒有足夠的資訊,演算法內部會自動較少金字塔的級別,知道找到足夠點為止。如果最底層金字塔的資訊太少,運算元就會報錯。如果NumLevels設定為'auto'(或0),create_shape_model會自動計算金字塔的級別(向後相容,直到找到合適的邊緣點為止)。如果金字塔的級別太大,模板不容易匹配出來,這時需要將find_shape_model運算元中的MinScore和Greediness引數設定低一些。如果金字塔的級別太小,find_shape_model運算元找到的模板時間會增加。這種情況下,可以使用inspect_shape_model輸出結果來選擇一個合適的金字塔級別、

    ⑶、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

引數Optimization設定為不等於'auto'的數字,可以有效的減少模板(邊緣)點數(對於對於特別大的模板

尤為有用)。如果Optimization= 'none' ,這要儲存所有的模板點。在其他情況下,按照Optimization的值來減少模板點數。如果模板點數減少了,需要在find_shape_model算在中將引數Greediness設定一個比較小的值,比如0.7或0.8,。對於比較小的模板,減少模板點數並不能提高搜尋速度,因為這種情況下必須檢查更多的潛在的模板例項。

如果Optimization設定為'auto',運算元create_shape_model自動確定較少模板點數。

Optimization有可選的第二個值。Optimization第二個值定義了模板是否進行完整預定義生成是通過選擇

'pregeneration'或者'no_ pregeneration'來設定。可以通過set_system'pregenerate_shape_models' , 'true'/'false')預設值為'no_ pregeneration'即沒有完整預定義生成。模板完整預定義生成通常會導致比較低的執行時間,因為模板不需要在執行時(find_shape_model)進行轉換。但是在這種情況下,建立模板需要很大的記憶體和時間。

還應該指出,不能指望兩個模板返回完全相同的結果,因為在執行時變換模板一定會導致變換模板和預生

成的變換模板之間產生不同的內部資料。比如,如果模板沒有完整預生成,在find_shape_model運算元中通常會返回一個較低的scores,這可能需要將MinScore設定成一個較低的值(比進行了完整預生成的模板的MinScore低)。此外,在兩個模板中的差值演算法獲得的姿位可能略有不同。如果希望是高精度,應該使用最小二乘調整得到的模板位姿。

    ⑸、Metric

        引數Metric定義了在影象中匹配模板的條件。如果Metric = 'use_polarity',影象中的目標必須與模板具有一

            樣的對比度。例如,如果模板是一個亮的目標在一個暗的背景上,那麼只有那些比背景亮的目標才能被

            找到。

如果Metric = 'ignore_global_polarity',在兩者(目標和背景)對比度完全相反也能找到目標。在上面例子中,如果目標是比背景暗的也能找到。find_shape_model在這種情況下執行時間稍微增加。

如果Metric = 'ignore_local_polarity',及時區域性對比度改變也能走到模板。例如當目標包含一部分中等灰度,

並且其中部分是比較亮部分和比較暗部分,使用這種模式是非常有用的。。find_shape_model在這種情況下執行時間顯著增加。最好的方法是使用create_shape_model建立幾個反映目標可能的對比度變化的模板,然後同時使用find_shape_model去匹配它們。

上面三個Metric僅僅使用與單通道影象。如果是多通道影象作為模板或搜尋影象,僅僅第一通道被使用(並且不會返回錯誤資訊)

如果Metric = 'ignore_color_polarity',及時區域性顏色對比度變化也能找到模板。例如,當目標的部分割槽域顏

色發生變化(從紅到綠)的情況。如果不能提前知道哦目標在那一通道時可是的,這種模式非常有用。在這種情況下find_shape_model在這種情況下執行時間急劇增加。'ignore_color_polarity'可以使用於具有任意通道數目的影象中。如果使用於單通道,它的效果和'ignore_local_polarity'是完全相同的。需要注意的是,如果Metric = 'ignore_color_polarity'create_shape_model建立的模板的通道數目和find_shape_model中的影象通道數目可以使不同的。例如,可以使用綜合生成的單通道影象建立模板。另外,這些通道不需要時通過光譜細分(像RGB影象)的,這些通道還可以包括具有不同方向照亮同一個目標所獲得的影象。

    ⑹、Contrast

    引數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],最小尺寸自動設定,遲滯閾值分別被設定為2030.

有時候對比度閾值自動設定的結果並不滿意,例如,由於一些具體應用的原因當某一個模板元件被包含或

是被抑制時,目標包含幾種不同的對比度是,手動設定的效果會更好。因此對比度閾值可以使用determine_shape_model_params運算元自動確定,也可以在呼叫create_shape_model之前使用

⑺、MinContrast

        MinContras決定模板的最小對比度,即這個引數從影象中吧模板和噪聲分離。因此,MinContras一個

好的取值選擇是:影象中的噪聲灰度值的變換範圍。路噪聲灰度值的波動範圍是10個灰度級,那麼MinContras應該設定為10.如果模板影象和搜尋影象時多通道影象,MinContra就應該設定為10的開立方。

MinContras必須必Contras小。

如果要在一幅對比度非常低的影象中匹配模板,MinContras要設定成一個很小的值。

如果在噪聲嚴重的影象中匹配模板,為了保證算在find_shape_model提取的模板的位置和角度的魯棒性和

準確性,MinContras應該比噪聲灰度值的範圍要稍大。

如果MinContras設定為'auto',則create_shape_model 據模板影象自動確定。

如果匹配影象中的噪聲和模板中的噪聲相類似,自動確定MinContras才有意義。

此外,在一些情況下,為了增大(針對被遮擋的物體)魯棒性,建議增大自動確定的值。自動計算的最小

    對比度可以使用get_shape_model_params運算元來檢視。

2create_shape_model_xld(Contours : : NumLevels, AngleStart, AngleExtent, AngleStep, Optimization, Metric, MinContrast :

                        ModelID)

    功能:根據輸入的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,消除短的輪廓。