*模板匹配+测量模型
*===========模板匹配================
*获取窗口句柄
dev_get_window (WindowHandle)
*创建窗口句柄
*dev_open_window (0, 0, 512, 512, 'black', WindowHandle1)
read_image (Image, '1.jpg')
rgb1_to_gray (Image, GrayImage)
*形状模型路径
shapePath:='shape.xyz'
*判断模型是否存在
file_exists (shapePath, FileExists)
if (FileExists)
*读取形状模型
read_shape_model (shapePath, ModelID)
else
*文件不存在,创建模型(难)
*创建ROI
stop ()
draw_rectangle2 (WindowHandle, Row, Column, Phi, Length1, Length2)
gen_rectangle2 (Rectangle, Row, Column, Phi, Length1, Length2)
reduce_domain (GrayImage, Rectangle, ImageReduced)
crop_domain (ImageReduced, ImagePart)
*注意:最后的模型ID要保持一致
create_shape_model (ImagePart, 'auto', 0, 6.28, 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID)
*存储形状模型
write_shape_model (ModelID, shapePath)
endif
*========测量模型==========================================
metPath:='met.ccb'
file_exists (metPath, FileExists1)
if (FileExists1)
*读取测量模型
read_metrology_model (metPath, MetrologyHandle)
else
*1.创建测量模型
create_metrology_model (MetrologyHandle)
*通过代码获取图像的宽高
*read_image (Image, '1.jpg')
*get_image_size (Image, Width, Height)
*set_metrology_model_image_size (MetrologyHandle, Width, Height)
*2.设置图像模型的图像大小(可选,使用会提高模型性能)
set_metrology_model_image_size (MetrologyHandle, 1920, 1080)
*3.创建测量模型的ROI(多个)
*左侧直线0
stop ()
draw_line (WindowHandle, Row11, Column11, Row2, Column2)
gen_region_line (RegionLines, Row11, Column11, Row2, Column2)
add_metrology_object_line_measure (MetrologyHandle, Row11, Column11, Row2, Column2, 20, 5, 1, 30, [], [], Index)
*右侧直线1
draw_line (WindowHandle, Row12, Column12, Row21, Column21)
gen_region_line (RegionLines1, Row12, Column12, Row21, Column21)
add_metrology_object_line_measure (MetrologyHandle, Row12, Column12, Row21, Column21, 20, 5, 1, 30, [], [], Index1)
*圆2
draw_circle (WindowHandle, Row3, Column3, Radius)
gen_circle (Circle, Row3, Column3, Radius)
add_metrology_object_circle_measure (MetrologyHandle, Row3, Column3, Radius, 20, 5, 1, 30, [], [], Index2)
write_metrology_model (MetrologyHandle, metPath)
endif
*4.修改模型/对象参数(选做)
read_image (Image2, '1.jpg')
rgb1_to_gray (Image2, GrayImage2)
find_shape_model (GrayImage2, ModelID, 0, rad(360), 0.5, 1, 0.5, 'least_squares', 0, 0.9, Row4, Column4, Angle1, Score1)
set_metrology_model_param (MetrologyHandle, 'reference_system', [Row4, Column4, Angle1])
*set_metrology_object_param (ModelID, 'all', 'num_instances', 1)
*========循环遍历图片================================
*显示模板匹配的轮廓(contours)
get_shape_model_contours (ModelContours, ModelID, 1)
*加粗轮廓
dev_set_line_width (5)
*设置颜色
*只能设置一个颜色
*dev_set_color
*设置多个颜色3,6,12
dev_set_colored (12)
for i := 1 to 4 by 1
imgName:=i+'.jpg'
read_image (Image1, imgName)
rgb1_to_gray (Image1, GrayImage1)
find_shape_model (GrayImage1, ModelID,0, rad(360), 0.5, 1, 0.5, 'least_squares', 0, 0.9, Row1, Column1, Angle, Score)
*显示形状模型匹配的轮廓(别记:C#无法使用)
*dev_display_shape_matching_results (ModelID, 'red', Row1, Column1, Angle, 1, 1, 0)
*仿射变换实现形状模型匹配轮廓的展示
*创建一个齐次矩阵
hom_mat2d_identity (HomMat2DIdentity)
*在齐次矩阵上创建平移矩阵
hom_mat2d_translate (HomMat2DIdentity,Row1, Column1, HomMat2DTranslate)
*在平移矩阵的基础上创建旋转矩阵
hom_mat2d_rotate (HomMat2DTranslate, Angle, Row1, Column1, HomMat2DRotate)
*在旋转矩阵基础上创建缩放矩阵
*hom_mat2d_scale (HomMat2DRotate, 2, 2, Row1, Column1, HomMat2DScale)
*应用矩阵到xxx上
*轮廓
affine_trans_contour_xld (ModelContours, ContoursAffineTrans, HomMat2DRotate)
*图像
*affine_trans_image
*多边形
*affine_trans_polygon_xld
*区域
*affine_trans_region
*======测量模型的5-7步=================================
*5.模板匹配对齐
*先模板匹配再对齐
align_metrology_model (MetrologyHandle,Row1, Column1, Angle)
*6应用模型
apply_metrology_model (GrayImage1, MetrologyHandle)
*7获得结果
*ROI真实轮廓
get_metrology_object_result_contour (LLine, MetrologyHandle, 0, 'all', 1.5)
get_metrology_object_result_contour (RLine, MetrologyHandle, 1, 'all', 1.5)
get_metrology_object_result_contour (Yuan, MetrologyHandle, 2, 'all', 1.5)
*获取真实参数
get_metrology_object_result (MetrologyHandle, 0, 'all', 'result_type', 'all_param', LLineP)
get_metrology_object_result (MetrologyHandle, 1, 'all', 'result_type', 'all_param', RLineP)
get_metrology_object_result (MetrologyHandle, 2, 'all', 'result_type', 'all_param', YuanLineP)
*8.根据参数计算结果
*angle_ll线和线的夹角
*angle_lx线和水平线的夹角
*distance_pp点和点的距离
*distance_pl点到线的距离
*distance_ss线段到线段的距离
distance_pl (LLineP[0],LLineP[1], RLineP[0], RLineP[1],RLineP[2], RLineP[3], Distance)
*循环前给个提示
if (i<4)
disp_continue_message (WindowHandle, 'black', 'true')
endif
*显示当前第几张
dev_disp_text ('当前第'+i+'张,还剩'+(4-i)+'张', 'window',0, 0, 'black', [], [])
stop ()
endfor
*释放形状模型
clear_shape_model (ModelID)
*释放测量模型
clear_metrology_model (MetrologyHandle)