
Baumer相机铸件气孔与缩松识别:提升铸造良品率的 6 个核心算法,附 OpenCV+Halcon 实战代码!
- [🎯 Baumer相机铸件气孔与缩松识别:提升铸造良品率的 6 个核心算法,附 OpenCV+Halcon 实战代码!](#🎯 Baumer相机铸件气孔与缩松识别:提升铸造良品率的 6 个核心算法,附 OpenCV+Halcon 实战代码!)
-
- 🎯一、为什么"直接圆形检测"会失效?
- [🎯二、6 大核心算法:从基础到精密](#🎯二、6 大核心算法:从基础到精密)
-
- [算法1:对比度增强 + 形态学重建(提升缺陷可见性)](#算法1:对比度增强 + 形态学重建(提升缺陷可见性))
- [算法2:形态学重建 + 孤立区域检测(识别缺陷区域)](#算法2:形态学重建 + 孤立区域检测(识别缺陷区域))
- [算法3:Halcon 的 `connection` + `select_shape`](#算法3:Halcon 的
connection+select_shape) - [算法4:纹理分析 + 局部二值模式(LBP)(识别缩松区域)](#算法4:纹理分析 + 局部二值模式(LBP)(识别缩松区域))
- [算法5:深度学习实例分割(YOLOv8-seg / Mask R-CNN)](#算法5:深度学习实例分割(YOLOv8-seg / Mask R-CNN))
- [算法6:3D 体素分析(CT扫描后处理)](#算法6:3D 体素分析(CT扫描后处理))
- [🎯三、实战代码:OpenCV + Halcon 快速实现](#🎯三、实战代码:OpenCV + Halcon 快速实现)
-
- [✅ OpenCV:形态学 + LBP缺陷检测(Python)](#✅ OpenCV:形态学 + LBP缺陷检测(Python))
- [✅ Halcon:使用 `connection` 检测铸件缺陷(HDevelop)](#✅ Halcon:使用
connection检测铸件缺陷(HDevelop))
- [🎯四、铸造落地 3 大建议](#🎯四、铸造落地 3 大建议)
- 🎯五、避坑指南
- 🎯六、总结
🎯 Baumer相机铸件气孔与缩松识别:提升铸造良品率的 6 个核心算法,附 OpenCV+Halcon 实战代码!
在铸造质检中,你是否常被这些问题困扰?
- 气孔缩松内部缺陷,表面不可见;
- X射线/CT图像对比度低,缺陷边缘模糊;
- 缺陷形态复杂,传统检测难以覆盖;
- 想用人工检测,但效率低、标准不一......
气孔缩松识别 ≠ 简单圆形检测
它要求在低对比度、复杂纹理 条件下,精准识别圆形气孔、不规则缩松、链状缺陷------任何一处缺陷都可能导致铸件失效
Baumer的万兆网相机拥有出色的图像处理性能,可以实时传输高分辨率图像。此外,该相机还具有快速数据传输、低功耗、易于集成以及高度可扩展性等特点。
Baumer工业相机由于其性能和质量的优越和稳定,常用于高速同步采集领域,通常使用各种图像算法来提高其捕获的图像的质量。
今天,我们就以堡盟相机作为案例拆解 铸件气孔与缩松识别的 6 个核心算法 ,从形态学分析到深度学习,全部附上 OpenCV + Halcon 可运行代码 ,助你在 200ms 内完成铸件内部缺陷检测,检出率 >95%,满足 ASTM E505、ISO 4987 等铸造标准!
🎯一、为什么"直接圆形检测"会失效?
| 问题 | 原因 | 后果 |
|---|---|---|
| 对比度低 | X射线图像灰度差异小 | 边缘提取失败 |
| 形状不规则 | 缩松呈不规则片状 | 圆形度判定失效 |
| 纹理干扰 | 铸件基体纹理复杂 | 误报率极高 |
| 尺寸微小 | 气孔 <0.1mm | 像素级分辨率不足 |
真正的缺陷检测 = 高分辨率 + 形态学分析 + 纹理抑制
🎯二、6 大核心算法:从基础到精密

算法1:对比度增强 + 形态学重建(提升缺陷可见性)
• 设置:
- CLAHE(自适应直方图均衡化)增强对比度
- 形态学开运算去除噪声
• 价值:让微小缺陷"清晰可见"
算法2:形态学重建 + 孤立区域检测(识别缺陷区域)
• 流程:
- 二值化后做形态学重建
- 检测与背景差异的孤立区域
- 小面积孤立区 → 气孔候选
• 适用:圆形气孔检测
算法3:Halcon 的 connection + select_shape
• 特色功能:
connection:快速提取连通域select_shape:按面积、圆形度过滤缺陷- 支持 ROI 局部检测
• 工业应用:已在汽车、航空铸件产线验证
算法4:纹理分析 + 局部二值模式(LBP)(识别缩松区域)
• 💡方法:
- LBP捕捉局部纹理变化
- 缩松区域呈现低对比度 + 高熵值
- 计算LBP直方图方差
• 优势:对缩松纹理敏感
算法5:深度学习实例分割(YOLOv8-seg / Mask R-CNN)
• 架构:
- 输入:X射线图像 → 输出:缺陷实例掩码
- 可同时检测气孔、缩松、裂纹
• 优势:自学习复杂缺陷模式
算法6:3D 体素分析(CT扫描后处理)
• 原理:
- CT重建3D体素数据
- 体素连通性分析
- 体积测量
• 适用:超高精度要求场景
🎯三、实战代码:OpenCV + Halcon 快速实现

✅ OpenCV:形态学 + LBP缺陷检测(Python)
python
import cv2
import numpy as np
from skimage.feature import local_binary_pattern
def detect_cast_porosity_shrinkage(img, roi=None):
# 1. 裁剪 ROI(可选)
if roi:
x, y, w, h = roi
img = img[y:y+h, x:x+w]
# 2. 预处理(X射线图像增强)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) if len(img.shape) == 3 else img
# 3. 对比度增强(CLAHE)
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8))
enhanced = clahe.apply(gray)
# 4. 二值化
_, binary = cv2.threshold(enhanced, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
# 5. 形态学清理(去除噪声)
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3, 3))
cleaned = cv2.morphologyEx(binary, cv2.MORPH_OPEN, kernel)
# 6. LBP 纹理分析(识别缩松区域)
radius = 3
n_points = 8 * radius
lbp = local_binary_pattern(enhanced, n_points, radius, method='uniform')
# 7. 连通域分析
num_labels, labels, stats, centroids = cv2.connectedComponentsWithStats(cleaned)
defect_mask = np.zeros_like(cleaned)
defects = []
for i in range(1, num_labels):
area = stats[i, cv2.CC_STAT_AREA]
x, y, w, h = stats[i, cv2.CC_STAT_LEFT], stats[i, cv2.CC_STAT_TOP], stats[i, cv2.CC_STAT_WIDTH], stats[i, cv2.CC_STAT_HEIGHT]
# 计算圆形度
mask = (labels == i).astype(np.uint8) * 255
contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
if contours:
cnt = contours[0]
perimeter = cv2.arcLength(cnt, True)
circularity = 4 * np.pi * area / (perimeter * perimeter) if perimeter > 0 else 0
# 提取LBP特征
lbp_region = lbp[labels == i]
lbp_variance = np.var(lbp_region)
# 气孔特征:面积小(<200像素),圆形度>0.6(圆形气孔)
if 10 < area < 200 and circularity > 0.6:
defect_type = "气孔"
defect_mask[labels == i] = 255
# 缩松特征:面积中等(200-1000像素),圆形度<0.6(不规则)
elif 200 < area < 1000 and circularity < 0.6:
defect_type = "缩松"
defect_mask[labels == i] = 200
else:
continue
defects.append({
'center': centroids[i],
'area': area,
'circularity': circularity,
'type': defect_type,
'lbp_variance': lbp_variance,
'bbox': (x, y, w, h)
})
# 8. 缺陷密度评估
total_defect_area = sum([d['area'] for d in defects])
defect_density = total_defect_area / (img.shape[0] * img.shape[1])
return {
'defect_count': len(defects),
'porosity_count': len([d for d in defects if d['type'] == '气孔']),
'shrinkage_count': len([d for d in defects if d['type'] == '缩松']),
'defect_density': defect_density,
'total_defect_area': total_defect_area,
'defects': defects,
'defect_mask': defect_mask
}
# 使用示例(X射线图像)
img = cv2.imread('cast_xray.jpg')
result = detect_cast_porosity_shrinkage(img, roi=(50, 50, 400, 400))
print(f"🔍 检测到 {result['defect_count']} 处缺陷")
print(f" 气孔: {result['porosity_count']} 处")
print(f" 缩松: {result['shrinkage_count']} 处")
print(f"📊 缺陷密度: {result['defect_density']*100:.2f}%")
# 可视化缺陷
vis = img.copy()
for defect in result['defects']:
cx, cy = int(defect['center'][0]), int(defect['center'][1])
color = (0, 0, 255) if defect['type'] == '气孔' else (0, 255, 0) # 红色气孔,绿色缩松
cv2.circle(vis, (cx, cy), 3, color, -1)
cv2.putText(vis, f"{defect['type']}",
(cx-20, cy-10), cv2.FONT_HERSHEY_SIMPLEX, 0.4, color, 1)
cv2.imwrite('cast_defect_result.png', vis)
💡 提示 :该💡方法适用于X射线/CT图像,可有效检测铸件内部气孔与缩松缺陷。

✅ Halcon:使用 connection 检测铸件缺陷(HDevelop)
halcon
* 1. 读取X射线铸件图像
read_image (ImageCast, 'cast_xray.tiff')
* 2. 对比度增强
equ_histo_image (ImageCast, ImageEnhanced)
* 3. 二值化(缺陷为暗区)
binary_threshold (ImageEnhanced, RegionDefects, 'max_separability', 'dark', UsedThreshold)
* 4. 连通域分析
connection (RegionDefects, ConnectedDefects)
select_shape (ConnectedDefects, SelectedDefects, 'area', 'and', 10, 1000)
* 5. 形状分析(区分气孔与缩松)
select_shape (SelectedDefects, Porosity, 'circularity', 'and', 0.6, 1.0) * 气孔
select_shape (SelectedDefects, Shrinkage, 'circularity', 'and', 0.0, 0.6) * 缩松
* 6. 统计分析
count_obj (Porosity, NumPorosity)
count_obj (Shrinkage, NumShrinkage)
area_center (Porosity, PorosityArea, PorosityRow, PorosityCol)
area_center (Shrinkage, ShrinkageArea, ShrinkageRow, ShrinkageCol)
* 7. 缺陷密度计算
ImageArea := width(ImageCast) * height(ImageCast)
PorosityDensity := NumPorosity / ImageArea
ShrinkageDensity := NumShrinkage / ImageArea
* 8. 输出结果
disp_message (..., '🔍 气孔: ' + NumPorosity + ' 个', 'window', 12, 12, 'white', 'true')
disp_message (..., '🔍 缩松: ' + NumShrinkage + ' 个', 'window', 30, 12, 'white', 'true')
disp_message (..., '📊 气孔密度: ' + PorosityDensity$'.4f', 'window', 50, 12, 'white', 'true')
disp_message (..., '📊 缩松密度: ' + ShrinkageDensity$'.4f', 'window', 70, 12, 'white', 'true')
* 9. 判定(假设气孔+缩松>10个为不合格)
if ((NumPorosity + NumShrinkage) > 10)
disp_message (..., '❌ 铸件不合格', 'window', 90, 12, 'red', 'true')
else
disp_message (..., '✅ 铸件合格', 'window', 90, 12, 'green', 'true')
endif
* 10. 可视化
dev_display (ImageCast)
dev_set_color ('red')
dev_set_draw ('fill')
dev_display (Porosity)
dev_set_color ('green')
dev_display (Shrinkage)
💡 提示 :Halcon 的
connection+select_shape组合是工业铸件检测黄金标准,支持亚像素精度,已在汽车、航空铸件产线大规模应用。
🎯四、铸造落地 3 大建议
-
必须使用X射线/CT成像
- 内部缺陷无法表面检测
- 可实现100%内部检测
-
建立缺陷等级标准
- 按面积、密度分级(如 A/B/C 级)
- 结合客户 Acceptance Criteria
-
关键应用加AI检测
- 如航空航天、精密铸件
- 用深度学习补充传统💡方法盲区
🎯五、避坑指南
- ❌ 不要直接对表面图像检测内部缺陷 ------ 完全无效
- ✅ 务必采用X射线或CT扫描成像
- ❌ 不要仅依赖面积阈值 ------ 需圆形度+纹理特征
- ✅ 使用面积 + 圆形度 + LBP纹理的综合💡方法
🎯六、总结
一处细微的内部缺陷,可能影响整件铸件性能。
掌握这 6 项算法,你就能:
- 在 200ms 内完成铸件内部缺陷检测
- 替代人工检测,100% 在线监控
- 满足 ASTM、ISO 等铸造标准
记住:铸件品质的保障,不在外观,而在每一个内部的完美无瑕。
