LabVIEW任一粒子最佳旋转外接矩形长宽测量
如果对NI VISION比较熟悉的话,就知道,在NI VISION的粒子分析函数中,只能得到粒子的不旋转的外接矩形,如下的视觉助手中效果:
视觉助手中的粒子分析效果
那么如果我们要想得到该粒子的旋转的外接矩形该如何处理呢?假设是一个标准的长方形产品,用NI VISION中的粒子分析,得到的是不旋转的外接矩形,如果产品正好是水平或垂直摆放时,则应该测量值相对是准确的。而如果产品不是水平或垂直摆放的,那么得到的长宽肯定是不对,比实例的尺寸要大。这时我们应该也是希望在粒子的长宽方向上来测量该粒子的实际的长宽尺寸。当然,如果是长方形的粒子,那么我们还是有许多的方法来实现的。如先找到粒子,然后定位建立坐标系,然后再用卡尺之类的函数来跟随粒子来测其长宽方向的值。但是,如果是一个非标准形状的产品呢,如下面的效果所示的产品:
非标准形状产品
这样该如何去测量这个产品的长与宽呢?首先就得有一个统一的定义该产品粒子长与宽的标准定义。在这里,可以考虑NI VISION粒子分析中给出的角度来定义产品的方向。NI VISION中粒子分析中的角度定义是这样的,一条通过质量中心的且拥有最小惯性矩(或转动惯量)的直线与水平线的夹角。如果我们看一下长方形的粒子,可以看到该角度就是粒子长方向的中线与水平线的夹角,而如果是其它特征的粒子,也大概可以看到其是延着较长的方向的一个角度。利用该角度,就可以定义任一粒子的长方向的所在的角度了。然后再利用与其垂直的另一条直线(即角度+90度得到),就可以定义宽方向所在的角度了。最后在这两个方向上进行长宽测量,即可得到我们想要的长与宽尺寸。下面的效果图,是视觉论坛实现的效果,大概的功能基本上实现,某些特殊情况,可能未考虑到或已经考虑到但为了提高性能,未设置相应的方法以避免。
任一粒子的最佳旋转外接矩形长宽测量
上面的效果是对于任一粒子的长宽测量的实际效果。可以看到,可以比较好的测量出相应粒子的长与宽(红色的边框表示的是粒子的长宽,即旋转外接矩形)。粒子的测量ROI(分析图像中的绿色ROI),是自动生成的。我们测量时,默认的是整个图像。功能函数处理了T形粒子的ROI自动生成时,偏向质心的情况,即T形产品的质心可能会有一个比较大的偏移,如果T的横部占比大,则质心偏向横部,而如果T的竖部占比大,则质心会偏向竖部。这时按照粒子生成的ROI可能并未完整的包含整个粒子,这里预留了凸包功能选项(即粒子分析参数中的凸包质心选项),可以将T形粒子的质心尽量往中心偏移。当绿色ROI中有其它小粒子干扰或与ROI接触时,这种情况下,是会测错的,如下图所示:
任一粒子的最佳旋转外接矩形长宽测量-ROI中有其它粒子干扰时的情况
对于这种情况,该功能函数中,添加了过滤功能(可选项,即卡尺参数中的粒子过滤),可以过滤掉与ROI接触的粒子,以及不满足面积范围的粒子。效果如下,比较理想。但是因为添加了一次过滤功能,速度可以认为下降了一半(粒子过貌似比较耗时)。
任一粒子的最佳旋转外接矩形长宽测量-过滤ROI干扰
另外对于相连接的粒子,会当成一个粒子来测量,这时也会测错。这种情况,则未做处理。当然,也可以处理一下,如使用形态学腐蚀,将粒子分开,但是这样可能测量得到的值不准,要加补偿。另外也可以使用分割算法,对连接的粒子进行分割。但是多少也会有一些不准的可能性存在。所以里未做处理。
任一粒子的最佳旋转外接矩形长宽测量-粒子连接在一起