Halcon工业图像处理:形态学操作与缺陷检测

图像预处理

复制代码
* 1. 读取图像(打印机芯片图像,用于演示工业场景的形态学处理)
read_image (Image, 'printer_chip/printer_chip_01')
* 2. 二值化:将灰度图转为黑白,提取前景区域(芯片的金属引脚/线路)
threshold (Image, Region, 128, 255)

* 3. 圆形腐蚀:缩小前景区域,消除小的亮噪点/细化边缘
* 参数:输入区域、输出区域、腐蚀半径(3.5像素)
erosion_circle (Region, RegionErosion, 3.5)

* 4. 圆形膨胀:扩大前景区域,填补小的暗缺陷/粗化边缘
* 注意:这里是对"腐蚀后的区域"膨胀,本质是先腐蚀再膨胀=开运算
dilation_circle (RegionErosion, RegionDilation,3.5)

* 5. 开运算(内置算子):先腐蚀后膨胀,核心作用是"去除小的亮噪点,保留大区域形状"
* 等同于上面的erosion_circle + dilation_circle(同半径)
opening_circle (Region, RegionOpening, 3.5)

* 6. 闭运算(内置算子):先膨胀后腐蚀,核心作用是"填补小的暗孔洞/缺陷,保留大区域形状"
* 半径11.5更大,用于填补芯片线路中的大一点的缝隙
closing_circle (Region, RegionClosing, 11.5)

* 1. 读取另一张测试图像(clip,裁剪后的图像)
read_image (Image1, 'clip')
* 2. 二值化:提取低灰度的前景区域(10-80灰度值)
threshold (Image1, Region1, 10, 80)

* 3. 自定义结构元:创建一个圆心(200,200)、半径3.5的圆形结构元
* 注意:结构元的坐标不影响膨胀效果,只看形状(圆形)和大小(半径)
gen_circle (Circle, 200, 200, 3.5)

* 4. 自定义结构元的膨胀:通用形态学膨胀算子
* 参数:输入区域、结构元、输出区域、迭代次数(1次)
dilation1 (Region1, Circle, RegionDilation1, 1)

* 5. 简化版圆形膨胀:封装后的算子,等同于上面的gen_circle + dilation1
dilation_circle (Region1, RegionDilation2, 3.5)

表格

算子 操作逻辑 核心作用 适用场景
erosion_circle 单独腐蚀 去除小亮点、细化边缘 降噪(亮噪点)、轮廓细化
dilation_circle 单独膨胀 填补小暗孔、粗化边缘 补缺陷(暗孔洞)、轮廓加粗
opening_circle 腐蚀→膨胀 去噪(不改变大区域形状) 工业缺陷检测(去小亮点)
closing_circle 膨胀→腐蚀 补缺陷(不改变大区域形状) 工业缺陷检测(补小暗孔)
dilation1 自定义结构元膨胀 支持任意形状的膨胀(圆 / 矩形 / 异形) 特殊形状的轮廓规整

图像导出保存以及裁剪

一、窗体 / 图像导出保存类(核心:保存可视化结果 / 图像)

表格

算子名称 核心作用 参数详解(按顺序) 关键注意点
dev_get_window 获取当前激活的窗体句柄 WindowHandle:输出,窗体句柄(后续导出 / 绘制需用到) 必须先打开窗体(如dev_open_window)才能获取,否则报错
dev_disp_text 在窗体指定位置显示文本 1. 显示内容(如 'hello')2. 显示位置参考('window'= 相对窗体,'image'= 相对图像)3. 垂直对齐('top'/'bottom'/'center')4. 水平对齐('left'/'right'/'center')5. 文本颜色6-7. 扩展参数(一般空) 文本会叠加在窗体上,dev_clear_window可清除
dump_window 导出整个窗体为文件 1. WindowHandle:窗体句柄2. 导出格式('bmp'/'png'/'tiff' 等)3. 保存路径 + 文件名(相对 / 绝对路径) 保存的是窗体可视化内容(含标注 / 文本),格式选bmp/png更易打开
dump_window_image 将窗体内容转为 Halcon 图像对象 1. Image1:输出,转换后的图像2. WindowHandle:窗体句柄 先转图像对象,再用write_image保存,比dump_window更灵活
write_image 保存 Halcon 图像对象到本地 1. 输入图像(Image/Image1)2. 保存格式('tiff'/'bmp'/'png' 等)3. 压缩等级(0 = 无压缩)4. 保存路径 + 文件名 read_image配对,dump_window_image+write_image可保存带标注的图像

二、图像生成 / 转换类(核心:创建自定义图像 / 格式转换)

表格

算子名称 核心作用 参数详解(按顺序) 关键注意点
gen_checker_region 生成棋盘格形状的区域 1. RegionChecker:输出,棋盘格区域2-3. 区域整体大小(511x511)4-5. 单个格子大小(32x32) 生成的是Region(区域),需用region_to_bin转成图像
region_to_bin 将区域转为二值化图像 1. 输入区域(RegionChecker)2. 输出二值图(BinImage)3. 前景灰度值(255 = 白色)4. 背景灰度值(0 = 黑色)5-6. 输出图像尺寸(512x512) 尺寸需≥生成区域的大小,否则会裁剪;前景 / 背景可自定义(如 128/0)

三、图像裁剪 / 区域限定类(核心:提取图像局部区域)

表格

算子名称 核心作用 参数详解(按顺序) 关键注意点
crop_part 按坐标裁剪固定大小的图像区域 1. 输入图像(Image2)2. 输出裁剪后图像(ImagePart)3. 起始行(Row=30)4. 起始列(Column=100)5. 裁剪宽度(300)6. 裁剪高度(60) 坐标是图像原始坐标,超出图像范围会报错
draw_ellipse 手动在窗体绘制椭圆(交互式) 1. 窗体句柄2-3. 椭圆中心(Row/Column)4. 旋转角度(Phi)5-6. 长短半轴(Radius1/Radius2) 运行时会暂停,需手动拖动鼠标绘制,按回车确认
gen_ellipse 按参数生成椭圆区域 参数与draw_ellipse完全一致 非交互式,直接按固定参数生成椭圆
reduce_domain 限定图像的处理域(只保留椭圆内的图像) 1. 输入图像(Image2)2. 限定区域(Ellipse)3. 输出限定后图像(ImageReduced) 不会裁剪图像尺寸,只是将区域外的像素设为 "无效",后续操作仅对有效区域生效

四、辅助类算子

表格

算子名称 核心作用 参数详解 关键注意点
dev_clear_window 清空窗体显示内容(文本 / 图像 / 区域) 无参数 仅清空显示,不删除变量;多次绘制前调用可避免内容叠加
read_image 从本地读取图像到 Halcon 变量 1. 输出图像变量2. 图像路径 + 名称 write_image配对,读取的是纯图像(无标注)

动态阈值,快速阈值

一、图像基础操作类(获取图像信息)

表格

算子名称 核心作用 参数详解(按顺序) 关键注意点
read_image 从本地读取图像到 Halcon 变量 1. Image:输出,读取后的图像变量2. 图像路径 / 内置示例名(如 'die_pads') 支持 bmp/tiff/png 等格式,内置示例名可直接使用
get_image_size 获取图像的宽度和高度 1. 输入图像(Image)2. Width:输出,图像宽度3. Height:输出,图像高度 后续裁剪、绘图等操作需用到图像尺寸,避免坐标越界

二、阈值分割类(核心:提取前景区域)

表格

算子名称 核心作用 参数详解(按顺序) 关键注意点
threshold 全局固定阈值分割 1. 输入图像(Image)2. Region:输出,分割后的区域3-4. 灰度值范围(128-255) 简单高效,但对光照不均的图像效果差
fast_threshold 快速局部阈值分割 1. 输入图像(Image)2. Region:输出,分割后的区域3-4. 灰度值范围(128-255)5. 局部窗口大小(20) 非逐像素检查,而是以 20x20 窗口为单位判断,速度远快于threshold,适合大图像
dyn_threshold 动态阈值分割(抗光照不均) 1. 原始图像(Image)2. 预处理图像(如均值滤波后的 ImageMean)3. Region:输出,分割后的区域4. 偏移值(10)5. 提取类型('light'= 亮区域 /'dark'= 暗区域) 对比原始图和预处理图的灰度差,偏移值越小分割越严格,适合光照不均的场景

三、图像预处理类(优化图像,提升分割效果)

表格

算子名称 核心作用 参数详解(按顺序) 关键注意点
mean_image 均值滤波(平滑图像 / 去噪) 1. 输入图像(Image)2. ImageMean:输出,滤波后的图像3-4. 滤波窗口大小(10x10) 窗口越大,图像越模糊,需根据噪点大小调整;常作为dyn_threshold的预处理

四、连通域与区域筛选类(提取目标区域)

表格

算子名称 核心作用 参数详解(按顺序) 关键注意点
connection 连通域分析(标记独立区域) 1. 输入区域(Region)2. ConnectedRegions:输出,所有独立连通域 必须输入二值区域,输出是多个独立区域的集合
select_shape 按形状特征筛选区域 1. 输入区域集合(ConnectedRegions)2. SelectedRegions:输出,筛选后的区域3. 筛选特征列表(如 ['area','anisometry'])4. 逻辑关系('and'= 同时满足 /'or'= 满足其一)5. 特征最小值列表([150,1])6. 特征最大值列表([9900,2]) - area:面积,筛选 150-9900 像素的区域- anisometry:长短轴比,筛选 1-2 的区域(接近矩形)

五、区域形态学 / 几何处理类(规整区域形状)

表格

算子名称 核心作用 参数详解(按顺序) 关键注意点
fill_up 填充区域内的孔洞 1. 输入区域(SelectedRegions)2. RegionFillUp:输出,填充后的区域 仅填充区域内部的孔洞,不改变区域外轮廓
shape_trans 区域形状转换 1. 输入区域(RegionFillUp)2. RegionTrans:输出,转换后的区域3. 转换类型('rectangle2'= 最小外接旋转矩形) 常用类型:'rectangle1'(轴对齐矩形)、'circle'(最小外接圆)
orientation_region 获取区域的方向角 1. 输入区域(RegionTrans)2. Phi:输出,方向角(弧度,范围 -π/2~π/2) 角度以图像行列为基准,顺时针为正,用于后续绘制方向箭头
area_center 获取区域的面积和中心坐标 1. 输入区域(RegionTrans)2. Area:输出,区域面积3-4. Row/Column:输出,区域中心坐标 中心坐标是后续绘制箭头、标注的基准点
boundary 提取区域的边界 1. 输入区域(RegionTrans)2. RegionBorder:输出,边界区域3. 边界类型('inner'= 内边界 /'outer'= 外边界 /'true'= 真实边界) 仅显示区域轮廓,便于可视化区域形状

六、可视化与交互类(显示 / 绘制内容)

表格

算子名称 核心作用 参数详解(按顺序) 关键注意点
dev_get_window 获取当前激活的窗体句柄 WindowHandle:输出,窗体句柄 后续绘制箭头、文本需指定窗体,必须先打开窗体(如dev_open_window
dev_display 在窗体显示图像 / 区域 输入:图像(Image)或区域(RegionBorder) 可叠加显示,dev_clear_window可清空之前的显示内容
disp_arrow 在窗体绘制方向箭头 1. 窗体句柄(WindowHandle)2-3. 箭头起点(Row/Column)4-5. 箭头终点(Row-lengthsin(Phi), Column+lengthcos(Phi))6. 箭头宽度(1) 终点坐标通过角度Phi计算,实现 "沿区域方向绘制箭头";宽度越大箭头越粗

图像处理

一、形态学结构元(SE)创建类(核心:定义形态学操作的 "模板")

表格

算子名称 核心作用 参数详解(按顺序) 关键注意点
gen_disc_se 创建圆形结构元(圆盘 SE) 1. SE:输出,创建的结构元2. 数据类型('byte'= 字节型,常用)3-4. SE 的宽度 / 高度(5x5)5. SE 的半径(5) - SE 是形态学操作的 "模板",形状 / 大小决定操作效果- 圆形 SE 适合处理圆形 / 弧形目标,5x5 是 SE 的尺寸,半径 5 需与尺寸匹配

二、灰度形态学核心操作类(区别于二值形态学,直接处理灰度图)

表格

算子名称 核心作用 参数详解(按顺序) 关键注意点(含公式 / 场景)
gray_opening 灰度开运算(平滑亮区域,去除小亮点) 1. 输入灰度图(Image)2. 结构元(SE)3. ImageOpening:输出,开运算后的图像 - 公式:灰度开运算 = 灰度腐蚀 → 灰度膨胀- 作用:抑制亮的小噪点,保留大的亮区域整体灰度
gray_tophat 灰度顶帽运算(提取微小亮斑) 1. 输入灰度图(Image)2. 结构元(SE)3. ImageTopHat:输出,顶帽后的图像 - 公式:顶帽图 = 原始图 - 灰度开运算图- 核心场景:提取图像中比周围亮的微小区域(如金属表面亮缺陷、电路板亮点)- 若原始图无微小亮斑,中心点灰度值为 0(如示例中 Grayval1=0)
gray_bothat 灰度底帽运算(提取微小暗斑) 1. 输入灰度图(ImageTopHat,示例中用了顶帽图,实际常用原始图)2. 结构元(SE)3. ImageBotHat:输出,底帽后的图像 - 公式:底帽图 = 灰度闭运算图 - 原始图(代码注释笔误,正确公式是底帽 = 闭运算 - 原图)- 核心场景:提取图像中比周围暗的微小区域(如医学影像肿瘤、表面暗缺陷、保险丝熔断点)
相关推荐
Mr.Cheng.2 小时前
SEE WHAT YOU ARE TOLD: VISUAL ATTENTION SINKIN LARGE MULTIMODAL MODELS
人工智能
ZWZhangYu2 小时前
【Gradio系列】使用 Gradio 快速构建对话式 AI 应用
人工智能·状态模式
薛定猫AI2 小时前
【技术干货】Antigravity Cluster 实战:多模多模态编排下的工程化 AI 代理体系
人工智能
SuniaWang2 小时前
《Spring AI + 大模型全栈实战》学习手册系列 · 专题八:《RAG 系统安全与权限管理:企业级数据保护方案》
java·前端·人工智能·spring boot·后端·spring·架构
想不到一个好的ID3 小时前
OpenClaw 初学者必看指南
人工智能
zzh940773 小时前
GPT-4o与Gemini 3镜像站背后的算力与工程:大模型训练基础设施拆解
人工智能·深度学习·架构
npupengsir3 小时前
nano vllm代码详解
人工智能·算法·vllm
CyanMind3 小时前
IsaacLab 训练范式探索(一):让机器人拥有“记忆”的 RNN 策略
人工智能·rnn·机器人
翼龙云_cloud3 小时前
阿里云渠道商:百炼模型选型指南 性能与成本全解析
人工智能·阿里云·云计算
chushiyunen3 小时前
人工智能-语义校验deepEval笔记
人工智能·笔记