Halcon模板匹配是工程上使用必不可少的。
用途可定位,可查找,可識別,非常靈活
下面開始:
模板匹配是通過計算模板與圖像之間的相似度實現的
完整性檢測/物體識別/得到位姿
位姿剛性變換:平移和旋轉方向的變換
相似變換:平移和旋轉和縮放方向的變換
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】
后期結果的仿射變換和輪廓處理
看了感覺怎么樣?來說說吧。。。
喜歡記得關注起來!趕緊的。