机器视觉halcon7-缺陷检测
机器视觉halcon7-缺陷检测
- 注塑吸嘴缺口检测
-
- 第一步 初始化
- 第二步 图像处理
- 第三步 结果可视化
- 关键技术与应用场景
- 参数优化建议
- 铣刀刀口破损缺陷检测
-
- OTSU
- 示例代码
-
- 一、图像预处理模块
- 二、Otsu阈值自动选择模块
- 三、缺陷检测模块
- 技术原理与应用
- 参数优化建议(基于实际应用场景)
- 网状产品表面破损检测
-
- 初始化模块
- 显示参数设置
- 循环处理模块
- 图像预处理
- 缺陷检测
- 结果显示
- 技术原理与应用场景
- 优化建议
- 手机摄像头图像表面的轻微缺陷检测
-
- 第一 窗口初始化
- 第二 图像预处理(构建滤波器)
- 第三 图像处理循环
- 核心逻辑总结
- 注意事项
- 频域图像
-
- **空间域图像 vs 频域图像**
- **如何生成频域图像?**
- **频域图像的物理意义**
- **为什么在缺陷检测中使用频域?**
- **实际案例说明**
- **可视化对比**
- 皮革纹理表面缺陷检测
-
- 图像的灰度共生矩阵
-
- 使用方法:
- 描述:
- **参数**
- 2.glcms = graycomatrix(I,param1,val1,param2,val2,...)
- 3.[glcms,SI] = graycomatrix(...)
- 代码
-
- **1. 初始化设置**
- **2. 主循环处理(F从1到2)**
-
- **图像读取与预处理**
- **背景估计与缺陷增强**
- **缺陷分割与特征提取**
- **结果显示**
- **3. 关键函数解析**
- **4. 技术亮点与局限**
- **总结**
- 化妆品标签褶皱检测
-
- 光度立体技术的基本原理
- 光度立体技术的系统组成与参数设置
- 光度立体技术的优势特点
- 光度立体技术的工业应用案例
-
- 锂电池行业检测
- 其他工业检测应用
- 光度立体技术的算法实现
- 技术局限性与挑战
- 未来发展趋势
- 总结
- Halcon中的photometric_stereo算子详解
-
- 基本原理与功能
- 关键参数说明
-
- 输入参数
- 输出参数
- 控制参数
-
- 1. **FFT循环重建('fft_cyclic')**
- 2. **RFT循环重建('rft_cyclic')**
- 3. **共同点与注意事项**
- 4. **扩展参考**
- 技术实现细节
-
- 图像采集要求
- 算法处理流程
- 典型应用场景
- 局限性
- 性能优化建议
- Halcon中的derivate_vector_field算子详解
-
- 基本功能与原理
- 关键参数说明
-
- 输入参数
- 输出参数
- 在光度立体技术中的应用
- 不同分量的数学含义
- 实际应用案例
-
- 药品泡罩包装检测
- 皮革表面检测
- 性能特点与优化建议
- 技术限制
- 总结
- 代码
-
- 第一步:程序初始化
- 第二步:批量读取图像
- 第三步:获取反照率和表面梯度
- 第四步:缺陷检测
- 技术原理与应用
- 代码2
-
- 1. 初始化设置
- 2. 读取球体图像
- 3. 球体位置检测
- 4. 光源方向计算
- 5. 结果可视化
- 技术原理
- 应用价值
- 代码优化建议
- 高斯核、高斯滤波与高斯曲率:概念解析与应用对比
-
- 高斯核(Gaussian Kernel)
-
- 定义与数学表达
- 核心特性与应用
- 参数调优与实践建议
- 高斯滤波(Gaussian Filter)
-
- 定义与数学原理
- 滤波特性与实现步骤
- 应用场景与MATLAB实现
- 高斯曲率(Gaussian Curvature)
-
- 定义与数学描述
- 几何意义与分类
- 计算公式与应用
- 三者的对比与关联
- 总结与延伸
- 定位出所有网格顶点的位置
-
- 1. 图像读取与窗口初始化
- 2. 图像预处理
- 3. 网格区域分割
- 4. 网格线提取
- 5. 顶点检测
- 6. 结果显示
- 技术原理与应用
- 应用场景
- 代码优化建议
- 电路板短路,断路检测
-
- 1. 图像读取与窗口初始化
- 2. 形态学预处理
- 3. 断线区域分割
- 4. 结果显示
- 技术原理与应用
- 应用场景
- 代码优化建议
- 开运算与闭运算的原理与应用详解
-
- 一、基本概念与数学原理
-
- 1. 形态学操作基础
- 2. 开运算的数学定义
- 3. 闭运算的数学定义
- 二、核心特性与效果对比
-
- 1. 开运算的特性
- 2. 闭运算的特性
- 3. 开运算与闭运算的对比
- 三、实现方法与参数选择
-
- 1. 结构元素的选择
- 2. 开运算的实现
- 3. 闭运算的实现
- 4. 参数调优建议
- 四、典型应用场景
-
- 1. 开运算的应用场景
- 2. 闭运算的应用场景
- 3. 开闭运算的联合应用
- 五、高级话题与扩展应用
-
- 1. 灰度图像形态学
- 2. 形态学梯度
- 3. 顶帽与黑帽变换
- 4. 实际应用案例
- 六、总结与最佳实践
-
- 1. 选择开运算或闭运算的准则
- 2. 最佳实践建议
- 3. 未来发展方向
- 产品周围缺口检测
-
- 1. 图像读取与窗口初始化
- 2. 产品轮廓提取
- 3. 缺口区域检测
- 4. 缺口区域精确定位
- 5. 结果显示与统计
- 技术原理与应用
- 应用场景
- 代码优化建议
- 产品上凹坑检测
-
- 1. 初始化设置
- 2. 图像处理主循环
- 3. 环形区域提取
- 4. 边缘检测与缺陷初步提取
- 5. 缺陷区域精确定位
- 6. 结果显示
- 技术原理与应用
- 应用场景
- 代码优化建议
- 产品毛刺检测
- 产品表面三角缺陷检测
-
- 思路
- 产品边缘凹痕检测
-
- 1.问题案例展示
- 2.图像形态学底帽操作🌟🌟🌟
- 3.源代码分析
- 不均匀表面刮伤检测
-
- 1.不均匀表面刮伤检测案例
- 2.不均匀表面刮伤检测源代码
- 背景网格产品刮伤缺陷检测
-
- 运行效果展示
- 2) 源代码讲解
-
- 问题1:为什么选择B通道将图像转化为频域图像,而不选R、G通道?
- 问题2:为什么通过傅里叶变换可以提取背景并消除纹理干扰?
- **总结**
- 经过高斯滤波核卷积后的空间域图像与经过滤波核均值滤波的图像有什么区别
-
-
- ⚖️ 1. **权重分配原理**
- 🖼️ 2. **边缘保留能力**
- 🧪 3. **噪声抑制效果**
- ⚙️ 4. **计算复杂度与实时性**
- 🛠️ 5. **参数设置灵活性**
- 🏗️ 6. **典型应用场景**
- 💎 **核心区别总结**
- 💡 **选型建议**
-
注塑吸嘴缺口检测
******************************************第一步 初始化**************************************************
*读取一张图像
read_image (Hull, 'hull')*获取图像大小
get_image_size (Hull, Width, Height)*关闭已经打开的窗口
dev_close_window ()*打开一个新的窗口
dev_open_window (0, 0, Width, Height, 'black', WindowID)*显示图像
dev_display (Hull)******************************************第二步 图像处理**************************************************
*阈值操作,分割出吸嘴
threshold (Hull, Dark, 0, 80)*补集运算,获取背景区域
difference (Hull, Dark, Light)*对背景区域进行连通处理
connection (Light, ConnectedRegions)*过滤出背景区域
select_shape (ConnectedRegions, NoHullCand, 'area', 'and', 50000, 9999999)*对过滤的背景区域进行闭运算,填充背景间隙和平滑背景边界
closing_circle (NoHullCand, NoHull, 13.5)*补集运算,获取吸嘴区域
difference (Hull, NoHull, Region)*对吸嘴区域开运算
opening_circle (Region, RegionOpening, 2.5)*对吸嘴区域进行连通处理
connection (RegionOpening, ConnectedRegions)*过滤出吸嘴区域
select_shape (ConnectedRegions, RegionHull, 'area', 'and', 5000, 9999999)*将吸嘴区域转换为凸包区域
shape_trans (RegionHull, ConvexHull, 'convex')*补集运算,获取吸嘴的缺口
difference (ConvexHull, RegionHull, Region)*对吸嘴缺口区域进行连通处理
connection (Region, ConnectedRegions)*过滤出吸嘴缺口
select_shape (ConnectedRegions, LargeHoles, 'area', 'and', 2000, 99999)
select_shape (LargeHoles, Holes, 'convexity', 'and', 0, 0.85)*显示图像
dev_display (Hull)*设置输出对象的线宽度
dev_set_line_width (5)*设置区域的填充方式
dev_set_draw ('margin')*设置输出对象显示颜色为红色
dev_set_color ('red')*显示吸嘴缺口
dev_display (Holes)
这段Halcon代码主要用于检测图像中吸嘴的缺口,结合阈值分割、形态学操作、区域处理等技术实现目标区域的定位与分析。以下是分步详解:
第一步 初始化
读取图像并初始化窗口
read_image (Hull, ‘hull’) // 读取名为’hull’的图像
get_image_size (Hull, Width, Height) // 获取图像尺寸
dev_close_window () // 关闭已打开的窗口
dev_open_window (0, 0, Width, Height, ‘black’, WindowID) // 打开新窗口
dev_display (Hull) // 显示图像
作用:初始化环境,加载图像并打开适配窗口。dev_open_window的参数设置窗口位置和背景色为黑色。
第二步 图像处理
阈值分割与背景提取
threshold (Hull, Dark, 0, 80) // 分割暗区(灰度值0-80)
difference (Hull, Dark, Light) // 取补集,获取背景区域
threshold:分割出灰度值较低的暗区(吸嘴部分可能较暗)。
difference:原图减去暗区,得到背景区域(Light),即非吸嘴部分。
背景区域优化
connection (Light, ConnectedRegions) // 连通域分割
select_shape (ConnectedRegions, NoHullCand, ‘area’, ‘and’, 50000, 9999999) // 筛选大区域
closing_circle (NoHullCand, NoHull, 13.5) // 闭运算填充间隙
connection:将背景区域分割为独立连通域。
select_shape:过滤面积在5万像素以上的区域(保留背景主体)。
closing_circle:使用半径13.5的圆形结构进行闭运算,填充背景中的小孔洞并平滑边界。
吸嘴区域提取
difference (Hull, NoHull, Region) // 原图减去背景,得到吸嘴候选区域
opening_circle (Region, RegionOpening, 2.5) // 开运算去除噪声
connection (RegionOpening, ConnectedRegions) // 连通域分割
select_shape (ConnectedRegions, RegionHull, ‘area’, ‘and’, 5000, 9999999) // 筛选吸嘴区域
difference:通过背景补集重新定位吸嘴区域。
opening_circle:半径2.5的开运算去除细小噪声(如毛刺)。
select_shape:保留面积大于5000像素的区域,排除误分割的小目标。
缺口检测
shape_trans (RegionHull, ConvexHull, ‘convex’) // 转换为凸包区域
difference (ConvexHull, RegionHull, Region) // 凸包与原区域差集,获取缺口
connection (Region, ConnectedRegions) // 连通域分割
select_shape (ConnectedRegions, LargeHoles, ‘area’, ‘and’, 2000, 99999) // 筛选大缺口
select_shape (LargeHoles, Holes, ‘convexity’, ‘and’, 0, 0.85) // 根据凸度筛选
shape_trans:将吸嘴区域转换为凸包(凸包是包含所有区域点的最小凸形)。
difference:凸包与原区域的差集即为凹陷或缺口区域。
select_shape:
筛选面积大于2000像素的缺口。
通过凸度(convexity)过滤不规则区域(凸度≤0.85表示非凸形,适合检测缺口)。
第三步 结果可视化
dev_display (Hull) // 显示原图
dev_set_line_width (5) // 设置线宽为5像素
dev_set_draw (‘margin’) // 仅显示区域边界
dev_set_color (‘red’) // 设置显示颜色为红色
dev_display (Holes) // 高亮显示检测到的缺口
作用:通过高亮红色边界突出显示缺口,便于视觉确认。
关键技术与应用场景
形态学操作:
closing_circle和opening_circle分别用于填充孔洞和去噪,是工业检测中修复区域形态的常用手段。
凸包变换:
通过计算凸包差集定位缺口,适用于检测机械部件的磨损或破损。
区域筛选:
结合面积、凸度等特征过滤,提高检测精度。
参数优化建议
闭运算半径(13.5):若背景间隙较大,可适当增大半径。
开运算半径(2.5):若吸嘴边缘噪声较多,可微调以平衡去噪与细节保留。
凸度阈值(0.85):根据实际缺口形状调整,值越小允许的凹陷越深。
铣刀刀口破损缺陷检测
OTSU
OTSU,是一种自适应阈值确定的方法,又叫大津法,简称OTSU,是一种基于全局的二值化算法,它是根据图像的灰度特性,将图像分为前景和背景两个部分。当取最佳阈值时,两部分之间的差别应该是最大的,在OTSU算法中所采用的衡量差别的标准就是较为常见的最大类间方差。前景和背景之间的类间方差如果越大,就说明构成图像的两个部分之间的差别越大;
记T为前景与背景的分割阈值,前景点数占图像比例为w0,平均灰度为u0;背景点数占图像比例为w1,平均灰度为u1,图像的总平均灰度为u,前景和背景图象的方差,则有:
示例代码
*****************************************************************************第一 图像预处理********************************************************
*读取一张图像
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 1dev_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 := OtsuBestThreshold := ImgThresholdendif
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()
以下是代码的详细分步解释,结合Halcon图像处理技术背景:
一、图像预处理模块
图像增强
*读取图像
read_image(Image,'1.bmp') // 读取原始图像
*灰度拉伸
scale_image_max (Image, ImageScaleMax) // 将图像灰度扩展到0-255范围,增强对比度
*像素位反转
bit_not (ImageScaleMax, ImageNot) // 反色处理(黑变白、白变黑),便于后续黑帽运算形态学预处理*生成椭圆结构元素
gen_disc_se (SE, 'byte', 45,45, 0) // 创建45x45圆形结构元素,用于形态学操作
*黑帽运算
gray_bothat (ImageNot, SE, ImageBotHat) // 检测比周围更暗的缺陷区域ROI区域处理*生成并合并ROI
gen_rectangle1 (ROI_0, 574, 268, 644, 337) // 定义矩形区域1(左上角坐标+右下角坐标)
gen_rectangle1 (TMP_Region, 87, 783, 179, 809) // 区域2(可能为刀口特征区域)
union2 (ROI_0, TMP_Region, ROI_0) // 合并两个矩形区域
gen_rectangle1 (TMP_Region, 743, 937, 839, 997) // 区域3(补充关键检测区域)
union2 (ROI_0, TMP_Region, ROI_0) // 最终合并三个ROI区域
*裁剪ROI图像
reduce_domain (ImageBotHat, ROI_0, TemplateImage) // 仅保留ROI内的图像数据
二、Otsu阈值自动选择模块
*遍历所有灰度阈值
for ImgThreshold := 1 to 255 by 1 // 穷举法寻找最佳分割阈值*分割前景区域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类间方差计算Otsu := AreaArea1/(WidthHeight)^2 * (Mean-Mean1)^2 // 类间方差公式if (Otsu>MaxVariance) // 记录最大方差对应的阈值BestThreshold := ImgThresholdendif
endfor
三、缺陷检测模块
*阈值分割
threshold (TemplateImage, Region1, BestThreshold, 255) // 应用最佳阈值
*区域后处理
connection(Region1, ConnectedRegions) // 连通域分割
select_shape (ConnectedRegions, SelectedRegions1, ‘area’, ‘and’, 261, 1971) // 过滤小噪点
fill_up(SelectedRegions1, RegionFillUp) // 填充孔洞(确保缺陷完整性)
*结果显示
dev_display(Image) // 显示原图
dev_display(RegionFillUp) // 叠加红色缺陷区域
技术原理与应用
黑帽运算:通过gray_bothat检测比周围暗的缺陷(如刀口崩缺),结构元素尺寸需大于缺陷尺寸
Otsu算法:通过最大化前景/背景的类间方差实现自适应阈值选择,避免手动调参
ROI策略:聚焦关键检测区域(如刀具刃口),减少计算量并提升精度
形态学过滤:面积筛选+填充操作可排除噪声干扰,确保缺陷区域完整
参数优化建议(基于实际应用场景)
结构元素尺寸:若缺陷尺寸变化,需调整gen_disc_se的45x45参数
面积阈值:261-1971范围需根据刀具尺寸重新标定
ROI位置:需通过实际刀具图像校准矩形坐标
显示效果:可通过dev_set_color(‘red’)修改缺陷显示颜色
网状产品表面破损检测
*关闭程序计数器,图形变量更新,窗口图形更新
dev_update_window ('off')*读取一张图像
read_image (Image, 'plastic_mesh/plastic_mesh_01')*关闭打开的窗口
dev_close_window ()*获取图像大小
get_image_size (Image, Width, Height)*创建一个新窗口
dev_open_window_fit_image (Image, 0, 0, Width, Height, WindowHandle)*设置字体信息:字体大小为16,字体为mono,粗体,斜体
set_display_font (WindowHandle, 18, 'mono', 'true', 'false')*设置区域的填充方式
dev_set_draw ('margin')*设置线宽度
dev_set_line_width (3)for J := 1 to 14 by 1*读取一张图像read_image (Image, 'plastic_mesh/plastic_mesh_' + J$'02')*均值滤波mean_image (Image, ImageMean, 49, 49)*局部阈值分割图像dyn_threshold (Image, ImageMean, RegionDynThresh, 5, 'dark')*对分割后的区域进行连通处理connection (RegionDynThresh, ConnectedRegions)*过滤出缺陷网孔区域select_shape (ConnectedRegions, ErrorRegions, 'area', 'and', 500, 99999)*统计出缺陷网孔的数目count_obj (ErrorRegions, NumErrors)*显示图像dev_display (Image)*设置对象的显示颜色dev_set_color ('red')*显示缺陷网孔dev_display (ErrorRegions)if (NumErrors > 0)*显示产品NGdisp_message (WindowHandle, 'Mesh not OK', 'window', 24, 12, 'black', 'true')else*显示产品OKdisp_message (WindowHandle, 'Mesh OK', 'window', 24, 12, 'black', 'true')endifstop()endfor
以下是对这段Halcon代码的逐模块解析,结合工业检测场景和图像处理原理:
初始化模块
dev_update_window (‘off’) // 关闭窗口实时更新以提高处理速度
read_image (Image, ‘plastic_mesh/plastic_mesh_01’) // 加载参考图像
dev_close_window () // 关闭旧窗口
get_image_size (Image, Width, Height) // 获取图像尺寸
dev_open_window_fit_image (Image, 0, 0, Width, Height, WindowHandle) // 创建适配窗口
关键点:dev_update_window(‘off’)可显著提升处理速度,dev_open_window_fit_image自动调整窗口尺寸适配图像。
显示参数设置
set_display_font (WindowHandle, 18, ‘mono’, ‘true’, ‘false’) // 设置字体为18px粗体
dev_set_draw (‘margin’) // 仅显示区域轮廓
dev_set_line_width (3) // 设置轮廓线宽为3像素
作用:优化结果显示效果,粗线宽和高对比度字体便于缺陷观察。
循环处理模块
for J := 1 to 14 by 1
read_image (Image, ‘plastic_mesh/plastic_mesh_’ + J$‘02’) // 循环读取14张图像
…
endfor
路径拼接:J$'02’将数字格式化为两位数(如1→"01"),适用于批量处理命名规律的图像。
图像预处理
mean_image (Image, ImageMean, 49, 49) // 49x49均值滤波
dyn_threshold (Image, ImageMean, RegionDynThresh, 5, ‘dark’) // 动态阈值分割
均值滤波:使用49x49大核消除背景纹理(适合网格状目标)。
动态阈值:对比原图与滤波图,提取比背景暗的区域('dark’模式),偏移量5过滤细微噪声。
缺陷检测
connection (RegionDynThresh, ConnectedRegions) // 连通域分割
select_shape (ConnectedRegions, ErrorRegions, ‘area’, ‘and’, 500, 99999) // 面积筛选
count_obj (ErrorRegions, NumErrors) // 统计缺陷数量
面积过滤:保留500像素以上的区域,排除小噪点,上限99999防止误检过大异常。
逻辑’and’:确保所有条件同时满足,避免误判。
结果显示
dev_display (Image) // 显示原图
dev_set_color (‘red’) // 设置缺陷显示颜色
dev_display (ErrorRegions) // 叠加缺陷区域
if (NumErrors > 0)
disp_message (WindowHandle, ‘Mesh not OK’, ‘window’, 24, 12, ‘black’, ‘true’)
else
disp_message (WindowHandle, ‘Mesh OK’, ‘window’, 24, 12, ‘black’, ‘true’)
endif
消息显示:在窗口坐标(24,12)位置显示黑色文字,'true’添加橙色背景框。
技术原理与应用场景
动态阈值优势:
通过对比原图与滤波图,有效消除光照不均影响,特别适合网格/纹理背景的缺陷检测(如塑料网孔破损)。
参数选择依据:
均值滤波核尺寸(49x49)需大于网格孔洞尺寸,确保背景平滑但保留缺陷
偏移量5平衡灵敏度与抗噪性,需根据实际缺陷对比度调整
缺陷判断逻辑:
面积筛选是工业检测中排除伪缺陷的常用手段,500像素阈值需根据网孔实际尺寸标定。
优化建议
滤波核调整:若网格孔洞较大,可增大核尺寸(如61x61)以更好平滑背景。
形态学优化:在select_shape前加入closing_circle闭合断裂缺陷区域。
多特征筛选:结合’circularity’或’compactness’排除非孔洞状干扰。
结果存储:在循环内添加write_image保存带缺陷标注的图像用于追溯。
调试注意
stop()会中断流程,批量检测时应移除或改为条件暂停。
路径plastic_mesh/plastic_mesh_XX需确保图像存在且命名连续,否则会触发异常。
手机摄像头图像表面的轻微缺陷检测
************************************************第一 窗口初始化****************************************************
*关闭已经打开的窗口
dev_close_window () *关闭程序计数器,图形变量更新,窗口图形更新
dev_update_off () *读取一张图像
read_image (Image,'2.bmp') *获取图像大小
get_image_size (Image, Width, Height) *打开新的窗口
dev_open_window (0, 0, 640, 480, 'black', WindowHandle) *设置区域填充方式
dev_set_draw ('margin') *设置线宽度
dev_set_line_width (2) *设置输出对象显示颜色数目
dev_set_colored(12) ************************************************第二 图像预处理****************************************************
*优化FFT的速度
optimize_rft_speed (Width, Height, 'standard')
Sigma1 := 10.0
Sigma2 := 2.0
*构建高斯滤波器
gen_gauss_filter (GsFilter1, Sigma1, Sigma1, 0.0, 'none', 'rft', Width, Height)
*构建高斯滤波器
gen_gauss_filter (GsFilter2, Sigma2, Sigma2, 0.0, 'none', 'rft', Width, Height)*两个滤波器相减
sub_image (GsFilter1, GsFilter2, Filter, 1, 0) ************************************************第三 开始处理图像****************************************************
* Image Acquisition 01: Code generated by Image Acquisition 01
ImageFiles := []
ImageFiles[0] := '1.bmp'
ImageFiles[1] := '2.bmp'for Index := 0 to |ImageFiles| - 1 by 1*读取一张图像
read_image (Image, ImageFiles[Index])*将RGB彩色图转化为灰度图
rgb1_to_gray (Image, Image) *对灰度图进行反选
invert_image(Image, ImageInvert) *将图像转化为频域图像
rft_generic (ImageInvert, ImageFFT, 'to_freq', 'sqrt', 'complex', Width) *将频域图像和滤波核进行卷积运算
convol_fft (ImageFFT, Filter, ImageConvol) *将频域图像转化为空间域图像
rft_generic (ImageConvol, ImageFiltered, 'from_freq', 'n', 'real', Width) *创建一个ROI
gen_rectangle1(Rectangle,30,25,450,610) *将ROI区域的图像剪切
reduce_domain(ImageFiltered, Rectangle, ROI) *中值滤波