模板匹配是通過計算模板與影象之間的相似度實現的
完整性檢測/物體識別/得到位姿
位姿剛性變換:平移和旋轉方向的變換
相似變換:平移和旋轉和縮放方向的變換
halcon匹配共三種:
component-based:基於元件成分和元素
gray-value-based:基於灰度值
shape-based:基於形狀shape_model
基於灰度值的模板匹配
最簡單的相似度量方法是計算模板和影象之間差值的絕對值綜合和所有差值的平方和(sad、ssd)
在光照保持不變的情況下,sad/ssd效果非常好。
使用圖形金字塔進行匹配
將影象和模板多次縮小2倍建立起來的資料結構為影象金字塔
為加快速度消除鋸齒,需要均值濾波器平滑影象。用高斯濾波器尺寸必須偶數計算費時
基於灰度值的亞畫素精度匹配
帶旋轉和縮放的模板匹配
其它可靠的演算法:
基於邊緣的模板匹配演算法(基於邊緣點和基於匹配幾何基元)
幾何雜湊法匹配
應用場合:元件匹配是形狀匹配的擴充套件,但不支援大小縮放匹配,一般用於多個物件(工件)定位的場合。
演算法步驟:
1.獲取元件模型裡的初始控制項 gen_initial_components()
引數:modelimage [input] 初始元件的
initialcomponents [output] 初始元件的輪廓區域
contrastlow [input] 對比度下限
contrasthigh [input] 對比度上限
minsize [input] 初始元件的最小尺寸
mode[input] 自動分段的型別
genericname [input] 可選控制引數的名稱
genericvalue [input] 可選控制引數的值
2.根據影象模型,初始元件,訓練來訓練元件和元件相互關係 train_model_components()
3.建立元件模型 create_trained_component_model()
4.尋找元件模型 find_component_model()
5.釋放元件模型 clear_component_model()
應用場合:定位物件內部的灰度值沒有大的變化,沒有缺失部分,沒有干擾影象和雜訊的場合。
1.建立模板:create_template()
2.尋找模板:best_match()
3.釋放模板:clear_template()
應用場合:搜尋物件有輕微的變形,大量的紋理,影象模糊等場合,速度快,精度低。
1.建立模板:create_ncc_model()
2.尋找模板:find_ncc_model()
3.釋放模板:clear_ncc_model()
應用場合:搜尋物件有輕微的變形。
1.建立模板:create_variation_model()
2.準備和訓練模型:
prepare_variation_model()
train_variation_model()
3.比較模板:compare_variation_model()
4.釋放模板: clear_variation_model()
應用場合:搜尋物件有線性的變形,模板在行列方向上可以分別獨立的進行乙個適當的縮放變形來匹配, 主要引數有行列方向查詢縮放比例、影象金字塔、行列方向匹配分數(指可接受的匹配分數,大於這個值就接受,小於它就捨棄)、設定超找的角度、已經超找結果後得到的位置和匹配分數。 分帶標定的可變形模板匹配和不帶標定的可變形模板匹配。
帶標定的需要先讀入攝像機內參 read_cam_par和外參 read_pose
1.建立模板:create_planar_calib_deformable_model()
create_planar_uncalib_deformable_model()
2.尋找模板:find_planar_calib_deformable_model()
find_planar_uncalib_deformable_model()
3.釋放模板:clear_deformable_model()
應用場合:搜尋物件有比例縮放的變形, 介於一般形狀匹配和線性變形匹配之間的一種方法。它可以匹配放大或是縮小的模板,但是僅限於模板大小的縮放,即行列縮放因子一樣。這也是它和線性縮放最大的不同。
1.建立模板:create_scaled_shape_model()
2.尋找模板:find_scaled_shape_model()
3.釋放模板:clear_deformable_model()
應用場合:搜尋物件有區域性變形, 在一張圖上查詢模板的時候,可以改變模板的尺寸,來查詢影象上具有區域性變形的模板。返回找到的變形的模板區域。
1.建立模板:create_local_deformable_model()
2.尋找模板:find_local_deformable_model()
3.釋放模板:clear_deformable_model()
應用場合:搜尋物件有輕微的變形,透視的場合,根據一些描述點的位置和灰度值來進行匹配。
1.建立模板:create_calib_descriptor_model()
2.尋找模板:find_calib_descriptor_model()
3.釋放模板:clear_descriptor_model()
create_aniso_shape_model (imagemodel, 'auto', -rad(10), rad(20), 'auto', 0.9, 1.7, 'auto', 0.9, 1.1, 'auto', 'none', 'use_polarity', 'auto', 20, modelid)
find_aniso_shape_model (image, modelid, -rad(10), rad(20), 0.9, 1.7, 0.9, 1.1, 0.7, 0, 0.5, 'least_squares', 0, 0.8, row, column, angle, scaler, scalec, score)
針對roi小區域建模板,應用場合: 模板的形狀和大小一經製作完畢便不再改變,在查詢模板的過程中,只會改變模板的方向和位置等來匹配目標影象中的影象。定位物件內部的灰度值可以有變化,但物件輪廓一定要清晰平滑。匹配速度比灰度快
【建立模板引數 create_shape_model】
create_shape_model(template : : numlevels, anglestart, angleextent, anglestep, optimization, metric, contrast, mincontrast : modelid)
create_shape_model (imageroi, numlevels, 0, rad(360), 'auto', 'none', 'use_polarity', 30, 10, modelid)
【檢察inspect_shape_model 可選】
inspect_shape_model(image : modelimages, modelregions : numlevels, contrast : )
建立好模板後,這時還需要監視模板,用inspect_shape_model()來完成,它檢查引數的適用性,還能幫助找到合適的引數
inspect_shape_model (imageroi, shapemodelimages, shapemodelregions, 8, 30)
【保留輪廓後用get_shape_model_contours 可選】
get_shape_model_contours( : modelcontours : modelid, level : )
獲得這個模板的輪廓,用於後面的匹配
get_shape_model_contours (shapemodel, modelid, 1)
【搜尋匹配find_shape_model】
find_shape_model(image : : modelid, anglestart, angleextent, minscore, nummatches, maxoverlap, subpixel, numlevels, greediness : row, column, angle, score)
在一幅圖中找出最佳匹配的模板,返回乙個模板例項的長、寬和旋轉角度
引數設定:
find_shape_model (searchimage, modelid, 0, rad(360), 0.7, 1, 0.5, 'least_squares', 0, 0.7, rowcheck, columncheck, anglecheck, score)
【 結果轉化 vector_angle_to_rigid或 affine_trans_contour_xld】
後期結果的仿射變換和輪廓處理
看了感覺怎麼樣?來說說吧。。。
喜歡記得關注起來!趕緊的。
模板匹配 HALCON
使用範圍 gray value based matching 要求照明不變的,內部灰度值和模板相同,應用極少 correlation based matching 不變性體現在 散焦 輕微的形變,線性光源,可以很好地處理紋理。僅僅可以處理灰度影象,不支援雜點 遮擋 縮放 非線性照明變換 以及多通道影...
Halcon模板匹配例項 1
用halcon形狀模版匹配,紅色矩形框是搜尋範圍roi 矩形框中間的是我訓練的模版,按理說應該只會匹配到roi中中間的那個 為什麼會搜到搜尋區域之外的部分,而且匹配分數還很高,這個設定set system border shape models false 不是可以決定是否可以匹配出影象邊界的地方嗎...
Halcon基於輪廓的模板匹配
大家自己找張測試,就是繪製搜尋區域跟模板提取,提取其輪廓,然後再找一張相似的,從中定位到模板。話不多說,直接上 read image image1,d users s200722103 桌面 r1 f8y046205u1n639a1 038 20201109103715200.jpg dev set...