读取图像、阈值分割、填充、打散、筛选、形态学操作(膨胀腐蚀)、筛选出关心的区域
获取感兴趣的区域图像
将缺陷进行凸显
提取缺陷
*获取窗口句柄
dev_get_window(WindowHandle)
*设置缺陷最小面积
minDefectArea:=200
read_image(Image1,'........')
定位的目的是为了不要在图像上检测,只选出需要检测的区域
*阈值分割
threshold(Image1,Region,130,255)
*填充
fill_up(Region,RegionFillUp)
*打散
connection(RegionFillUp,ConnectedRegions)
*筛选面积最大的区域
select_shape_std(ConnectedRegions,SelectedRegions,'max_area',70)
4.获取ROI(感兴趣)区域图像
*拟合最小外接圆
smallest_circle(SelectedRegions,Row,Column,Redius)
*生成圆区域
gen_circle(ROIRegion,Row,Column,Radius)
*修整、去除干扰区域
erosion_circle(ROIRegion,RegionErosion1,15)
*获取区域对应的图像(核心算子:把对应区域上的图像提取出来)
reduce_domain(Image1,RegionRrosion1,ImageReduced)
图像预处理的目的是为了凸显缺陷
*图像增强:亮的更亮、暗的更暗,增强对比度
mult_image(ImageReduced,ImageReduced,ImageResult,0.005,0)
图像算法处理的目的是为了提取缺陷
*再次阈值分割
threshold(ImageResult,Region1,0,180)
*打散
connection(Region1,ConnectedRegions1)
*根据面积筛选特征区域
select_shape(ConnectedRegions1,SelectedRegions1,'area','and',minDefectArea,8888)
输出筛选出的缺陷数量、文本显示
*获取缺陷区域的数量
count_obj(SelectedRegions1,Number)
if(Number>0)
*设置显示文本颜色
dev_set_color('red')
Text:='NG'
*显示缺陷区域
dev_display(SelectedRegions1)
*显示文本
disp_message(WindowHandle,Text,'window',12,12,'',false)
endif