1、区分各自硬币
* distinguishing of coins with the help of shape-based matching
*
dev_close_window ()
dev_open_window (0, 0, 652, 494, 'black', WindowHandle)
dev_update_window ('off')
Names := ['german','italian','greek','spanish']
Models := []
*制作多个模板
for i := 0 to 3 by 1
read_image (Image, 'coins/20cent_'+Names[i])
dev_display (Image)
*训练模板函数(后面有详述)
train_model (Image, ModelID)
*将获取的模板ModelID,存于Models 元组中
Models := [Models,ModelID]
endfor
*依次匹配目标结果
for i := 1 to 13 by 1
read_image (Image, 'coins/20cent_'+i$'.2'+'.png')
*搜索匹配函数(后面有详述)
find_coin (Image, Models, Row, Column, Angle, Score, Model)
display_model (Image, Model, Row, Column, Angle, Names, WindowHandle)
stop ()
endfor
* destroy models
for i := 0 to 3 by 1
clear_shape_model (Models[i])
endfor
2、训练模板函数train_model (Image, ModelID)
函数展开:
*硬币特征区域获取函数(后面有详述)
locate_coin (Image, Coin)
Contrast := 20
HysteresisContrast := [Contrast/2,Contrast+6,10]
*截取特征区域图片,存在ImageReduced中
reduce_domain (Image, Coin, ImageReduced)
* Called during the test phase to see if Contrast is selected correctly
* inspect_shape_model (ImageReduced, ModelImages, ModelRegions, 1, HysteresisContrast)
*从特征区域图片中提取模板,存于ModelID中
create_shape_model (ImageReduced, 'auto', 0, rad(360), 'auto', 'none', 'ignore_local_polarity', HysteresisContrast, 5, ModelID)
return ()
3、硬币特征区域获取函数locate_coin (Image, Coin)
函数展开:
threshold (Image, Region, 70, 255)
*将二值化结果进行连通域划分
connection (Region, ConnectedRegions)
*找到最大面积的连通域
select_shape_std (ConnectedRegions, SelectedRegions, 'max_area', 0)
*通过形状变换函数获取连通域凸包
shape_trans (SelectedRegions, RegionTrans, 'convex')
*获取特征区域
area_center (RegionTrans, Area, Row, Column)
gen_circle (Coin, Row, Column, 120)
return ()
4、搜索匹配函数find_coin (Image, Models, Row, Column, Angle, Score, Model)
函数展开:
locate_coin (Image, Coin)
area_center (Coin, Area, Row, Column)
gen_circle (Circle, Row, Column, 35)
reduce_domain (Image, Circle, ImageReduced)
find_shape_models (ImageReduced, Models, 0, rad(360), 0.6, 1, 0, 'least_squares', 0, 1, Row, Column, Angle, Score, Model)
return ()