10、halcon定位學習(2)--基於元件的匹配
1、 基於元件的匹配
說明:
基於元件的匹配是形狀匹配的擴充套件演算法
只有一個元件會在整個ROI 區域搜尋
其餘元件會根據元件之間的關聯關係去小範圍搜尋
條件:
組合物體要包含幾個剛性元件
元件之間存在一定的位置關係
元件間的關係
• 全影象內搜尋 root component
• 根據root component的位置確定其它元件位置
四個主要函式
◆ 訓練函式
train_model_components
◆ 建立元件模板函式
create_component_model
create_trained_component_model
◆ 搜尋元件模板函式
find_component_model
1》 建立模板
.確定元件區域
.建立元件模板
read_image(ModelImage,'modules/modules_model')
/…畫四個區域
gen_rectangle2(ComponentRegions,318,109,-1.62,34,19)
gen_rectangle2(Rectangle2,342,238,-1.63,32,17)
gen_rectangle2(Rectangle3,355,505,1.41,25,17)
gen_rectangle2(Rectangle4 247,448,0,14,8)
gen_rectangle2(Rectangle5,237,537,-1.57,13,10)
/…將區域合併
ComponentRegions := [ComponentRegions,Rectangle2]
ComponentRegions := [ComponentRegions,Rectangle3]
ComponentRegions := [ComponentRegions,Rectangle4]
ComponentRegions := [ComponentRegions,Rectangle5]
/…建立模板
create_component_model(ModelImage,ComponentRegions,20,20,rad(25),0,rad(360),15,40,15,10,0.8,[4,3,3,3,3],0,'none','use_polarity','true',ComponentModelID,RootRanking)
/…將模板寫入地址中
write_component_model(ComponentModelID,Filename)
2》 查詢模板
查詢元件模板
read_component_model(Filename,ComponentModelID)
while(true)
grab_image(SearchImage,FGHandle)
/…查詢模板
find_component_model(SearchImage,ComponentModelID,RootRanking[0],0,rad(360),0.5,0,0.5,'stop_search','search_from_best','none',0.8,'interpolation',0,0.8,ModelStart,ModelEnd,Score,RowComp,ColumnComp,AngleComp,ScoreComp,ModelComp)
dev_display(SearchImage)
/…顯示模板輪廓
for Match := 0 to |ModelStart|-1 by 1
get_found_component_model(FoundComponents,ComponentModelID,ModelStart,ModelEnd,RowComp,ColumnComp,AngleComp,ScoreComp,ModelComp,Match,'false',RowCompInst,ColumnCompInst,AngleCompInst,ScoreCompInst)
dev_display(FoundComponents)
endfor
endwhile
clear_component_model(ComponentModelID)
3》 訓練模板
TrainingImages:= []
/…讀入四張圖片
for i :=1 to 4 by 1
read_image(TrainingImage,'pipe_wrench_training_'+i)
TrainingImages := [TrainingImages,TrainingImage]
Endfor
/…訓練模板
train_model_components(ModelImage,InitialComponentRegions,TrainingImages,ModelComponents,22,60,30,0.65,-1,1,rad(60),'speed','rigidity',0.2,0.4,ComponentTrainingID)
write_training_components(ComponentTrainingID,FileNameTraining)
/…通過訓練結果建立模板
read_training_components(FileNameTraining,ComponentTrainingID)
create_trained_component_model(ComponentTrainingID,-rad(30),rad(60),10,0.55,4,0,'none','use_polarity','false',ComponentModelID,RootRanking)
write_component_model(ComponentModelID,FileName)
clear_training_components(ComponentTrainingID)
註釋:
train_model_components(
ModelImage, // 模板圖片
InitialComponents, // 根元件
TrainingImages, // 訓練圖片
ModelComponents, // 元件模板
ContrastLow, ContrastHigh, //同形狀模板
MinSize, MinScore, // 同形狀模板
SearchRowTol, SearchColumnTol, // 位置變化範圍
SearchAngleTol, // 角度變化範圍
TrainingEmphasis, // 速度或魯棒性優先
AmbiguityCriterion, // 模糊匹配規則
MaxContourOverlap, // 輪廓重合
ClusterThreshold, // 根元件歸類閾值
ComponentTrainingID // 模板ID
)