一、用途
1、常用於識別定位、測量、機械手抓取等
2、多用形狀匹配
二、原理
1、基於灰度(極少用)
【案例best_match : 常規灰度匹配流程】
【案例best_match_mg : 根據灰度圖調整模板】
【案例set_reference_template : 設置從哪裏開始搜索】
2、基於相關性(少用)
【案例find_ncc_model_exposure:常規相關性匹配流程】
3、基於形狀(最常用)
一階導數算子、二階導數算子
1、找到區域輪廓,生成模板,查找模板輪廓與目標區域輪廓
圖像金字塔:一般設爲 3-5層
模板、實例(找到的區域)
三、形狀匹配【使用圖像創建模板】
手法:採集 - 預處理 - 摳圖 - 創建模板 - 查找 - 顯示
【案例】
1、採集圖像
2、預處理:獲得作爲模板匹配的區域,一般會稍微膨脹
3、摳圖(手動摳圖/Blob摳圖)
4、創建模板
create_scaled_shape_model() 匹配的圖像可縮放(行列等比例縮放)、旋轉
Template:用於創建模板的圖像
NumLevels:金字塔層數
*AngleStart:模板開始角度 視情況而定
*AngleExtent:模板角度範圍
AngleStep:模板角度步長
*ScaleMin:最小縮放比例
*ScaleMax:最大縮放比例
ScaleStep:縮放步長
Optimization:優化算法
*Metric: 匹配極性
Contrast:模板與實例的對比度
MinContrast:模板前景與背景的對比度(對比度越大,則輪廓點數越少,一般20左右)
ModelID:創建的模板句柄
create_aniso_shape_model() :匹配的圖像行列可不等比例縮放
create_shape_model() :匹配的圖像不可縮放
5、查找(對應創建的模板形式)
find_scaled_shape_model(s) 尋找匹配可旋轉縮放的圖像
Image: 模板匹配的目標圖像
ModelID: 匹配模板句柄
AngleStart: 匹配其實角度(注:此處的角度值與縮放值均在創建模板的參數範圍內即可)
AngleExtent:匹配角度範圍
ScaleMin: 匹配目標的最小縮放比例
ScaleMax: 匹配目標的最大縮放比例
MinScore: 最小分數,類似於匹配度,分數低於這個值的目標,則不會被匹配上
* NumMatches:查找個數(0爲查找所有)
MaxOverlap: 目標重疊度
SubPixel:亞像素精度
* NumLevels:金字塔層數
* Greediness:貪婪度(找不到需要調整參數)
Row:查找結果行座標
Column:查找結果列座標
Angle:查找結果角度
Scale:查找結果縮放比例
Score:查找結果分數,即匹配度
find_aniso_shape_model(s):
find_shape_model(s):
【案例關鍵點】
1、find_scaled_shape_model: 常規模板匹配創建及匹配(行列縮放爲等比例)
2、first_example_shape_matching: 芯片模板匹配(不可縮放)
3、find_aniso_shape_model: 匹配目標的行列比例可縮放(可不等比例),單個模板對應多個目標
5、reuse_model: 保存模板文件
6、pm_multiple_models: 多模板匹配(內部包含從cad文件導入輪廓)
7、check_soft_cheese :多模板匹配
8、find_cococa_packages_max_deformation(或find_shape_model_max_deformation): 類似包裝袋等非剛性物體表面有形變的匹配(重點參數:max_deformation N,N越大允許形變越大)
9、使用均值創建模板(案例4)
10、matching_image_border: 匹配邊界圖像時需設置
11、matching_coins: 縮減一個區域,指定從該出查找減少查找時間
12、matching_defocused_pcb : 模糊查找,查找時金字塔設爲[0, -n]
13、process_shape_model:創建模板前,看下模板是否完整,是否需要修改,修改後再創建模板
14、find_peanut_candies_local_deformable: 柔性產品、包裝袋產品形變(形變大時使用本組合算子)
create_local_deformable_model:創建模板
find_local_deformable_model:查找
15、set_shape_model_timeout :設置查找最長時間,超過便不查
16、set_shape_model_min_contrast: 設置模板與實例的最小對比度,提高查找正確率
四、形狀匹配【使用輪廓創建模板】
手法:採集 - 預處理 - 獲取xld輪廓 - 創建模板 - 查找 - 顯示
1、採集圖像
2、預處理:
3、獲取xld輪廓
4、創建模板
create_scaled_shape_model_xld() :匹配的圖像可縮放、旋轉
create_aniso_shape_model_xld() :匹配的圖像僅僅在X、Y方向縮放
create_shape_model_xld() :匹配的圖像不可縮放
5、查找(對應創建的模板形式)
find_scaled_shape_model(s) 尋找匹配可旋轉縮放的圖像
find_aniso_shape_model(s):
find_shape_model(s) :
【案例關鍵點】
create_shape_model_xld: 創建xld輪廓模板,用xld輪廓去匹配
五、基於組件匹配
可應用於開關檢測(開關檢測也可用多模板匹配)
六、分類
模板匹配:
- 基於灰度值
- 基於相關
- 基於形狀
- 局部可變形
- 可變現(適合剛性透視變換、透視失真) create_planar_uncalib_deformable_model_xld
- 基於組件 利用模板之間的關係
- 基於描述符
案例:
*讀取圖片
read_image (Image, '1.png')
*畫一個ROI區域
gen_rectangle1 (ROI_0, 57.625, 55.5, 186.063, 190.5)
*用上面畫出的ROI摳圖
reduce_domain (Image, ROI_0, ImageReduced)
*用摳出的圖像做成模板
create_shape_model (ImageReduced, 'auto', -0.39, 0.79, 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID)
*獲取模板輪廓,此步非必須
*get_shape_model_contours (ModelContours, ModelID, 1)
*在原圖中查找模板
find_shape_model (Image, ModelID, -0.39, 0.78, 0.5, 1, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Score)
*顯示模板匹配的結果,即將模板的輪廓變換到識別到的位置
dev_display_shape_matching_results (ModelID, 'red', Row, Column, Angle, 1, 1, 0)
項目案例分享:
鏈接:https://pan.baidu.com/s/13orowAalkoXaRxdbDgZjIw
提取碼:s2pd