0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于HALCON的形狀匹配算法的研究和心得總結(jié)

新機(jī)器視覺 ? 來源:halcon學(xué)習(xí)網(wǎng) ? 2020-08-28 11:48 ? 次閱讀

很早就想總結(jié)一下前段時(shí)間學(xué)習(xí)HALCON的心得,但由于其他的事情總是抽不出時(shí)間。去年有過一段時(shí)間的集中學(xué)習(xí),做了許多的練習(xí)和實(shí)驗(yàn),并對基于HDevelop的形狀匹配算法參數(shù)優(yōu)化進(jìn)行了研究,寫了一篇《基于HDevelop的形狀匹配算法參數(shù)的優(yōu)化研究》文章,總結(jié)了在形狀匹配過程中哪些參數(shù)影響到模板的搜索和匹配,又如何來協(xié)調(diào)這些參數(shù)來加快匹配過程,提高匹配的精度,這篇paper放到了中國論文在線了,需要可以去下載。

德國MVTec公司開發(fā)的HALCON機(jī)器視覺開發(fā)軟件,提供了許多的功能,在這里我主要學(xué)習(xí)和研究了其中的形狀匹配的算法和流程。HDevelop開發(fā)環(huán)境中提供的匹配的方法主要有三種,即Component-Based、Gray-Value-Based、Shape-Based,分別是基于組件(或成分、元素)的匹配,基于灰度值的匹配和基于形狀的匹配。這三種匹配的方法各具特點(diǎn),分別適用于不同的圖像特征,但都有創(chuàng)建模板和尋找模板的相同過程。這三種方法里面,我主要就第三種-基于形狀的匹配,做了許多的實(shí)驗(yàn),因此也做了基于形狀匹配的物體識(shí)別,基于形狀匹配的視頻對象分割和基于形狀匹配的視頻對象跟蹤這些研究,從中取得較好的效果,簡化了用其他工具,比如VC++來開發(fā)的過程。在VC下往往針對不同的圖像格式,就會(huì)弄的很頭疼,更不用說編寫圖像特征提取、模板建立和搜尋模板的代碼呢,我想其中間過程會(huì)很復(fù)雜,效果也不一定會(huì)顯著。下面我就具體地談?wù)劵贖ALCON的形狀匹配算法的研究和心得總結(jié)。

1. Shape-Based matching的基本流程

HALCON提供的基于形狀匹配的算法主要是針對感興趣的小區(qū)域來建立模板,對整個(gè)圖像建立模板也可以,但這樣除非是對象在整個(gè)圖像中所占比例很大,比如像視頻會(huì)議中人體上半身這樣的圖像,我在后面的視頻對象跟蹤實(shí)驗(yàn)中就是針對整個(gè)圖像的,這往往也是要犧牲匹配速度的,這個(gè)后面再講?;玖鞒淌沁@樣的,如下所示:
⑴ 首先確定出ROI的矩形區(qū)域,這里只需要確定矩形的左上點(diǎn)和右下點(diǎn)的坐標(biāo)即可,gen_rectangle1()這個(gè)函數(shù)就會(huì)幫助你生成一個(gè)矩形,利用area_center()找到這個(gè)矩形的中心

⑵ 然后需要從圖像中獲取這個(gè)矩形區(qū)域的圖像,reduce_domain()會(huì)得到這個(gè)ROI;這之后就可以對這個(gè)矩形建立模板,而在建立模板之前,可以先對這個(gè)區(qū)域進(jìn)行一些處理,方便以后的建模,比如閾值分割,數(shù)學(xué)形態(tài)學(xué)的一些處理等等;

⑶ 接下來就可以利用create_shape_model()來創(chuàng)建模板了,這個(gè)函數(shù)有許多參數(shù),其中金字塔的級(jí)數(shù)由Numlevels指定,值越大則找到物體的時(shí)間越少,AngleStart和AngleExtent決定可能的旋轉(zhuǎn)范圍,AngleStep指定角度范圍搜索的步長;這里需要提醒的是,在任何情況下,模板應(yīng)適合主內(nèi)存,搜索時(shí)間會(huì)縮短。對特別大的模板,用Optimization來減少模板點(diǎn)的數(shù)量是很有用的;MinConstrast將模板從圖像的噪聲中分離出來,如果灰度值的波動(dòng)范圍是10,則MinConstrast應(yīng)當(dāng)設(shè)為10;Metric參數(shù)決定模板識(shí)別的條件,如果設(shè)為’use_polarity’,則圖像中的物體和模板必須有相同的對比度;創(chuàng)建好模板后,這時(shí)還需要監(jiān)視模板,用inspect_shape_model()來完成,它檢查參數(shù)的適用性,還能幫助找到合適的參數(shù);另外,還需要獲得這個(gè)模板的輪廓,用于后面的匹配,get_shape_model_contours()則會(huì)很容易的幫我們找到模板的輪廓;

⑷ 創(chuàng)建好模板后,就可以打開另一幅圖像,來進(jìn)行模板匹配了。這個(gè)過程也就是在新圖像中尋找與模板匹配的圖像部分,這部分的工作就由函數(shù)find_shape_model()來承擔(dān)了,它也擁有許多的參數(shù),這些參數(shù)都影響著尋找模板的速度和精度。這個(gè)的功能就是在一幅圖中找出最佳匹配的模板,返回一個(gè)模板實(shí)例的長、寬和旋轉(zhuǎn)角度。其中參數(shù)SubPixel決定是否精確到亞像素級(jí),設(shè)為’interpolation’,則會(huì)精確到,這個(gè)模式不會(huì)占用太多時(shí)間,若需要更精確,則可設(shè)為’least_square’,’lease_square_high’,但這樣會(huì)增加額外的時(shí)間,因此,這需要在時(shí)間和精度上作個(gè)折中,需要和實(shí)際聯(lián)系起來。比較重要的兩個(gè)參數(shù)是MinSocre和Greediness,前一個(gè)用來分析模板的旋轉(zhuǎn)對稱和它們之間的相似度,值越大,則越相似,后一個(gè)是搜索貪婪度,這個(gè)值在很大程度上影響著搜索速度,若為0,則為啟發(fā)式搜索,很耗時(shí),若為1,則為不安全搜索,但最快。在大多數(shù)情況下,在能夠匹配的情況下,盡可能的增大其值。
⑸ 找到之后,還需要對其進(jìn)行轉(zhuǎn)化,使之能夠顯示,這兩個(gè)函數(shù)vector_angle_to_rigid()和affine_trans_contour_xld()在這里就起這個(gè)作用。前一個(gè)是從一個(gè)點(diǎn)和角度計(jì)算一個(gè)剛體仿射變換,這個(gè)函數(shù)從匹配函數(shù)的結(jié)果中對構(gòu)造一個(gè)剛體仿射變換很有用,把參考圖像變?yōu)楫?dāng)前圖像。

2. 基于形狀匹配的參數(shù)關(guān)系與優(yōu)化
在HALCON的說明資料里講到了這些參數(shù)的作用以及關(guān)系,在上面提到的文章中也作了介紹,這里主要是重復(fù)說明一下這些參數(shù)的作用,再強(qiáng)調(diào)一下它們影響匹配速度的程度;

在為了提高速度而設(shè)置參數(shù)之前,有必要找出那些在所有測試圖像中匹配成功的設(shè)置,這時(shí)需考慮以下情況:

① 必須保證物體在圖像邊緣處截?cái)?,也就是保證輪廓的清晰,這些可以通過形態(tài)學(xué)的一些方法來處理;

② 如果Greediness值設(shè)的太高,就找不到其中一些可見物體,這時(shí)最后將其設(shè)為0來執(zhí)行完全搜索;
③ 物體是否有封閉區(qū)域,如果要求物體在任何狀態(tài)下都能被識(shí)別,則應(yīng)減小MinScore值;

④ 判斷在金字塔最高級(jí)上的匹配是否失敗,可以通過find_shape_model()減小NumLevels值來測試;

⑤ 物體是否具有較低的對比度,如果要求物體在任何狀態(tài)下都能被識(shí)別,則應(yīng)減小MinContrast值;

⑥ 判斷是否全局地或者局部地轉(zhuǎn)化對比度極性,如果需要在任何狀態(tài)下都能被識(shí)別,則應(yīng)給參數(shù)Metric設(shè)置一個(gè)合適的值;
⑦ 物體是否與物體的其他實(shí)例重疊,如果需要在任何狀態(tài)下都能識(shí)別物體,則應(yīng)增加MaxOverlap值;

⑧ 判斷是否在相同物體上找到多個(gè)匹配值,如果物體幾乎是對稱的,則需要控制旋轉(zhuǎn)范圍;

如何加快搜索匹配,需要在這些參數(shù)中進(jìn)行合理的搭配,有以下方法可以參考:

① 只要匹配成功,則盡可能增加參數(shù)MinScore的值;
② 增加Greediness值直到匹配失敗,同時(shí)在需要時(shí)減小MinScore值;

③ 如果有可能,在創(chuàng)建模板時(shí)使用一個(gè)大的NumLevels,即將圖像多分幾個(gè)金字塔級(jí);

④ 限定允許的旋轉(zhuǎn)范圍和大小范圍,在調(diào)用find_shape_model()時(shí)調(diào)整相應(yīng)的參數(shù);

⑤ 盡量限定搜索ROI的區(qū)域;
除上面介紹的以外,在保證能夠匹配的情況下,盡可能的增大Greediness的值,因?yàn)樵诤竺娴膶?shí)驗(yàn)中,用模板匹配進(jìn)行視頻對象跟蹤的過程中,這個(gè)值在很大程度上影響到匹配的速度。

當(dāng)然這些方法都需要跟實(shí)際聯(lián)系起來,不同圖像在匹配過程中也會(huì)有不同的匹配效果,在具體到某些應(yīng)用,不同的硬件設(shè)施也會(huì)對這個(gè)匹配算法提出新的要求,所以需要不斷地去嘗試。在接下來我會(huì)結(jié)合自己做的具體的實(shí)驗(yàn)來如何利用HALCON來進(jìn)行實(shí)驗(yàn),主要是在視頻對象分割和視頻對象的跟蹤方面。待續(xù)…………^_^

例子:區(qū)分硬幣 Example: solution_guide/basics/matching_coins.hdev 見附件trainmodel.hdev



create_shape_model(

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

Hlong NumLevels, //金字塔的層數(shù),可設(shè)為“auto”或0—10的整數(shù)

Double AngleStart, //模板旋轉(zhuǎn)的起始角度

Double AngleExtent, //模板旋轉(zhuǎn)角度范圍, >=0

Double AngleStep, //旋轉(zhuǎn)角度的步長, >=0 and <=pi/16

const char* Optimization, //設(shè)置模板優(yōu)化和模板創(chuàng)建方法

const char* Metric, //匹配方法設(shè)置

Hlong Contrast, //設(shè)置對比度

Hlong MinContrast , //設(shè)置最小對比度

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


進(jìn)一步分析:

NumLevels越大,找到匹配使用的時(shí)間就越小。另外必須保證最高層的圖像具有足夠的信息(至少四個(gè)點(diǎn))。可以通過inspect_shape_model函數(shù)查看設(shè)置的結(jié)果。如果最高層金字塔的消息太少,算法內(nèi)部會(huì)自動(dòng)減少金字塔層數(shù),如果最底層金字塔的信息太少,函數(shù)就會(huì)報(bào)錯(cuò)。如果設(shè)為auto,算法會(huì)自動(dòng)計(jì)算金字塔的層數(shù),我們可以通過get_shape_model_params函數(shù)查看金字塔的層數(shù)。如果金字塔的層數(shù)太大,模板不容易識(shí)別出來,這是需要將find_shape_model函數(shù)中MinScore和Greediness參數(shù)設(shè)置的低一些。如果金字塔層數(shù)太少找到模板的時(shí)間會(huì)增加??梢韵仁褂胕nspect_shape_model函數(shù)的輸出結(jié)果來選擇一個(gè)較好的金字塔層數(shù)。

參數(shù)AngleStart、AngleExtent定義了模板可能發(fā)生旋轉(zhuǎn)的范圍。注意模板在find_shape_model函數(shù)中只能找到這個(gè)范圍內(nèi)的匹配。參數(shù)AngleStep定義了旋轉(zhuǎn)角度范圍內(nèi)的步長。如果在find_shape_model函數(shù)中沒有指定亞像素精度,這個(gè)參數(shù)指定的精度是可以實(shí)現(xiàn)find_shape_mode函數(shù)中的角度的。參數(shù)AngleStep的選擇是基于目標(biāo)的大小的,如果模板圖像太小不能產(chǎn)生許多不同離散角度的圖像,因此對于較小的模板圖像AngleStep應(yīng)該設(shè)置的比較大。如果AngleExtent不是AngleStep的整數(shù)倍, 將會(huì)相應(yīng)的修改AngleStep。

如果選擇 complete pregeneration ,不同角度的模板圖像將會(huì)產(chǎn)生并保存在內(nèi)存中。用來存儲(chǔ)模板的內(nèi)存與旋轉(zhuǎn)角度的數(shù)目和模板圖像的的點(diǎn)數(shù)是成正比的。因此,如果AngleStep太小或是AngleExtent太大, 將會(huì)出現(xiàn)該模型不再適合(虛擬)內(nèi)存的情況。在任何情況下,模型是完全適合主存儲(chǔ)器的,因?yàn)檫@避免了操作系統(tǒng)的內(nèi)存分頁,使得尋找匹配模板的時(shí)間變短。由于find_shape_model函數(shù)中的角度可以使用亞像素精度,一個(gè)直徑小于200像素的模板可以選擇AngleStep>= 1. 如果選擇AngleStep='auto' (or 0 向后兼容),create_shape_model將會(huì)基于模板的大小自動(dòng)定義一個(gè)合適的角度步長. 自動(dòng)計(jì)算出來的AngleStep可以使用get_shape_model_params函數(shù)查看。

如果沒有選擇complete pregeneration, 該模型會(huì)在每一層金字塔上建立在一個(gè)參考的位置。這樣在find_shape_model函數(shù)運(yùn)行時(shí),該模型必須轉(zhuǎn)化為不同的角度和尺度在運(yùn)行時(shí)在。正因?yàn)槿绱?,匹配該模型可能需要更多的時(shí)間。

對于特別大的模板圖像,將參數(shù)Optimization設(shè)置為不同于'none'的其他數(shù)值是非常有用的。如果Optimization= 'none', 所有的模型點(diǎn)將要存儲(chǔ)。在其他情況下, 按照Optimization的數(shù)值會(huì)將模型的點(diǎn)數(shù)減少. 如果模型點(diǎn)數(shù)變少了,必須在find_shape_model函數(shù)中將參數(shù)Greediness設(shè)為一個(gè)比較小的值, 比如:0.7、0.8。對于比較小的模型, 減少模型點(diǎn)數(shù)并不能提高搜索速度,因?yàn)檫@種情況下通常顯著更多的潛在情況的模型必須進(jìn)行檢查。如果Optimization設(shè)置為'auto', create_shape_model自動(dòng)確定模型的點(diǎn)數(shù)。

Optimization的第二個(gè)值定義了模型是否進(jìn)行預(yù)處理(pregenerated completely),是通過選擇'pregeneration'或者'no_pregeneration'來設(shè)置的。如果不使用第二個(gè)值(例如:僅僅設(shè)置了第一個(gè)值), 默認(rèn)的是系統(tǒng)中的設(shè)置,是通過set_system('pregenerate _shape_models',...)來設(shè)置的,對于默認(rèn)值是 ('pregenerate_shape_models' = 'false'), 模型沒有進(jìn)行預(yù)處理. 模型的預(yù)處理設(shè)置通常會(huì)導(dǎo)致比較低的運(yùn)行時(shí)間,因?yàn)槟P筒恍枰?在運(yùn)行時(shí)間時(shí)轉(zhuǎn)換。然而在這種情況下,內(nèi)存的要求和創(chuàng)建模板所需要的時(shí)間是比較高的。還應(yīng)該指出,不能指望這兩個(gè)模式返回完全相同的結(jié)果,因?yàn)樵谶\(yùn)行時(shí)變換一定會(huì)導(dǎo)致變換模型和預(yù)處理變換模型之間不同的內(nèi)部數(shù)據(jù)。比如,如果模型沒有 completely pregenerated,在find_shape_model函數(shù)中通常返回一個(gè)較低的scores,這可能需要將MinScore設(shè)置成一個(gè)較低的值。此外,在兩個(gè)模型中插值法獲得的位置可能略有不同。如果希望是最高精確度,應(yīng)該使用最小二乘調(diào)整得到模型位置。

參數(shù)Contras決定著模型點(diǎn)的對比度。對比度是用來測量目標(biāo)與背景之間和目標(biāo)不同部分之間局部的灰度值差異。Contrast的選擇應(yīng)該確保模板中的主要特征用于模型中。Contrast也可以是兩個(gè)數(shù)值,這時(shí)模板使用近似edges_image函數(shù)中滯后閾值的算法進(jìn)行分割。這里第一個(gè)數(shù)值是比較低的閾值,第二個(gè)數(shù)值是比較高的閾值。Contrast也可以包含第三個(gè),這個(gè)數(shù)值是在基于組件尺寸選擇重要模型組件時(shí)所設(shè)置的閾值,比如,比指定的最小尺寸的點(diǎn)數(shù)還少的組件將被抑制。這個(gè)最小尺寸的閾值會(huì)在每相鄰的金字塔層之間除以2。如果一個(gè)小的模型組件被抑制,但是不使用滯后閾值,然而在Contrast中必須指定三個(gè)數(shù)值,在這種情況下前兩個(gè)數(shù)值設(shè)置成相同的數(shù)值。這個(gè)參數(shù)的設(shè)置可以在inspect_shape_model函數(shù)中查看效果。如果Contrast設(shè)置為'auto',create_shape_model將會(huì)自動(dòng)確定三個(gè)上面描述的數(shù)值?;蛘邇H僅自動(dòng)設(shè)置對比度('auto_contrast'),滯后閾值('auto_contrast_hyst')或是最小尺寸('auto_min_size')中一個(gè)。其他沒有自動(dòng)設(shè)置的數(shù)值可以按照上面的格式再進(jìn)行設(shè)置。可以允許各種組合,例如:如果設(shè)置 ['auto_contrast','auto_min_size'],對比度和最小尺寸自動(dòng)確定;如果設(shè)置 ['auto_min_size',20,30],最小尺寸會(huì)自動(dòng)設(shè)定,而滯后閾值被設(shè)為20和30。有時(shí)候可能對比度閾值自動(dòng)設(shè)置的結(jié)果是不滿意的,例如,由于一些具體應(yīng)用的原因當(dāng)某一個(gè)模型組件是被包含或是被抑制時(shí),或是目標(biāo)包含幾種不同的對比度時(shí),手動(dòng)設(shè)置這些參數(shù)效果會(huì)更好。因此對比度閾值可以使用determine_shape_model_params函數(shù)自動(dòng)確定,也可以在調(diào)用create_shape_model之前使用inspect_shape_mode函數(shù)檢查效果。

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

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

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

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

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

LIntExport Herror find_shape_model(

const Hobject& Image, //搜索圖像

Hlong ModelID, //模板句柄

Double AngleStart, // 搜索時(shí)的起始角度

Double AngleExtent, //搜索時(shí)的角度范圍,必須與創(chuàng)建模板時(shí)的有交集。

Double MinScore, // 輸出的匹配的質(zhì)量系數(shù)Score 都得大于該值

Hlong NumMatches, // 定義要輸出的匹配的最大個(gè)數(shù)

Double MaxOverlap, // 當(dāng)找到的目標(biāo)存在重疊時(shí),且重疊大于該值時(shí)選

//擇一個(gè)好的輸出

const char* SubPixel, // 計(jì)算精度的設(shè)置,五種模式,多選2,3

Hlong NumLevels, // 搜索時(shí)金字塔的層數(shù)

Double Greediness , //貪婪度,搜索啟發(fā)式,一般都設(shè)為0.9,越高速度快

//容易出現(xiàn)找不到的情況

Halcon::HTuple* Row, //輸出匹配位置的行坐標(biāo)

Halcon::HTuple* Column, //輸出匹配位置的列坐標(biāo)

Halcon::HTuple* Angle, //輸出匹配角度

Halcon::HTuple* Score ) //輸出匹配質(zhì)量

進(jìn)一步分析:

注意Row、Column的坐標(biāo)并不是模板在搜索圖像中的精確位置,因此不能直接使用他們。這些數(shù)值是為了創(chuàng)建變換矩陣被優(yōu)化后的,你可以用這個(gè)矩陣的匹配結(jié)果完成各種任務(wù),比如調(diào)整后續(xù)步驟的ROI。

Score是一個(gè)0到1之間的數(shù),是模板在搜索圖像中可見比例的近似測量。如果模板的一半被遮擋,該值就不能超過0.5。

Image的domain定義了模型參考點(diǎn)的搜索區(qū)域,模型參考點(diǎn)是在create_shape_model中用來創(chuàng)建模型的圖像的domain區(qū)域的重心。不考慮使用函數(shù)set_shape_model_origin設(shè)置不同的初始位置。在圖像domain區(qū)域的這些點(diǎn)內(nèi)搜索模型,其中模型完全屬于這幅圖像。這意味著如果模型超出圖像邊界,即使獲得的質(zhì)量系數(shù)(score)大于MinScore也不能找到模型。這種性能可以通過set_system('border_shape_models','true')改變,這樣那些超出圖像邊界,質(zhì)量系數(shù)大于MinScore的模型也能找到。這時(shí)那些在圖像外面的點(diǎn)看作是被遮擋了,可以降低質(zhì)量系數(shù)。在這種模式下搜索的時(shí)間將要增加。

參數(shù)AngleStart和AngleExtent確定了模型搜索的旋轉(zhuǎn)角度,如果有必要,旋轉(zhuǎn)的范圍會(huì)被截取成為create_shape_model函數(shù)中給定的旋轉(zhuǎn)范圍。這意味著創(chuàng)建模型和搜索時(shí)的角度范圍必須真正的重疊。在搜索時(shí)的角度范圍不會(huì)改變?yōu)槟?*pi的。為了簡化介紹,在該段落剩下的部分所有角度都用度來表示,而在find_shape_model函數(shù)中使用弧度來設(shè)置的。因此,如果創(chuàng)建模板時(shí),AngleStart=-20°、AngleExtent=40°,在搜索模板函數(shù)find_shape_model中設(shè)置AngleStart=350°、AngleExtent=20°,盡管角度模360后是重疊的,還是會(huì)找不到模板的。為了找到模板,在這個(gè)例子中必須將AngleStart=350°改為AngleStart=-10°。

參數(shù)MinScore定義模板匹配時(shí)至少有個(gè)什么樣的質(zhì)量系數(shù)才算是在圖像中找到模板。MinScore設(shè)置的越大,搜索的就越快。如果模板在圖像中沒有被遮擋,MinScore可以設(shè)置為0.8這么高甚至0.9。

NumMatches定義了在圖像上找到模板的最大的個(gè)數(shù)。如果匹配時(shí)的質(zhì)量系數(shù)大于MinScore的目標(biāo)個(gè)數(shù)多于NumMatches,僅僅返回質(zhì)量系數(shù)最好的NumMatches個(gè)目標(biāo)位置。如果找的匹配目標(biāo)不足NumMatches,那么就只返回找到的這幾個(gè)。參數(shù)MinScore優(yōu)于NumMatches。

如果模型具有對稱性,會(huì)在搜索圖像的同一位置和不同角度上找到多個(gè)與目標(biāo)匹配的區(qū)域。參數(shù)MaxOverlap是0到1之間的,定義了找到的兩個(gè)目標(biāo)區(qū)域最多重疊的系數(shù),以便于把他們作為兩個(gè)不同的目標(biāo)區(qū)域分別返回。如果找到的兩個(gè)目標(biāo)區(qū)域彼此重疊并且大于MaxOverlap,僅僅返回效果最好的一個(gè)。重疊的計(jì)算方法是基于找到的目標(biāo)區(qū)域的任意方向的最小外接矩形(看smallest_rectangle2)。如果MaxOverlap=0, 找到的目標(biāo)區(qū)域不能存在重疊, 如果MaxOverla p=1,所有找到的目標(biāo)區(qū)域都要返回。

SubPixel確定找到的目標(biāo)是否使用亞像素精度提取。如果SubPixel設(shè)置為'none'(或者'false' 背景兼容),模型的位置僅僅是一個(gè)像素精度和在create_shape_model中定義的角度分辨率。如果SubPixel設(shè)置為'interpo lation'(或'true'),位置和角度都是亞像素精度的。在這種模式下模型的位置是在質(zhì)量系數(shù)函數(shù)中插入的,這種模式幾乎不花費(fèi)計(jì)算時(shí)間,并且能達(dá)到足夠高的精度,被廣泛使用。然而在一些精度要求極高的應(yīng)用中,模板的位置應(yīng)該通過最小二乘調(diào)整決定,比如通過最小化模板點(diǎn)到相關(guān)圖像點(diǎn)的距離。與 'interpolation'相比,這種模式需要額外的計(jì)算時(shí)間。對于最小二乘調(diào)整的模式有:'least_squares', 'least_squares_high', 和'least_squares_very_high'。他們可用來定義被搜索的最小距離的精度,選擇的精度越高,亞像素提取的時(shí)間越長。然而,通常SubPixel設(shè)置為'interpolation'。如果希望設(shè)置最小二乘就選擇'least_squares', 因?yàn)檫@樣才能確保運(yùn)行時(shí)間和精度的權(quán)衡。

NumLevels是在搜索時(shí)使用的金字塔層數(shù),如有必要,層數(shù)截成創(chuàng)建模型時(shí)的范圍。如果NumLevels=0,使用創(chuàng)建模板時(shí)金字塔的層數(shù)。另外NumLevels還可以包含第二個(gè)參數(shù),這個(gè)參數(shù)定義了找到匹配模板的最低金字塔層數(shù)。NumLevels=[4,2]表示匹配在第四層金字塔開始,在第二層金字塔找到匹配(最低的設(shè)為1)??梢允褂眠@種方法降低匹配的運(yùn)行時(shí)間,但是這種模式下位置精度是比正常模式下低的,所謂正常模式是在金字塔最底層匹配。因此如果需要較高的精度,應(yīng)該設(shè)置SubPixel至少為'least_squares'。如果金字塔最底層設(shè)置的過大,可能不會(huì)達(dá)到期望的精度,或者找到一個(gè)不正確的匹配區(qū)域。這是因?yàn)樵谳^高層的金字塔上模板是不夠具體的,不足以找到可靠的模板最佳匹配。在這種情況下最低金字塔層數(shù)應(yīng)設(shè)為最小值。

參數(shù)Greediness確定在搜索時(shí)的“貪婪程度”。如果Greediness=0,使用一個(gè)安全的搜索啟發(fā)式,只要模板在圖像中存在就一定能找到模板,然而這種方式下搜索是相對浪費(fèi)時(shí)間的。如果Greediness=1,使用不安全的搜索啟發(fā)式,這樣即使模板存在于圖像中,也有可能找不到模板,但只是少數(shù)情況。如果設(shè)置Greediness=0.9,在幾乎所有的情況下,總能找到模型的匹配。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 算法
    +關(guān)注

    關(guān)注

    23

    文章

    4575

    瀏覽量

    92335
  • 機(jī)器視覺
    +關(guān)注

    關(guān)注

    161

    文章

    4301

    瀏覽量

    119864
  • HALCON
    +關(guān)注

    關(guān)注

    16

    文章

    63

    瀏覽量

    27147

原文標(biāo)題:HALCON形狀匹配詳解

文章出處:【微信號(hào):vision263com,微信公眾號(hào):新機(jī)器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    labview調(diào)用halcon軟件包

    ,需要用的的算法也越來越多,個(gè)人認(rèn)為NI_vision的價(jià)值不是很高,halcon倒是個(gè)不錯(cuò)的選擇。 前段時(shí)間研究了一下halcon,也有人用labview調(diào)用過
    發(fā)表于 05-27 12:04

    一個(gè)有序點(diǎn)集的形狀匹配算法

    我們做圖象識(shí)別產(chǎn)品,在檢查形狀算法的時(shí)候找到一個(gè)算法,有比較好的魯棒性!
    發(fā)表于 12-14 16:06

    基于HALCON的模板匹配方法總結(jié)

    推薦很早就想總結(jié)一下前段時(shí)間學(xué)習(xí)HALCON心得,但由于其他地事情總是抽不出時(shí)間。去年有過一段時(shí)間地集中學(xué)習(xí),做了許多地練習(xí)和實(shí)驗(yàn),并對基于HDevelop地形狀
    發(fā)表于 09-19 06:13

    基于形狀上下文的人臉匹配算法

    提出一種基于形狀上下文的人臉形狀匹配算法。在形狀匹配中,將2 個(gè)目標(biāo)進(jìn)行相似度比較,得到2 幅圖
    發(fā)表于 03-30 08:44 ?46次下載

    模式匹配算法的深入研究

    模式匹配算法的深入研究:模式匹配算法的應(yīng)用較為廣泛, KMP算法是一種性能較高的
    發(fā)表于 10-25 12:21 ?13次下載

    音樂旋律匹配算法的改進(jìn)研究

    本內(nèi)容提出了音樂旋律匹配算法的改進(jìn)研究,希望對大家學(xué)習(xí)上有所幫助
    發(fā)表于 05-26 15:56 ?47次下載
    音樂旋律<b class='flag-5'>匹配</b><b class='flag-5'>算法</b>的改進(jìn)<b class='flag-5'>研究</b>

    BM模式匹配算法研究和改進(jìn)

    模式匹配算法在數(shù)字通信、入侵檢測等多種領(lǐng)域都有著廣泛的應(yīng)用,BM算法以其高效的匹配過程成為模式匹配算法
    發(fā)表于 10-17 11:23 ?0次下載
    BM模式<b class='flag-5'>匹配</b><b class='flag-5'>算法</b>的<b class='flag-5'>研究</b>和改進(jìn)

    基于顏色和SURF特征的混合匹配算法研究

    針對傳統(tǒng)的SURF算法未使用圖像的顏色信息,提出了一種基于顏色信息和SURF特征相結(jié)合的混合圖像匹配算法,算法通過提取目標(biāo)圖像的顏色信息,從源圖像中定位出一個(gè)區(qū)域,該區(qū)域就是目標(biāo)圖像在
    發(fā)表于 12-24 16:05 ?15次下載

    基于Android智能手機(jī)的地圖匹配算法研究

    基于Android智能手機(jī)的地圖匹配算法研究
    發(fā)表于 01-04 15:26 ?0次下載

    基于HDevelop的形狀匹配算法參數(shù)的優(yōu)化研究

    基于HDevelop的形狀匹配算法參數(shù)的優(yōu)化研究
    發(fā)表于 05-13 15:51 ?0次下載

    基于改進(jìn)SIFT特征點(diǎn)匹配的圖像拼接算法研究

    基于改進(jìn)SIFT特征點(diǎn)匹配的圖像拼接算法研究_張勇
    發(fā)表于 01-03 17:41 ?1次下載

    軌跡路網(wǎng)匹配算法綜述

    研究領(lǐng)域取得的成果進(jìn)行了分類總結(jié),發(fā)現(xiàn)這些匹配算法可以較好地解決高采樣率的路網(wǎng)匹配問題。但是隨著城市交通的快速發(fā)展,獲取和處理車輛位置信息
    發(fā)表于 12-19 14:01 ?0次下載
    軌跡路網(wǎng)<b class='flag-5'>匹配</b><b class='flag-5'>算法</b>綜述

    探究halcon模板匹配干擾邊緣消除辦法

    強(qiáng),每次換產(chǎn)品都要從新畫模板。 最終決定使用手繪模板的方式解決這個(gè)問題。 halcon手繪形狀匹配模板 手繪形狀匹配模板 為了避免大家產(chǎn)生理
    的頭像 發(fā)表于 05-29 13:42 ?4590次閱讀

    面向機(jī)器人的三維形狀多層次局部匹配算法

    面向機(jī)器人的三維形狀多層次局部匹配算法
    發(fā)表于 06-25 11:51 ?18次下載

    【收藏】大牛總結(jié)的30個(gè)PCB布局的細(xì)節(jié)與心得

    【收藏】大牛總結(jié)的30個(gè)PCB布局的細(xì)節(jié)與心得
    的頭像 發(fā)表于 12-06 15:17 ?550次閱讀