铣刀刀口破损缺陷检测

发布时间:2024年01月14日
*****************************************************************************第一 图像预处理********************************************************
*读取一张图像
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()

文章来源:https://blog.csdn.net/weixin_38241876/article/details/135549135
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。