写点什么

LabVIEW 感兴趣区域分析(实战篇—1)

  • 2022 年 1 月 10 日
  • 本文字数:2783 字

    阅读完需:约 9 分钟

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 会清理现场,结束程序。

项目演示效果如下所示:

项目程序下载:案例:LabVIEW图像感兴趣区域标记-其它文档类资源-CSDN下载

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 包含的最大像素个数,以进一步约束转换结果。

项目演示效果如下所示:

项目程序下载:案例:LabVIEW图像颗粒自动标记-其它文档类资源-CSDN下载

发布于: 刚刚阅读数: 2
用户头像

【研究方向】物联网、嵌入式、AI、Python 2018.02.09 加入

【公众号】美男子玩编程,关注获取海量资源~

评论

发布
暂无评论
LabVIEW感兴趣区域分析(实战篇—1)