31.5、几何定位---其他相关算子
1、get_shape_model_contours( : ModelContours : ModelID, Level : ) 1
2、get_shape_model_origin( : : ModelID : Row, Column) 1
3、set_shape_model_origin( : : ModelID, Row, Column : ) 1
6、set_shape_model_param( : : ModelID, GenParamNames, GenParamValues : ) 1
7、inspect_shape_model(Image : ModelImages, ModelRegions : NumLevels, Contrast : ) 1
8、set_system( : : SystemParameter, Value : ) 2
9、dev_display_shape_matching_results(: : ,ModelID,Color,Row,Column,Angle,ScaleR,ScaleC,Model : ) 2
6、file_exists( : : FileName : FileExists) 2
1、move_region(Region : RegionMoved : Row, Column : ) 2
2、vector_angle_to_rigid( : : Row1, Column1, Angle1, Row2, Column2, Angle2 : HomMat2D) 3
3、affine_trans_region(Region : RegionAffineTrans : HomMat2D, Interpolate : ) 3
1、draw_circle_mod( : : WindowHandle, RowIn, ColumnIn, RadiusIn : Row, Column, Radius) 4
一、定位相关
1、get_shape_model_contours( : ModelContours : ModelID, Level : )
功能:根据金字塔级别,获取对应形状模板的轮廓
ModelContours:输出轮廓
ModelID:输入模板句柄
Level:输入金字塔级别,默认为1
2、get_shape_model_origin( : : ModelID : Row, Column)
功能:获取形状模板的原点(参考点)
ModelID:输入模板句柄
描述:
算子get_shape_model_origin返回ModelID指向的模板的原点,原点是相对于创建模板的图像定义域(区域)的
质心而言的。原点为(0,0)表示把模板图像定义域(区域)的质心作为原点。原点为(-20,-40)表示原点位于模板图像定义域质心的左下方。
3、set_shape_model_origin( : : ModelID, Row, Column : )
功能:设置形状模板的原点(参考点)
4、determine_shape_model_params(Template : : NumLevels, AngleStart, AngleExtent, ScaleMin, ScaleMax, Optimization,
Metric, Contrast, MinContrast, Parameters : ParameterName, ParameterValue)
功能:确定形状模板的参数
Parameters:输入自动确定的参数。默认值'all',可选值:'all', 'num_levels', 'angle_step', 'scale_step', 'scale_r_step',
'scale_c_step', 'optimization', 'contrast', 'contrast_hyst', 'min_size', 'min_contrast'
ParameterName:输出自动确定后的参数名称
ParameterValue:输出自动确定后的参数值
5、get_shape_model_params( : : ModelID : NumLevels, AngleStart, AngleExtent, AngleStep, ScaleMin, ScaleMax, ScaleStep,
功能:获取形状模板参数。
6、set_shape_model_param( : : ModelID, GenParamNames, GenParamValues : )
功能:设置形状模板的参数
ModelID:输入要设置参数的模板句柄
GenParamNames:输入要修改那个参数,可选值:'min_contrast', 'timeout','border_shape_models'
描述:
'timeout'是设置算子最长的运行时间,用来查询形状模板ModelID(例如find_shape_model)在最大循环时间
必须保证时很有用,它是以毫秒为最小单位。在使用超时情况下,搜索时间会增加10%,为了禁用超时,可以设定一个负数或者false
'border_shape_models':在搜索模板时可能存在一部分在图像以外(即跨图像边界),它可设置为'true'、'false'、'system'。
'system'为默认行为。对于参数'border_shape_models'系统广泛采用set_system( : : SystemParameter, Value : )算子
来实现
7、inspect_shape_model(Image : ModelImages, ModelRegions : NumLevels, Contrast : )
功能:根据输入金字塔层次和对比度创建对应的模板图像和模板区域效果图
read_image (Capture, 'F:/390.jpg')
*灰度图
rgb1_to_gray (Capture, GrayImage)
*输入金字塔和对比度
inspect_shape_model (GrayImage, ModelImages, ModelRegions, 6, [20,50,50])
*查看每一层金字塔的图像信息和边缘信息
select_obj (ModelImages, ObjectSelected, 4)
select_obj (ModelRegions, ObjectSelected, 4)
8、set_system( : : SystemParameter, Value : )
功能:设置很多系统参数,比如常用的有创建模板时是否完整预生成定义'pregenerate_shape_models',和
'border_shape_models'等
9、dev_display_shape_matching_results(: : ,ModelID,Color,Row,Column,Angle,ScaleR,ScaleC,Model : )
功能:显示现状匹配结果
注:Halcon 10 版本没此算子
二、文件读写
1、图像读写
write_image(Image : : Format, FillColor, FileName : )
read_image( : Image : FileName : )
2、ROI读写(后缀为.reg、.tif、.tiff)
write_region(Region : : FileName : )
read_region( : Region : FileName : )
3、数组读写(后缀为.tup)
write_tuple( : : Tuple, FileName : )
read_tuple( : : FileName : Tuple)
4、模板读写(后缀名为.shm)
write_shape_model( : : ModelID, FileName : )
read_shape_model( : : FileName : ModelID)
6、file_exists( : : FileName : FileExists)
功能:判断指定路径的文件是否存在
三、移动区域(仿射变换)
1、move_region(Region : RegionMoved : Row, Column : )
功能:移动区域
gen_rectangle1 (Region, 293.971, 234.605, 371.132, 338.2)
move_region (Region, RegionMoved, 0, 200)
注:这种平移只能是xy轴的平移,假若想功能更强大的平移可以选择使用下面的仿射变换。
2、vector_angle_to_rigid( : : Row1, Column1, Angle1, Row2, Column2, Angle2 : HomMat2D)
功能:根据点和角度计算刚性仿射变换矩阵,支持旋转和平移
Row1, Column1, Angle1:输入原始点坐标和角度
Row2, Column2, Angle2:输入变换目的的点坐标和角度
HomMat2D:输出仿射变换矩阵
3、affine_trans_region(Region : RegionAffineTrans : HomMat2D, Interpolate : )
功能:对区域进行任意的二位仿射变换
Region:输入要进行仿射变换的region
RegionAffineTrans:输出结果
HomMat2D:输入有2产生的仿射变换矩阵
Interpolate:是否使用插值算法
例1(平移):
gen_rectangle1 (Region, 293.971, 234.605, 371.132, 338.2)
*计算仿射变换矩阵(平移的参考点为原始坐标0,0)
vector_angle_to_rigid (0, 0, 0, 0, 200, 0, HomMat2D)
*根据仿射变换矩阵对输入区域进行防反射变换
affine_trans_region (Region, RegionAffineTrans, HomMat2D, 'false')
例子2(旋转)
gen_rectangle1 (Region, 293.971, 234.605, 371.132, 338.2)
*计算原始区域的中心坐标
area_center (Region, Area, Row, Column)
*计算仿射变换矩阵,参考点(旋转中心)是原始区域中心坐标Row, Column;原始角度为0,即以原始区域的角度为0度
vector_angle_to_rigid (Row, Column, 0, Row, Column, rad(45), HomMat2D1)
*进行仿射变换
affine_trans_region (Region, RegionAffineTrans1, HomMat2D1, 'false')
四、其他
1、draw_circle_mod( : : WindowHandle, RowIn, ColumnIn, RadiusIn : Row, Column, Radius)
功能:根据已有的圆创建圆形(可以用于创建同心圆)
*设置画的方式
dev_set_draw ('margin')
*画出第一个圆
draw_circle (3600, Row, Column, Radius)
gen_circle (Circle, Row, Column, Radius)
*根据第一个圆画第二个圆
draw_circle_mod (3600, Row, Column, Radius, Row1, Column1, Radius1)
gen_circle (Circle1, Row1, Column1, Radius1)
*由于做差集运算第一个参数要比第二个参数的区域要大,所以可以通过面积来判断,防止出错
area_center (Circle, Area, Row2, Column2)
area_center (Circle1, Area1, Row2, Column2)
if(Area>Area1)
difference (Circle, Circle1, RegionDifference)
else
difference (Circle1, Circle, RegionDifference)
endif
应用2:定位中创建模板可以用到同心圆