(1) rft_generic(Image : ImageFFT : Direction, Norm, ResultType, Width : )
功能:计算输入图像image的快速傅立叶变换。
图形输入参数:Image:输入图像;
图像输出参数:ImageFFT:傅里叶变换图像;
控制输入参数1:Direction:计算正向或反向变换;
Direction = 'to_freq'(正向变换),ResultType必须设置为’complex’;
Direction='from_freq'(反向变换);
控制输入参数2:Norm:变换的归一化因子;Default value: 'sqrt'
控制输入参数3:ResultType:输出图像的图像类型;
控制输入参数4:Width:应该为其优化运行时间的图像的宽度;Default value: 512。
(2)correlation_fft(ImageFFT1, ImageFFT2 : ImageCorrelation : : )
功能:计算傅立叶变换后的输入图像ImageFFT1和ImageFFT2在频域中的相关性。
图形输入参数1:ImageFFT1:
图形输入参数2:ImageFFT2:
图形输出参数:ImageCorrelation:频域中输入图像的相关性。
(3)reduce_domain(Image, Region : ImageReduced : : )
功能:从输入图像中扣出指定区域大小的图像。
图形输入参数1:Image:输入图形;
图形输入参数2:Region:指定区域(新的定义域);
图形输出参数:ImageReduced
(4)local_max_sub_pix(Image : : Filter, Sigma, Threshold : Row, Column)
功能:以亚像素精度从图像image中提取局部最大值。
图形输入参数:Image:
控制输入参数1:Filter:偏导数的计算方法;Default value: 'facet';
控制输入参数2:Sigma:高斯Sigma。如果Filter是“facet”,Sigma可能为0.0以避免输入图像的平滑;
控制输入参数3:Threshold:Hessian矩阵特征值的最小绝对值;
控制输出参数:(Row, Column):检测到的最大值的坐标。
(5)gen_image_const( : Image : Type, Width, Height : )
功能:创建指定大小的图像。
图形输出参数:Image:
控制输入参数1:Type:像素类型;Default value: 'byte'(0~255);
控制输入参数2:(Width, Height):图像的宽度和高度。
(6)gen_image_proto(Image : ImageCleared : Grayval : )
功能:创建具有恒定灰度值的图像。
图形输入参数:Image:
图形输出参数:ImageCleared:
控制输入参数:Grayval:指定的灰度值。
(7)gen_rectangle2_contour_xld( : : Row, Column, Phi, Length1, Length2 : )
功能:创建任意方向的矩形XLD轮廓(通过传递一个矩形参数元组,可以创建多个XLD轮廓。)
图像输出参数:Rectangle:
图形输入参数1:(Row, Column):矩形中心的行列坐标;
图形输入参数2:Phi:矩形主轴的方向(水平轴和半长度Length1的边之间的角度(逆时针方向),单位:弧度);
图形输入参数3:Length1:矩形宽度的一半;
图形输入参数4:Length2:矩形高度的一半。
(8)gen_rectangle2( : Rectangle : Row, Column, Phi, Length1, Length2 : )
功能:创建任意方向的矩形区域(通过传递一个角点元组可以创建多个区域。)
图像输出参数:Rectangle:
图形输入参数1:(Row, Column):矩形中心的行列坐标;
图形输入参数2:Phi:矩形主轴的方向(水平轴和半长度Length1的边之间的角度(逆时针方向),单位:弧度);
图形输入参数3:Length1:矩形宽度的一半;
图形输入参数4:Length2:矩形高度的一半。
(9)create_shape_model(Template : : NumLevels, AngleStart, AngleExtent, AngleStep, Optimization, Metric, Contrast, MinContrast : ModelID)
功能:准备一个用于匹配的形状模型。
图形输入参数:Template:输入图像,其定义域将用于创建模型的ROI;
控制输入参数1:NumLevels:金字塔级别的最大值,如果NumLevels设置为“auto”(或0表示向后兼容性),create_shape_model将自动确定棱锥体级别的数量;
控制输入参数2:(AngleStart,AngleExtent):旋转角度范围,在该范围内,模型可以出现在图像中;
控制输入参数3:AngleStep:旋转角度的步长;
控制输入参数4:Optimization:用于生成模型的优化类型和可选方法,Default value: 'auto',可传参数['none','no_pregeneration'];
控制输入参数5:Metric:确定在图像中识别模型的条件,Default value: 'use_polarity',该参数会影响find_shape_model的运行时间;
控制输入参数6:Contrast:模板图像中对象的对比度的阈值或滞后阈值,以及可选的对象部分的最小尺寸,Default value: 'auto',可传参数[10,11,4];
控制输入参数7:MinContrast:搜索图像中对象的最小对比度;
控制输出参数:ModelID:模型的句柄,用于随后对find_shape_model的调用。
(10)find_shape_model(Image : : ModelID, AngleStart, AngleExtent, MinScore, NumMatches, MaxOverlap, SubPixel, NumLevels, Greediness : Row, Column, Angle, Score)
功能:在输入图像image中查找形状模型ModelID的最佳NumMatches实例(匹配项)。
图形输入参数:Image:输入图像;
控制输入参数1:ModelID:模型的句柄;
控制输入参数2:(AngleStart, AngleExtent):确定搜索模型的旋转范围,该范围最好等于创建模型期间给定的范围;
控制输入参数3:MinScore:设置待查找模型实例的最低分数;
控制输入参数4:NumMatches:要查找的模型实例数(或0表示所有匹配项);
控制输入参数5:MaxOverlap:该参数决定了两个实例最多可以重叠的分数(即0和1之间的数字),如果两个实例彼此重叠超过MaxOverlap,则只返回最佳实例。如果MaxOverlap=0,则找到的实例可能根本不重叠,而对于MaxOverlap=1,则返回所有实例;
控制输入参数6:SubPixel:如果不等于“none”,则为亚像素精度,Default value: 'least_squares'。确定是否应以亚像素精度提取实例(即位置和旋转角度);
控制输入参数7:NumLevels:匹配中使用的金字塔体级别数(如果|NumLevels|=2,则使用最低金字塔体级别),如果NumLevels设置为0,则使用create_shape_model中指定的金字塔级别数;
控制输入参数8:Greediness:搜索启发式的贪婪度(0:安全但缓慢;1:快速但可能错过匹配),Default value: 0.9,在几乎所有情况下,对于贪婪度=0.9时,总是可以找到形状模型;
控制输出参数1:(Row, Column)、Angle:在“行”、“列”和“角度”中返回找到的模型实例的位置和旋转;
控制输出参数2:Score:返回找到的每一个实例的分数(0~1小数),它是衡量模型在图像中可见程度的近似指标(例如,如果模型实例的一半被遮挡,则分数不能超过0.5)。
(11)gen_contour_polygon_xld( : Contour : Row, Col : )
功能:从元组Row和Col中给定的多边形(包括直线)生成xld轮廓。
图形输出参数:Contour:输出的轮廓
控制输入参数:(Row, Col):输入的行和列元组
*读取图片
read_image (Wafer_Image, './wafer_dies.png')
*获取图片的宽和高
get_image_size (Wafer_Image, Width, Height)
*傅里叶正向变换
rft_generic (Wafer_Image, ImageFFT, 'to_freq', 'none', 'complex', Width)
*计算傅里叶变换后图像的自相关性
correlation_fft (ImageFFT, ImageFFT, ImageCorrretelation)
*傅里叶逆行变换
rft_generic (ImageCorrretelation, ImageFFT1, 'from_freq', 'n', 'real', Width)
*创建一个平行于坐标轴的矩形区域
gen_rectangle1 (Rectangle, 1, 1, Height/2, Width/2)
*从输入图像中抠出指定区域大小的图像
reduce_domain (ImageFFT1, Rectangle, ImageReduced)
*从图像中提取局部最大值
local_max_sub_pix (ImageReduced, 'gauss', 2, 50000, Row, Col)
*创建指定宽高的图像
gen_image_const (Image, 'byte', Width, Height)
*生成指定灰度值的图像
gen_image_proto (Image, Template, 128)
*芯片间隙线的宽度
LineWidth:=7
*芯片的高度
DieHeight:= 86
*芯片的宽度
DieWidth:= 161
RefRow:= round(0.5*Height)
RefCol:= round(0.5*Width)
LineWidthFraction:=0.6
*创建矩形轮廓
gen_rectangle2_contour_xld (Rectangle1, RefRow, RefCol, 0, 0.5*LineWidthFraction*LineWidth,DieHeight)
paint_xld (Rectangle1, Template, Template, 0)
gen_rectangle2_contour_xld (Rectangle2, RefRow, RefCol, 0, DieWidth,0.5*LineWidthFraction*LineWidth)
paint_xld (Rectangle2, Template, Template, 0)
*创建矩形区域
gen_rectangle2 (ROI, RefRow, RefCol, 0, DieWidth, DieHeight)
reduce_domain (Template, ROI, TemplateReduced)
*创建形状模型
create_shape_model (TemplateReduced, 'auto', 0, 0, 'auto', 'auto', 'ignore_local_polarity', 'auto', 5, ModelID)
*查看模板轮廓
get_shape_model_contours (ModelContours, ModelID, 1)
*模板匹配
find_shape_model (Wafer_Image, ModelID, 0, 0, 0.5, 1, 0.5, 'least_squares', 0, 0.9, Row1, Column1, Angle, Score)
gen_cross_contour_xld (Cross, Row1, Column1, 6, Angle)
*最后根据匹配的位置计算出切割线
Num_Row:=ceil(real(Row1)/real(DieHeight))
Num_Col:=ceil(real(Column1)/real(DieWidth))
NumRowMax:=ceil(real(Height)/real(DieHeight))
NumColMax:=ceil(real(Width)/real(DieWidth))
dev_display (Wafer_Image)
for RowIndex:=-Num_Row to NumRowMax-Num_Row by 1
RowCurrent:=Row1+RowIndex*DieHeight
gen_contour_polygon_xld (CuttingLine, [RowCurrent,RowCurrent], [0,Width-1])
dev_display (CuttingLine)
endfor
for ColIndex:=-Num_Col to NumColMax-Num_Col by 1
ColCurrent:=Column1+ColIndex*DieWidth
gen_contour_polygon_xld (CuttingLine, [0,Height-1], [ColCurrent,ColCurrent])
dev_display (CuttingLine)
endfor
结果展示: