目录
1.案例要求
只提取三角形部分,要求圆润
2.思路和操作
*加载图像
read_image (Image, 'E:/ai/回放/day6/作业/三角形缺陷/1.jpg')
*转换为灰度图
rgb1_to_gray (Image, GrayImage)
*选中纸张区域
binary_threshold (GrayImage, Region, 'max_separability', 'dark', UsedThreshold)
*把选中区域剪切出来
reduce_domain (GrayImage, Region, ImageReduced)
*线性平滑图像
mean_image (ImageReduced, ImageMean, 100, 3)
*局部阈值分割图像
dyn_threshold (GrayImage, ImageMean, RegionDynThresh, 5, 'light')
*闭运算 线膨胀后腐蚀 填充小空洞,连接相邻物体
closing_circle (RegionDynThresh, RegionClosing, 3.5)
*连通域处理
connection (RegionClosing, ConnectedRegions)
*筛选出三角形区域
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 1000, 99999)
*将区域转化为凸度
shape_trans (SelectedRegions, RegionTrans, 'convex')
*获取区域的轮廓 或者用boundary (RegionTrans, RegionBorder, 'inner')
gen_contour_region_xld (RegionTrans, Contours, 'border')
*最后显示出找到的三角形区域
dev_display (GrayImage)
dev_display (Contours)
3.最终实现效果
4.总结
一、mean_image算子的核心作用
-
原理与功能 :
mean_image
通过均值滤波实现图像平滑,其核心公式为对邻域像素的灰度值取平均。该算子尤其适用于抑制高频噪声,并为后续的动态阈值分割提供参考图像。滤波器的掩膜尺寸(MaskWidth
和MaskHeight
)直接影响平滑效果:尺寸越大,平滑效果越显著,但可能丢失细节。 -
参数调优要点
- 掩膜尺寸选择:根据目标特征尺寸调整。例如,若目标直径约为D,建议掩膜尺寸为2D+1(如网页6中划痕检测案例使用7×7掩膜)
- 奇数尺寸规则:若输入偶数值,Halcon会自动调整为最近的奇数值(如输入8→9),确保掩膜中心明确(不建议这样做)
- OpenCL加速限制:对于大尺寸图像或高动态范围数据(如int4/real类型),需注意可能的溢出问题,此时应优先使用CPU版本
二、dyn_threshold的动态分割机制
-
原理与功能
dyn_threshold
通过比较原始图像(OrigImage
)与参考图像(ThresholdImage
,通常由mean_image
生成)的局部灰度差异实现分割。其条件判断根据LightDark
参数决定:'light'
:提取比参考图像亮超过Offset
的区域。'dark'
:提取比参考图像暗超过Offset
的区域。'equal'
/'not_equal'
:基于灰度差异的相似性或差异性分割
-
参数调优策略
- Offset灵敏度:通常建议设为5-40。过小(如<5)会引入噪声,过大(如>60)可能导致漏检(如表面划痕检测使用Offset=5)
参考图像生成:除mean_image
外,还可使用gauss_filter
或binomial_filter
生成更平滑的参考图像(如使用高斯滤波预处理原子图像) - 掩膜尺寸与目标关系:参考图像的掩膜尺寸需覆盖目标特征(如晶体分析使用21×21掩膜)
- Offset灵敏度:通常建议设为5-40。过小(如<5)会引入噪声,过大(如>60)可能导致漏检(如表面划痕检测使用Offset=5)
三、联合应用的典型场景
-
表面缺陷检测 如金属表面划痕检测案例:
- 步骤:
mean_image
平滑→dyn_threshold
提取暗像素→形态学连接断裂区域 - 优势:有效处理光照不均,突出低对比度缺陷
- 步骤:
-
微观结构分析 如晶体分割:
- 步骤:大尺寸
mean_image
抑制背景→dyn_threshold
提取暗区→基于形状特征筛选目标 - 技巧:结合
select_shape
过滤面积和形状异常区域
- 步骤:大尺寸
-
工业零件检测 如中食品包装质检:
- 步骤:动态阈值分割标签字符→结合形态学去噪
- 扩展:与
connection
和select_shape
联用,实现复杂结构的分割
每个需求的实现方式都有许多种,我提供的只是其中一种,大家可以发散思路,多角度的来完成。