基于形状的模板匹配
read_image (Bd01, 'F:/2020spring/机器视觉/课件/lesson6videos模板匹配/Imgdata/bd-1.png')
gen_rectangle1 (ROI_0, 96.3836, 120.125, 384.507, 484.858)
reduce_domain (Bd01, ROI_0, ImageReduced)
create_shape_model (ImageReduced, 'auto', 0, rad(360), 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID)
for i := 1 to 20 -1 by 1
read_image(Image,'F:/2020spring/机器视觉/课件/lesson6videos模板匹配/Imgdata/bd-'+i+'.png')
dev_display(Image)
find_shape_model (Image, ModelID, 0, rad(360), 0.5, 1, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Score)
dev_display_shape_matching_results (ModelID, 'red', Row, Row, Angle, 1, 1, 0)
stop()
endfor
clear_shape_model (ModelID)
- 运行结果
基于相关性的模板匹配
dev_open_window (0, 0, 768, 512, 'black', WindowHandle)
read_image (Image, 'F:/2020spring/机器视觉/课件/lesson6videos模板匹配/Imgdata/bd-1.png')
gen_circle (ROI_0, 238.226, 307.152, 184.855)
area_center (ROI_0, Area, Row, Column)
reduce_domain (Image, ROI_0, ImageReduced1)
create_ncc_model (ImageReduced1, 'auto', -0.39, 0.79, 'auto', 'use_polarity', ModelID)
rows:=[]
columns:=[]
*创建矩阵存放圆心
dev_set_draw ('margin')
*dev_set_draw定义region的填充模式。 如果DrawMode设置为'fill',region显示为填充,如果设置为'margin',则只显示轮廓。
for i := 19 to 20 by 1
read_image(Image,'F:/2020spring/机器视觉/课件/lesson6videos模板匹配/Imgdata/bd-'+i+'.png')
find_ncc_model (Image, ModelID, 0, rad(360), 0.8, 1, 0.5, 'true', 0, Row1, Column1, Angle, Score)
vector_angle_to_rigid (Row, Column, 0, Row1, Column1, 0, HomMat2D)
rows:=[rows,Row1]
columns:=[columns,Column1]
affine_trans_region (ROI_0, RegionAffineTrans, HomMat2D, 'nearest_neighbor')
dev_display (Image)
dev_display (RegionAffineTrans)
disp_continue_message (WindowHandle, 'black', 'true')
stop()
endfor
clear_ncc_model (ModelID)
- 运行结果及分析
从这张图可以看到当物体转的角度大的时候,模板匹配的时候匹配分数低于设定的0.5,未输出圆心坐标,则模板匹配失败
这张图片,物体已经转过180°,匹配分数为0.8。