USING_TRANSLATE_MEASURE := 0 **修改写一行来选择模式
dev_update_window(‘off’) **通用配置
read_image( **读取图片
ModeImage, **输出图片
‘razors1’) **图片路径
get_image_pointer1( **返回图像的第一个通道的指示器Pointer
ModelImage, **输入图像
Pointer, **输出指示器
Type, **图像类型
Width, **图像宽
Height) **图像高
dev_close_window() **关闭窗口
dev_open_window( **打开窗口
0, **左上角行坐标
0, **左上角列坐标
Width, **窗口宽度
Height, **窗口高度
‘white’, **窗口背景颜色
WindowHandle) **窗口背景颜色
dev_set_part( **设置显示部分
0, **左上角行坐标
0, **左上角列坐标
Height – 1, **右下角行坐标
Width – 1) **右下角列坐标
dev_display(ModelImage) **显示图片
dev_set_color(‘cyan’) **绘图显示的颜色
dev_set_draw(‘margin’) **绘图模式绘制边缘
dev_set_line_width(2) **设置绘制宽度2
stop() **程序暂停
Row1 := 46
Column1 := 57
Row2 := 79
Column2 := 94
gen_rectangle1( **生成矩形
ROIPart1, **输出矩形
Row1, **左上角行坐标
Column1, **左上角列坐标
Row2, **右下角行坐标
Column2) **右下角列坐标
gen_rectangle1( **生成矩形
ROIPart2, **输出矩形
Row1+364, **左上角行坐标
Column1+13, **左上角列坐标
Row2+364, **右下角行坐标
Column2+13) **右下角列坐标
union2( **合并区域
ROIPart1, **输入区域1
ROIPart2, **输入区域2
ModelROI) **输出区域
area_center( **计算区域中心
ModelROI, **输入区域
Area, **输出区域面积
CenterROIRow, **输出区域中心行坐标
CenterROIColumn) **输出区域中心列坐标
dev_display(ModelImage) **显示图片ModelImage
dev_display(ModelROI) **显示区域ModelROI
stop() **程序暂停
reduce_domain( **从图片中裁剪出区域大小的图片
ModulImage, **输入图片
ModelROI, **输入区域
ImageROI) **输出裁剪后的图片
create_shape_model( **创建匹配模型
ImageROI, **输入模板图片ImageROI
4, **金字塔层数
0, **模板旋转起始角度
0, **结束角度
’auto’, **角度步长
‘none’, **模板优化创建方法
‘use_polarity’, **匹配方法设置
30, **对比度
10, **最小对比度
ModelID) **模板句柄
inspect_shape_model( **创建形状模型
ImageROI, **输入图片
ShapeModelImage, **输出模板图片
ShapeModelRegion, **输出模板区域
1, **金字塔层数
30) **对比度
get_shape_model_contours( **获取模板轮廓
ShapeModel, **输出模板轮廓
ModelID, **匹配模型句柄
1) **金字塔层数
dev_clear_window() **清空窗口内容
dev_set_color(‘blue’) **设置绘制颜色
dev_display(ShapeModelRegion) **显示ShapeModelRegion
stop() **程序停止
**第一步:创建测量ROI,显示出来
Rect1Row := 244
Rect1Col := 73
DistColRect1Rect2 := 17
Rect2Row := Rect1Row
Rect2Col := Rect1Col + DistColRect1Rect2
RectPhi := rad(90)
RectLength1 := 122
RectLength2 := 2
gen_rectangle2( **创建矩形2
MeasureROI1, **输出矩形
Rect1Row, **矩形中心行坐标
Rect1Col, **矩形中心列坐标
RectPhi, **矩形旋转角度
RectLength1, **矩形半宽
RectLength2) **矩形半高
gen_rectangle2( **创建矩形2
MeasureROI2, **输出矩形
Rect2Row, **矩形中心行坐标
Rect2Col, **矩形中心列坐标
RectPhi, **矩形旋转角度
RectLength1, **矩形半宽
RectLength2) **矩形半高
dev_display(ModelImage) **显示图片
dev_set_color(‘yellow’) **设置绘制颜色
dev_display(MeasureROI1) **显示区域
dev_display(MeasureROI2) **显示区域
get_system( **获取系统参数
‘clip_region’, **将测量ROI转换到XLD模型上
OriginalClipRegion) **记录参数值
set_system( **设置系统参数
‘clip_region’, **将测量ROI转换到XLD模型上
‘false’) **没有剪切
move_region( **将区域移动
MeasureROI1, **输入区域
MeasureROI1Ref, **输出区域
-CenterROIRow, **行坐标移动距离
-CenterROIColumn) **列坐标移动距离
move_region( **将区域移动
MeasureROI2, **输入区域
MeasureROI2Ref, **输出区域
-CenterROIRow, **行坐标移动距离
-CenterROIColumn) **列坐标移动距离
set_system( **设置系统参数
‘clip_region’, **将测量ROI转换到XLD模型上
OriginalClipRegion) **参数值
DistRect1CenterRow := Rect1Row – CenterROIRow
DistRect1CenterCol := Rect1Col – CenterROIColumn
DistRect2CenterRow := Rect2Row – CenterROIRow
DistRect2CenterCol := Rect2Col – CenterROIColumn
if(USING_TRANSLATE_MEASURE != 0)
gen_measure_rectangle2( **生成测量矩形
Rect1Row, **矩形的中心位置行
Rect1Col, **矩形的中心位置列
RectPhi, **矩形的角度
RectLength1, **矩形的半宽
RectLength2, **矩形的半高
Width, **图片的宽
Height, **图片的高
‘bilinear’, **测量方式
MeasureHandle1) **测量句柄
gen_measure_rectangle2( **生成测量矩形
Rect1Row, **矩形的中心位置行
Rect1Col, **矩形的中心位置列
RectPhi, **矩形的角度
RectLength1, **矩形的半宽
RectLength2, **矩形的半高
Width, **图片的宽
Height, **图片的高
‘bilinear’, **测量方式
MeasureHandle1) **测量句柄
endif
stop() **程序暂停
**第二步 从其他图片中发现目标
read_image( **读取图片
SearchImage, **输出图片
‘razors2’) **图片路径
dev_display(SearchImage) **显示图片
find_shape_model( **模型匹配
SearchImage, **输入图片
ModelID, **模板句柄
0, **搜索时的起始角度
0, **搜索时的结束角度
0.8, **最小匹配值
0, **输出匹配的最大个数
0.5, **重叠的目标大于该值时,输出一个好点的
‘least_squares’, **计算精度的设置
0, **搜索时的金字塔层数
0.7, **贪婪度,越高搜索越快,但容易找不到
RowCheck, **搜索到的目标行坐标
ColumnCheck, **搜索到的目标列坐标
AngleCheck, **搜索到的目标角度
Score) **搜索到的目标得分
if(|Score|>0) **如果搜索到的目标个数大于0
for I := 0 to |Score| - 1 by 1
**第三步 确定仿射变换
vector_angle_to_rigid( **创建变换矩阵
0, **原始点的行坐标
0, **原始点的列坐标
0, **原始点的角度
RowCheck[i], **转换点的行坐标
ColCheck[i], **转换点的列坐标
AngleCheck[i], **转换点的角度
MovementOfObject) **输出仿射变换矩阵
affine_trans_contour_xld( **对xld转换
ShapeModel, **原始点
ModelAtNewPosition, **转换后的点
MoveMentOfObject) **仿射变换矩阵
dev_display(ModelAtNewPosition) **显示转换后的点
**第四步 测量卡槽的宽度和间距
affine_trans_region( **对region转换
MeasureROI1Ref, **输入区域
MeasureROI1AtNewPosition, **转换后的区域
MovementOfObject, **仿射变换矩阵
‘constant’) **插值类型
affine_trans_region( **对region转换
MeasureROI2Ref, **输入区域
MeasureROI2AtNewPosition, **转换后的区域
MovementOfObject, **仿射变换矩阵
‘constant’) **插值类型
dev_display(MeasureROI1AtNewPosition)**显示区域
dev_display(MeasureROI2AtNewPoition) **显示区域
affine_trans_pixel( **对像素点转换
MovementOfObject, **仿射变换矩阵
DistRect1CenterRow, **输入点行坐标
DistRect1CenterCol, **输入点列坐标
Rect1RowCheck, **输出点行坐标
Rect1ColCheck) **输出点列坐标
affine_trans_pixel( **对像素点转换
MovementOfObject, **仿射变换矩阵
DistRect2CenterRow, **输入点行坐标
DistRect2CenterCol, **输入点列坐标
Rect2RowCheck, **输出点行坐标
Rect2ColCheck) **输出点列坐标
if(USING_TRANSLATE_MEASURE != 0)
**将测量句柄的参考点输出
translate_measure( **将测量矩形移动到参考点
MeasureHandle1, **测量句柄
Rect1RowCheck, **参考点行坐标
Rect1ColCheck) **参考点列坐标
translate_measure( **将测量矩形移动到参考点
MeasureHandle2, **测量句柄
Rect2RowCheck, **参考点行坐标
Rect2ColCheck) **参考点列坐标
measure_pairs( **开始测量
SearchImage, **输入图片
MeasureHandle1, **测量句柄
2, **高斯滤波值
25, **区分边缘的分割值
‘negative’, **搜索方向
‘all’, **搜索结果
RowEdge11, **一对边缘中的起点行坐标
ColEdge11, **一对边缘中的起点列坐标
Ampl1, **幅值大小
RowEdge21, **一对边缘中的末点行坐标
ColEdge21, **一对边缘中的末点列坐标
Amp21, **幅值大小
Width1, **起末点之间的距离
Distance1) **两对边缘之间的距离
measure_pairs( **开始测量
SearchImage, **输入图片
MeasureHandle2, **测量句柄
2, **高斯滤波值
25, **区分边缘的分割值
‘negative’, **搜索方向
‘all’, **搜索结果
RowEdge12, **一对边缘中的起点行坐标
ColEdge12, **一对边缘中的起点列坐标
Ampl2, **幅值大小
RowEdge22, **一对边缘中的末点行坐标
ColEdge22, **一对边缘中的末点列坐标
Amp21, **幅值大小
Width2, **起末点之间的距离
Distance2) **两对边缘之间的距离
else
**创建测量句柄,使用完后释放资源
RectPhiCheck := Rectphi + AngleCheck[i]
gen_measure_rectangle2( **创建测量矩形
Rect1RowCheck, **矩形的中心行坐标
Rect1ColCheck, **矩形的中心列坐标
RectPhiCheck, **矩形角度
RectLength1, **矩形的半宽
RectLength2, **矩形的半高
Width, **图片的半宽
Height, **图片的半高
‘bilinear’, **插值类型
MeasureHandle1) **测量句柄
gen_measure_rectangle2( **创建测量矩形
Rect2RowCheck, **矩形的中心行坐标
Rect2ColCheck, **矩形的中心列坐标
RectPhiCheck, **矩形角度
RectLength1, **矩形的半宽
RectLength2, **矩形的半高
Width, **图片的半宽
Height, **图片的半高
‘bilinear’, **插值类型
MeasureHandle2) **测量句柄
measure_pairs( **开始测量
SearchImage, **输入图片
MeasureHandle1, **测量句柄
2, **高斯滤波值
25, **区分边缘的分割值
‘negative’, **搜索方向
‘all’, **搜索结果
RowEdge11, **一对边缘中的起点行坐标
ColEdge11, **一对边缘中的起点列坐标
Ampl1, **幅值大小
RowEdge21, **一对边缘中的末点行坐标
ColEdge21, **一对边缘中的末点列坐标
Amp21, **幅值大小
Width1, **起末点之间的距离
Distance1) **两对边缘之间的距离
measure_pairs( **开始测量
SearchImage, **输入图片
MeasureHandle2, **测量句柄
2, **高斯滤波值
25, **区分边缘的分割值
‘negative’, **搜索方向
‘all’, **搜索结果
RowEdge12, **一对边缘中的起点行坐标
ColEdge12, **一对边缘中的起点列坐标
Ampl2, **幅值大小
RowEdge22, **一对边缘中的末点行坐标
ColEdge22, **一对边缘中的末点列坐标
Amp21, **幅值大小
Width2, **起末点之间的距离
Distance2) **两对边缘之间的距离
close_measure(MeasureHandle1)**关闭测量矩形
close_measure(MeasureHandle2)**关闭测量矩形
endif
**第六步 检查太短或者缺失的卡槽
NumberTeeth1 := |Width1|
NumberTeeth2 := |Width2|
dev_set_color(‘red’) **设置绘制颜色
if(NumberTeeth1 < 37)
for j :=0 to NumberTeeth1 – 2 by 1
if(Distance1[j] > 4.0) **如果距离大于4.0
RowFault := round( **行坐标
0.5 *
(RowEdge11[j + 1] + RowEdge21[j]))
ColFault := round( **列坐标
0.5 *
(ColEdge11[j + 1) + ColEdge21[j])
disp_rectangle2( **显示矩形
WindowHandle, **窗口句柄
RowFault, **矩形中心行坐标
ColFault, **矩形中心列坐标
0, **矩形旋转角度
4, **矩形半宽
4) **矩形半高
dev_open_window( **打开窗口
0, **左上角行坐标
Width + 20, **左上角列坐标
80, **窗口宽度
80, **窗口高度
‘black’, **背景颜色,黑色
WindowHandleZoom) **窗口句柄
dev_set_part( **设置显示部分
RowFault – 10, **左上角行坐标
ColFault – 10, **左上角列坐标
RowFault + 10, **右下角行坐标
ColFault + 10) **右下角列坐标
dev_display(SearchImage) **显示图片
disp_rectangle2( **显示矩形
WindowHandleZoom, **窗口句柄
RowFault, **矩形中心行坐标
ColFault, **矩形中心列坐标
0, **矩形旋转角度
4, **矩形半宽
4) **矩形半高
stop() **程序暂停
dev_close_window() **关闭窗口
dev_set_part( **设置显示部分
0, **左上角行坐标
0, **左上角列坐标
Height – 1, **右下角行坐标
Width – 1) **右下角列坐标
endif
endfor
endif
if(NumberTeeth2 < 37)
for j := 0 to NumberTeeth2 – 2 by 1
if(Distance2[j] > 4.0) **如果距离大于4
RowFault := round( **行坐标
0.5 *
(RowEdge12[j+1] + RowEdge22[j]))
ColFault := round( **列坐标
0.5 *
(ColEdge12[j+1] + ColEdge22[j]))
disp_rectangle2( **显示矩形
WindowHandle, **窗口句柄
RowFault, **矩形中心行坐标
ColFault, **矩形中心列坐标
0, **矩形旋转角度
4, **矩形半宽
4) **矩形半高
dev_open_window( **打开窗口
0, **左上角行坐标
width + 20, **左上角列坐标
80, **窗口宽度
80, **窗口高度
‘blacke’, **背景颜色,黑色
WindowHandleZoom) **窗口句柄
dev_set_part( **设置显示部分
RowFault-10, **左上角行坐标
ColFault – 10, **左上角列坐标
RowFault + 10, **右下角行坐标
ColFault + 10) **右下角列坐标
dev_display(SearchImage) **显示图片
disp_rectangle2( **显示矩形
WindowHandleZoom, **窗口句柄
RowFault, **矩形中心行坐标
ColFault, **矩形中心列坐标
0, **矩形旋转角度
4, **矩形半宽
4) **矩形半高
stop() **程序暂停
dev_close_window() **关闭窗口
dev_set_part( **设置显示部分
0, **左上角行坐标
0, **左上角列坐标
Height – 1, **右下角行坐标
Width – 1) **右下角列坐标
endif
endfor
endif
dev_set_color(‘yellow’) **设置绘制颜色
stop() **程序暂停
endfor
endif
*程序结束,清理资源
if(USING_TRANSLATE_MEASURE != 0)
close_measure(MeasureHandle1) **清理测量矩形
close_measure(MeasureHandle2) **清理测量矩形
endif
dev_updata_window(‘on’) **打开窗口更新
clear_shape_model(ModelID) **清理模板匹配