看的是这段----铣刀刀口破损缺陷检测----
*****************************************************************************第一 图像预处理********************************************************
- *读取一张图像
- read_image(Image,'1.bmp')
- *对图像的灰度值在0到255范围内拉伸
- scale_image_max (Image, ImageScaleMax)
- *反选像素的位
- bit_not (ImageScaleMax, ImageNot)
- *生成一个椭圆元素
- gen_disc_se (SE, 'byte', 45,45, 0)
- *黑帽运算,分割比临近暗的区域
- gray_bothat (ImageNot, SE, ImageBotHat)
- *生成ROI1
- gen_rectangle1 (ROI_0, 574.119, 268.867, 644.104, 337.728)
- *生成ROI2
- gen_rectangle1 (TMP_Region, 87.9029, 783.297, 179.989, 809.627)
- *合并两个ROI
- union2 (ROI_0, TMP_Region, ROI_0)
- *生成ROI3
- gen_rectangle1 (TMP_Region, 743.558, 937.222, 839.327, 997.981)
- *合并ROI
- union2 (ROI_0, TMP_Region, ROI_0)
- *将合并ROI区域的图像剪切
- reduce_domain (ImageBotHat, ROI_0, TemplateImage)
- *设置区域填充方式
- dev_set_draw ('margin')
- *获取图像的数据,类型,高度,宽度
- get_image_pointer1 (TemplateImage, Pointer, Type, Width, Height)
- *显示图像
- dev_display (TemplateImage)
复制代码
*****************************************************************************第二 自动寻找最佳阈值********************************************************
- * 最大方差初始化为0
- MaxVariance := 0.0
- * 最佳分割灰度阈值从1遍历到255,初始阈值的选取可以取图像平均灰度值
- for ImgThreshold := 1 to 255 by 1
- dev_display (TemplateImage)
- * 前景区域分割
- threshold (TemplateImage, Region, ImgThreshold, 255)
- * 获得前景区域像素个数
- area_center (Region, Area, Row, Column)
- * 获得前景区域均值和方差
- intensity (Region,TemplateImage, Mean, Deviation)
-
- *对前景区域进行反选
- complement (Region, RegionComplement)
- *获取背景区域的面积和坐标
- area_center (RegionComplement, Area1, Row1, Column1)
- *获得背景区域像素个数、均值和方差
- intensity (RegionComplement,TemplateImage, Mean1, Deviation1)
- * 计算类间方差
- Otsu := Area*1.0/[Width*Height]*Area1*1.0/[Width*Height]*pow(Mean-Mean1,2)
- * 获取最大类间方差最佳阈值
- if (Otsu>MaxVariance)
- MaxVariance := Otsu
- BestThreshold := ImgThreshold
- endif
- endfor
- dev_display (TemplateImage)
- dev_set_color ('green')
- dev_set_draw ('fill')
复制代码
*****************************************************************************第三 分割缺陷目标********************************************************
- * 阈值操作,选取高亮目标,即为缺陷
- threshold (TemplateImage, Region1, BestThreshold, 255)
- * 对缺陷区域进行连通处理
- connection(Region1, ConnectedRegions)
- * 根据面积过滤出大的缺陷
- select_shape (ConnectedRegions, SelectedRegions1, 'area', 'and', 261.07, 1971)
- * 填充缺陷内部间隙
- fill_up(SelectedRegions1, RegionFillUp)
- * 显示图像
- dev_display(Image)
- * 显示缺陷区域
- dev_display(RegionFillUp)
- stop()
复制代码 |