1. 程式人生 > >10、halcon定位學習(2)--基於元件的匹配

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

)