LabVIEW感兴趣区域分析(实战篇—1)
ROI(region of interest),感兴趣区域。机器视觉、图像处理中,从被处理的图像以方框、圆、椭圆、不规则多边形等方式勾勒出需要处理的区域,称为感兴趣区域,ROI。在Halcon、OpenCV、Matlab等机器视觉软件上常用到各种算子(Operator)和函数来求得感兴趣区域ROI,并进行图像的下一步处理。为图像处理设定ROI,可以将注意力集中在要解决问题的主要方面,减少要处理的数据量,提高系统的处理速度和实时性。
在机器视觉系统开发过程中,常见的ROI操作包括构建ROI、关联ROI到图像显示窗口、从图像显示窗口中提取ROI以及清除图像显示窗口中的ROI等。图像显示窗口中的图像不断变化时,与之关联的ROI可以保持不变。
ROI可通过各种标准几何形状或自由的封闭域来描述。从数据结构角度来看,ROI自身并不包括图像数据,它只是说明图像中哪个区域的数据需要被重点关注。
1、ROI定义及实现方法
Nl Vision使用ROl Descriptor数据结构描述ROI,下图显示了该数据结构及其图解。
由图可知,ROI可以由其矩形边界(global rectangle)和一个或多个不同的轮廓(contours)共同定义。矩形边界是指一个底边与图像底边平行,且恰好包含整个ROI的矩形,该矩形左上和右下顶点的坐标保存在ROI数据结构中的Global Rectangle数组中。ROI区域可以通过一个或多个几何轮廓来限定,这些不同几何轮廓所定义区域的交集构成了整个ROI。
用于限定ROI区域的轮廓也保存在一个称为Contours的数组中,数组的每个元素由特征ID、类型(type)和包含多个坐标值的数组Coordinates构成。特征ID用来说明该元素描述的轮廓是ROl的外边沿(external)还是内边沿(internal)。如果为外边沿,则其内部的所有区域被看作是ROI区域的一部分;而如果为内边沿,其外部所有部分均被当作是ROI区域的一部分。type值指定了元素所描述轮廓的几何形状。Coordinates数组中每两个元素构成了轮廓中多个顶点的坐标。
由此可见,Contours数组中的元素定义的轮廓本质上用于描述图像中某个区域,而单个或多个元素共同描述的轮廓所限定区域的交集就是最终希望得到的ROl。
在LabVIEW中使用Nl Vision定义ROl的方法大致可分为交互式、程序代码定义以及图像遮罩转换三大类,如下表所示。
交互方式定义ROl时,需要用户使用各种ROI工具在图像中指定ROI区域,采用交互方式定义ROI可以减少程序代码的编写量,但在程序运行过程中需要用户参与。由于用户的操作习惯和操作环境千差万别,因此即使同一图像同一用户每次绘制的ROI也可能不同。如果要减少用户参与,精确定义ROI,则可通过程序代码来实现。相应地,开发人员也要花更多的精力研究如何在图像中精准确定ROI位置,并编写代码。最后,ROI也可以与图像遮罩相互转换,因此使用图像遮罩也可以定义ROI。
机器视觉系统开发过程中,常用到的几何形状有点、线段、矩形和环面。下表列出了几何形状简易数据结构与ROl Descriptor之间相互转换的VI:
除了以上介绍的ROI转换VI,Nl Vision还提供了其他几个与ROI操作相关的重要VI,包括图像遮罩(lmage Mask)与ROI相互转换的VI、ROI组合与拆分、ROI在不同坐标系之间的转换以及将已标记的图像(Label lmage)区域转换为ROl的VI。这些VI可参考说明手册理解:
查看ROI转换VI,在LabVIEW程序框图中点击鼠标右键,查看视觉与运动相关函数,查看Vision Utilities模块中的Region of Interest,步骤如下所示:
Region of Interest包含VI如下所示:
用户可结合说明手册,使用相关的Region of Interest VI。
2、基础案例:图像感兴趣区域手动标记
本案例使用ROI构建器以交互方式定义ROI的程序界面和程序代码,如下所示:
案例功能描述如下所示:
程序开始先将图像CSDN.png读入内存等待进一步处理。
紧接着由While循环和事件结构组成的事件处理器待命,随时准备处理各种用户界面事件。
当用户单击Display Image按钮时,Showlmg Value Change事件分支中的IMAQ WindSetup和IMAQWind Draw就把内存中的图像绘制在一个独立的外部图像显示窗口中。
若用户随后单击ConstructROI按钮,DefROl Value Change事件会被触发,其对应事件分支中的IMAQConstructROI将创建ROI构造器。由于传递给它的窗口编号为0,与之前IMAQWind Draw绘制的外部图像显示窗口编号(默认值窗口编号为0)一致,因此,IMAQConstructROl会将0号编号的图像显示窗口临时变为模态窗口形式的ROI构造器并在其右侧显示ROI工具条。
当用户在ROI构造器中定义好感兴趣区域并确认后,程序就返回所定义区域所对应的ROl Descriptor。
此时,若用户再次单击Display lmage按钮,就会发现之前定义的ROl显示在窗口中,说明它已经与该窗口关联。
注意,在交互方式下,若构造器指定了窗口编号,则创建的ROI会自动与该窗口关联。若要使用程序代码将ROI Descriptor描述的ROI与图像显示窗口关联,可以使用IMAQ WindSetROl。如果要清除图像显示窗口中的ROI,可以单击Erase ROI按钮,它将触发EraseROl Value change事件,调用IMAQ WindEraseROI清除ROI。
最后,单击Exit按钮退出程序时,IMAQ WindClose和IMAQ Dispose会清理现场,结束程序。
项目演示效果如下所示:
3、进阶案例:图像颗粒自动标记
图像标记 (Label lmage)操作常用于颗粒(Particles)分析,它把二值图像中相互连通的一组像素(称为颗粒)全部更改为某一固定灰度值(用8位或16位表示)。可通过4连通或8连通原则来判断像素是否属于同一颗粒。图像标记操作的输入图像为二值图像,但其输出却是含有为每个颗粒都设置了灰度标记值的灰度图像,其中灰度标记值的数量等于图像中颗粒的数量再加上用于背景的灰度标记值0。如果图像使用了调色板,则被标记的多个颗粒有可能使用同一灰度标记值。
本案例是一幅图像中颗粒进行标记的实例程序,如下所示:
案例功能描述如下所示:
程序代码在将图像Alu.png读入内存后即进入图像标记循环。
在循环中,若用户没有改变IMAQ Threshold使用的阈值,则循环就不做任何处理,否则就会对图像中的颗粒或区域进行标记。
标记的过程是先用IMAQ Threshold将图像分割为二值图像,再经形态学处理函数IMAQ Morphology对颗粒或区域的边缘做平滑处理,随后才由IMAQ Label(位于LabVIEW的Vision andMotion→lmage Processing→Processing函数选板中)将各区域内的像素修改为灰度标记值。
除了对图像标记,程序还返回已标记的颗粒数,并使用IMAQ Quantify返回各标记区域的像素灰度统计信息,IMAQ Quantify的Image Mask参数必须为标记图像。
完成了图像的标记,就可以设法将已标记图像中的某一感兴趣部分提取出来单独分析。IMAQ LabelToROI可以把图像中已标记区域转换为ROI。如果某个标记值对应多个区域,则其返回的ROlDescriptor将包含多个区域的轮廓。在使用它时还可以指定是否仅转换ROI外部轮廓和ROI包含的最大像素个数,以进一步约束转换结果。
项目演示效果如下所示: