HALCON形狀匹配(轉)

http://blog.csdn.net/shiwaxinbin/article/details/7244507

 HALCON形狀匹配(轉)

  

LIntExport Herror create_shape_model(

const Hobject&  Template ,  //reduce_domain後的模板圖像

Hlong  NumLevels,  //金字塔的層數,可設為「auto」或0—10的整數

Double  AngleStart,  //模板旋轉的起始角度

Double  AngleExtent,  //模板旋轉角度范圍, >=0

Double  AngleStep,  //旋轉角度的步長, >=0 and <=pi/16

const char*  Optimization,  //設置模板優化和模板創建方法

const char*  Metric,  //匹配方法設置

Hlong  Contrast,  //設置對比度

Hlong  MinContrast ,  //設置最小對比度

Hlong*  ModelID )  //輸出模板句柄

 

進一步分析:

NumLevels越大,找到匹配使用的時間就越小。另外必須保證最高層的圖像具有足夠的信息(至少四個點)。可以通過inspect_shape_model函數查看設置的結果。如果最高層金字塔的消息太少,算法內部會自動減少金字塔層數,如果最底層金字塔的信息太少,函數就會報錯。如果設為auto,算法會自動計算金字塔的層數,我們可以通過get_shape_model_params函數查看金字塔的層數。如果金字塔的層數太大,模板不容易識別出來,這是需要將find_shape_model函數中MinScore和Greediness參數設置的低一些。如果金字塔層數太少找到模板的時間會增加。可以先使用inspect_shape_model函數的輸出結果來選擇一個較好的金字塔層數。

參數AngleStart、AngleExtent定義了模板可能發生旋轉的范圍。注意模板在find_shape_model函數中只能找到這個范圍內的匹配。參數 AngleStep定義了旋轉角度范圍內的步長。 如果在find_shape_model函數中沒有指定亞像素精度,這個參數指定的精度是可以實現find_shape_mode函數中的角度的。參數AngleStep的選擇是基於目標的大小的,如果模板圖像太小不能產生許多不同離散角度的圖像,因此對於較小的模板圖像AngleStep應該設置的比較大。如果AngleExtent不是 AngleStep的整數倍, 將會相應的修改AngleStep 。

如果選擇 complete pregeneration ,不同角度的模板圖像將會產生並保存在內存中。用來存儲模板的內存與旋轉角度的數目和模板圖像的的點數是成正比的。 因此,如果AngleStep太小或是AngleExtent太大, 將會出現該模型不再適合(虛擬)內存的情況。在任何情況下,模型是完全適合主存儲器的,因為這避免了操作系統的內存分頁,使得尋找匹配模板的時間變短。由於find_shape_model函數中的角度可以使用亞像素精度,一個直徑小於200像素的模板可以選擇AngleStep >= 1. 如果選擇AngleStep='auto' (or 0 向後兼容), create_shape_model將會基於模板的大小自動定義一個合適的角度步長. 自動計算出來的AngleStep 可以使用get_shape_model_params函數查看。

如果沒有選擇complete pregeneration, 該模型會在每一層金字塔上建立在一個參考的位置。這樣在find_shape_model函數運行時,該模型必須轉化為不同的角度和尺度在運行時在。正因為如此,匹配該模型可能需要更多的時間。

對於特別大的模板圖像,將參數Optimization設置為不同於'none'的其他數值是非常有用的。如果Optimization = 'none', 所有的模型點將要存儲。在其他情況下, 按照Optimization的數值會將模型的點數減少. 如果模型點數變少了,必須在find_shape_model函數中將參數Greediness設為一個比較小的值, 比如:0.7、0.8。對於比較小的模型, 減少模型點數並不能提高搜索速度,因為這種情況下通常顯著更多的潛在情況的模型必須進行檢查。如果Optimization設置為'auto', create_shape_model自動確定模型的點數。

Optimization的第二個值定義了模型是否進行預處理(pregenerated completely),是通過選擇'pregeneration'或者'no_pregeneration'來設置的。如果不使用第二個值(例如:僅僅設置了第一個值), 默認的是系統中的設置,是通過set_system('pregenerate _shape_models',...)來 設置的,對於默認值是 ('pregenerate_shape_models' = 'false'), 模型沒有進行預處理. 模型的預處理設置通常會導致比較低的運行時間,因為模型不需要 在運行時間時轉換。然而在這種情況下,內存的要求和創建模板所需要的時間是比較高的。 還應該指出,不能指望這兩個模式返回完全相同的結果,因為在運行時變換一定會導致變換模型和預處理變換模型之間不同的內部數據。比如,如果模型沒有 completely pregenerated,在find_shape_model函數中通常返回一個較低的scores,這可能需要將MinScore設置成一個較低的 值。此外,在兩個模型中插值法獲得的位置可能略有不同。如果希望是最高精確度,應該使用最小二乘調整得到模型位置。

參數Contras決定著模型點的對比度。對比度是用來測量目標與背景之間和目標不同部分之間局部的灰度值差異。Contrast的選擇應該確保模板中的主要特征用於模型中。Contrast也可以是兩個數值,這時模板使用近似edges_image函數中滯後閾值的算法進行分割。這裡第一個數值是比較低的閾值,第二個數值是比較高的閾值。Contrast也可以包含第三個,這個數值是在基於組件尺寸選擇重要模型組件時所設置的閾值,比如,比指定的最小尺寸的點數還少的組件將被抑制。這個最小尺寸的閾值會在每相鄰的金字塔層之間除以2。如果一個小的模型組件被抑制,但是不使用滯後閾值,然而在Contrast中必須指定三個數值,在這種情況下前兩個數值設置成相同的數值。這個參數的設置可以在inspect_shape_model函數中查看效果。如果Contrast設置為'auto',create_shape_model將 會自動確定三個上面描述的數值。或者僅僅自動設置對比度('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之前使用inspect_shape_mode函數檢查效果。

MinContrast用來確定在執行find_shape_model函數進行識別時模型的哪一個對比度必須存在,也就是說,這個參數將模型從噪聲圖像中分離出來。因此一個好的選擇應該是在圖像中噪聲所引起的灰度變化范圍。例如,如果灰度浮動在10個灰度級內,MinContrast應該設置成10。如果模板和搜索圖像是多通道圖像,Metric參數設置成'ignore_color_polarity',在一個通道中的噪聲必須乘以通道個數的平方根再去設置MinContrast。例如,如果灰度值在一個通道的浮動范圍是10個灰度級,圖像是三通道的,那麼MinContrast應該設置為17。很顯然,MinContrast 必須小於Contrast。如果要在對比度較低的圖像中識別模板,MinContrast必須設置為一個相對較小的數值。如果要是模板即使嚴重遮擋(occluded)也能識別出來,MinContrast應該設置成一個比噪聲引起的灰度浮動范圍略大的數值,這樣才能確保在find_shape_model函數中提取出模板准確的位置和旋轉角度。如果MinContrast設置為'auto',最小對比度會基於模板圖像中的噪聲自動定義。因此自動設定僅僅在搜索圖像和模板圖像噪聲近似時才可以使用。此外,在某些情況下為了遮擋的魯棒性,采用自動設定數值是比較好的。使用get_shape_model_params函數可以查詢自動計算的最小對比度。

參數Metric定義了在圖像中匹配模板的條件。如果Metric = 'use_polarity',圖像中的目標必須和模型具有一樣的對比度。例如,如果模型是一個亮的目標在一個暗的背景上,那麼僅僅那些比背景亮的目標可以找到。如果Metric = 'ignore_global_polarity',在兩者對比度完全相反時也能找到目標。在上面的例子中,如果目標是比背景暗的也能將目標找到。find_shape_model函數的運行時間在這種情況下將會略微增加。如果Metric = 'ignore_local_polarity', 即使局部對比度改變也能找到模型。例如,當目標包含一部分中等灰度,並且其中部分比較亮部分比較暗時,這種模式是非常有用的。由於這種模式下find_shape_model函數的運行時間顯著增加,最好的方法是使用create_shape_model創建幾個反映目標可能的對比度變化的模型,同時使用find_shape_models去匹配他們。上面三個metrics僅僅適用於單通道圖像。如果是多通道圖像作為模板圖像或搜索圖像,僅僅第一個通道被使用。如果Metric='ignore_color_pol

arity', 即使顏色對比度局部變化也能找到模型。例如,當目標的部分區域顏色發生變化(e.g.從紅到綠)的情況。如果不能提前知道目標在哪一個通道是可見的這種模式是非常有用的。在這種情況下find_shape_model函數的運行時間也會急劇增加。'ignore_color_polarity'可以使用於具有任意通道數目的圖像中。如果使用於單通道圖像,他的效果和'ignore_loc al_polarity'是完全相同的。當Metric = 'ignore_color_polarity' 時,

create_shape_model創建的模板通道數目和find_shape_model中的圖像通道數目可以是不同的。例如,可以使用綜合生成的單通道圖像創建模型。另外,這些通道不需要是經過光譜細分(像RGB圖像)的。這些通道還可以包括具有在不同方向照亮同一個目標所獲得的圖像。

模型圖像Template的domain區域的重心是模板的初始位置,可以在set_shape_model_origin函數中設置不同的初始位置。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值