前言
这个是开始halcon机器视觉的第一篇。
为什么要用halcon呢,因为有很多现成的算子,方便快速应用。
后续的计划是一边熟悉halcon,一边刷刚萨雷斯的《数字图像处理》。
正文
以官方例程的surface_scratches(表面划痕)为例
1,根本不可能仅以灰度值作为判断划痕的依据。
因为,划痕像素点的灰度值与非划痕处像素点的灰度值,不可能正好是一个二值分割的关系。简单点说,就是–不可能划痕区域的每个点都比所有的非划痕区域亮或者暗。
且灰度值易受各种因素影响而变化。因此,鉴别划痕的思路应该是检测相对变化。
2,官方例程的思路。
先均值滤波后,再将原图相对均值后的图像做动态阈值分割,取出dark部分。均值滤波后灰度值就被平均化了,低的被拉高,高的被拉低。此时,再做动态阈值分支。那相比较来说,灰度值更dark的部分,就是包含了划痕的部分了。
3,并非分离出的所有的点都是划痕。
因为图片存在很多污点,会被一并分割出来。这时候接一手形态学中的面积查找就搞定了。因为污点的特征是面积小而不连续。
4,联通相邻区域。
一条划痕可能检测出来中间会有分段,此时可以用膨胀可将其联通起来。
5,官方例程遗留问题。
官方例程很明显没有检测出全部的划痕,有几条划痕仅仅被标注出了一小段(注意绿圈部分)。通过分析检测过程,发现那几条划痕被鉴别为一排断开的点。究其原因肯定是因为划痕的灰度值有较大变化,导致检测的结果是一排断开的点,从而导致在形态检测中被排除了。
思考
这种方式适合用来检测较明显的划痕,对于对比不强烈的划痕没有办法。因为此种方法无法分辨–一排断开的点和噪声点有啥区别。就是说–此种方法无法鉴别点的排列特性,也就无法提取划痕的形状特性。此种方法是通过划痕的色差和面积特征来检验的。
用高斯滤波也是同样效果。因为高斯滤波的作用也是平滑图像。而要检测那些不明显的划痕,或许需要一种可以识别划痕的形状特征的方法。