halcon模板匹配学习(二) 准备模板
如下,我們將介紹匹配的第一個(gè)操作:準(zhǔn)備模板
初始時(shí)刻,我們準(zhǔn)備好參考圖像,并對(duì)其做一定的處理,然后我們需要從參考圖像中導(dǎo)出模板,也就是將參考圖像裁剪成所謂的模板圖像。獲取模板圖像可以通過(guò)設(shè)置ROI來(lái)完成。對(duì)于某些應(yīng)用來(lái)說(shuō),也可以使用綜合模板代替模版圖像。綜合模板既可以是綜合創(chuàng)造的模板圖像,也可以是一個(gè)XLD輪廓。
裁剪參考圖像,使之成為模板圖像
為了創(chuàng)建模板圖像,我們需要從參考圖像中選取ROI,并使用 reduce_domain裁剪圖像的定義域?yàn)槲覀冞x取的ROI。這樣我們就創(chuàng)建了模板圖像,后續(xù)將作為匹配算子的輸入?yún)?shù)。
選取ROI有兩種方法:
- 直接指定法。
我們可以直接指定區(qū)域的參數(shù)進(jìn)而直接生成區(qū)域。HALCON 提供了多種算子用來(lái)創(chuàng)建區(qū)域,既包括標(biāo)準(zhǔn)的形狀像矩形(gen_rectangle2)或者橢圓(gen_ellipse) 到自由形狀的區(qū)域,比如多邊形區(qū)域(gen_region_polygon_filled).為了使用這些算子,你需要這些區(qū)域的參數(shù),比如矩形的位置、大小、方向或者園的位置和半徑。如果這些參數(shù)不能直接獲得,你可以使用draw算子,比如你可以在打開(kāi)的圖像上畫(huà)一個(gè)形狀,然后返回其參數(shù)。這些算子可以在HDevelop菜單 Operators :fa-play: Graphics :fa-play: Drawing 獲得。 - 通過(guò)圖像處理獲得區(qū)域。
有時(shí)我們可以通過(guò)圖像處理獲得區(qū)域,如閾值處理分割圖像、通過(guò)blob分析connection、fill_up、select_shape等可以選取某種特征的區(qū)域。
綜合模板圖像,作為模板圖像的替代選擇
綜合模板圖像
綜合模板圖像主要應(yīng)用于 correlation-based 匹配和所有基于輪廓的2D方法 比如 shape-based, component-based, local deformable, and perspective deformable matching.
如下我們舉例說(shuō)明。
我們想要定位電容。如果我們選擇明亮的圓域作為ROI區(qū)域,則會(huì)發(fā)現(xiàn)該區(qū)域包括大量的噪聲點(diǎn)。因此最后匹配出的電容只有一個(gè)。如果我們改進(jìn)之前的圓區(qū)域,換成一個(gè)環(huán)形區(qū)域作為ROI,則最后匹配出理想的電容區(qū)域。但是即使這樣,環(huán)形區(qū)域使得內(nèi)部的區(qū)域丟失了一部分,而且仍然包含部分噪點(diǎn),所以不理想。
最好的方法是使用綜合模板圖像。具體步驟如下:
Step 1: 創(chuàng)造一個(gè)XLD輪廓
首先我們使用算子gen_ellipse_contour_xld創(chuàng)造一個(gè)圓形區(qū)域。
注意合成圖像應(yīng)該比區(qū)域大一些,因?yàn)閷?duì)于 shape-based matching,當(dāng)創(chuàng)建圖像金字塔時(shí),區(qū)域外面的像素也被使用。
Step 2: 創(chuàng)造一個(gè)圖像,并將XLD插入圖像中
然后我們使用算子gen_image_const創(chuàng)造一個(gè)空的圖像,并使用算子* paint_xld*將XLD輪廓插入圖像中.
Step 3: 創(chuàng)建模型
使用綜合模板創(chuàng)建模型。
請(qǐng)注意:
完整的代碼,見(jiàn):HDevelop 項(xiàng)目 solution_guide/matching/synthetic_circle.hdev
來(lái)自XLD輪廓的模型
對(duì)于 shape-based matching 和 the local and perspective deformable matching,你不必要從一個(gè)XLD輪廓中創(chuàng)建一個(gè)綜合模板圖像,因?yàn)槟憧梢灾苯邮褂肵LD輪廓作為模板。比如說(shuō),對(duì)于shape-based matching, 你不必要提供一幅圖像,選擇ROI,然后調(diào)用 create_shape_model, create_scaled_shape_model, or create_aniso_shape_model其中之一去創(chuàng)建模型。
相反,你可以簡(jiǎn)單地調(diào)用create_shape_model_xld, create_scaled_shape_model_xld, or create_aniso_shape_model_xld使用XLD輪廓作為輸入?yún)?shù)。
舉例說(shuō)明。如下的完整項(xiàng)目,見(jiàn) HDevelop example program: examples\hdevelop\Matching\Shape-Based\create_shape_model_xld.dev:
gen_circle_contour_xld (ContCircle, 300, 300, MeanRadius, 0, 6.28318, \ 'positive', 1) create_shape_model_xld (ContCircle, 'auto', 0, 0, 'auto', 'auto', \ 'ignore_local_polarity', 10, ModelID)對(duì)于 local and perspective deformable matching 的處理也可以相應(yīng)的被使用。這里你可以使用算子create_local_deformable_model_xld for the local deformable matching and create_planar_uncalib_deformable_model_xldor create_planar_calib_deformable_model_xld, respectively, for perspective deformable matching.
初始時(shí)刻不知道極性,因?yàn)檩喞惶峁O性。所以需要在一個(gè)有代表性的圖像中做實(shí)驗(yàn),看看如何設(shè)置極性。開(kāi)始忽略極性,即參數(shù)
Metric設(shè)置為ignore_local_polarity,后面設(shè)置極性.可以調(diào)用算子set_shape_model_metric for shape-based matching,set_local_deformable_model_metric
for local deformable matching, and set_planar_uncalib_deformable_model_metric or
set_planar_calib_deformable_model_metric, respectively, for perspective deformable matching.
然后極性信息就被存儲(chǔ)到模型中。然后在接下里的搜索算子中可以通過(guò)參數(shù)
Metric設(shè)置各位合適的值,如’use_polarity’. 這種處理強(qiáng)烈推薦給迅速且魯棒的搜索。
如下圖為示意圖:
注:關(guān)于極性的選擇。
1. 使用極性模式: 要求模板與圖像黑白亮度對(duì)應(yīng)。
2. 忽略模板全局極性: 不需要模板與圖像黑白亮度對(duì)應(yīng)
3. 忽略局部極性: 不需要模板與圖像黑白亮度對(duì)應(yīng),允許變化。
總結(jié)
以上是生活随笔為你收集整理的halcon模板匹配学习(二) 准备模板的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java简历专业技能,附详细答案解析
- 下一篇: 【OS学习笔记】五 VirtualBox