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)					**清理模板匹配