我发现写blob分析(Binary Large Object)相应的处理函数的文章非常少。那就写一写关于blob分析相关的文章。
图像分割: 允许BLOB分析将图像分割成两类:斑点和背景。当然我更愿意认为这个是其中的二值化起到了作用,通过 二值化将背景和斑点进行分离。这个要求物体和背景对比度比较好的情况,之前说过的,对比度其实更多反 映在灰度值之间的差距,物体的那部分的灰度值和背景的灰度值的差距非常大越好分离,如双峰直方图。双峰直方图类似如下:
BLOB里面有两种类型的阈值函数:硬阈值和软阈值。?
在visionpro里面同样有相应的处理方式:
?硬阈值:不允许有跨斑点边界的灰度值变化。硬阈值通常设置在两个峰值中间的低谷处。
?举个栗子:
原图:
灰度直方图+阈值线(紫色):
?
可以看到阈值几乎划在了背景和物体灰度值中间?
?于是得到BLOB处理后图(截图为了看到白色区域,特意截取大一点):灰度直方图为:0和255
?硬阈值的边缘灰度值是跳跃的,不存在过渡像素。如图是上面图的一部分:
硬阈值对于边界区域的像素的处理太粗暴了。于是乎,软阈值它来了!
软阈值:展现处理斑点边界区域的像素的灵活性,软阈值倾斜并覆盖一系列像素值。一旦处理,阈值范围内的像素被输出为加权像素。加权像素按照它在阈值范围内的值来计算斑点结果。以下是我设置的软阈值范围,低阈值和高阈值之间的阈值范围就是加权像素的区域,低于低阈值的统统设置为0,高于高阈值的统统 设置为255,区域内的像素进行加权,得到过渡灰度值。在这张图里面,我设置了低阈值为150,高阈值为 210。
结果如下:
?直方图是这样的(注意红色箭头指的地方),红色箭头的地方是有像素点分布的:
它的边缘是这样的:
?可以看到明显的过渡像素!
对于过渡像素的求值,目前还没找到相应的详细计算方法,只能知道是用到了加权的方式统计的。
最后,如果是测量某一个区域的某一些值,blob分析可能会影响到准确性。blob分析在我所处的项目中,通常用于检测有无和比较粗略的测量。