开发一个自己的VM模块系列一:模块详解
不少客户的算法在某些应用领域有非常出色的表现,同时也很欣赏VM的软件架构和呈现形式,那如何将自有算法嵌入到VM当中去呢,这篇文章给大家做一个详尽的展示。

一些有开发实力的视觉集成商,设备商,可以借用VM已经做好的流程框架,将自己特有的处理算法,设备配置功能封装成一个VM模块,置于流程中,就可以方便的调用VM中的图像、获取各模块的处理结果、触发自己特有模块运行。

虽然提供了VM模块生成工具,可以方便的生成一个带输入输出,配置界面的空模块,但很多人还是对模块的原理不清楚,导致即使拿到了自动生成的模块工程,还是不知道该如何下手,把空模块加入业务功能改造成自己独特的模块。

第一部分从原理开始讲解一个模块的组成结构,让后续的模块开发更容易完成,出错之后也方便排查。

一、VM模块的基本概念

                                      图 1 模块基本概念


      一个VM的模块由输入,输出、配置、显示以及模块本身构成。(假如模块名称为AAA 输入、输出都由最基本的5种数据类型组成:int, float, string, imagePointSet。最常用的是前面4种。由基本类型组成更复杂的组合类型,如:IMAGEROIBOX,分别是图像和ROI框。在AAAModu.xml里。

   配置是调节模块运行参数的面板,如:圆查找模块的半径。配置也由很多基本类型构成,如:IntegerEnumeration等。这些基本类型都对应了一个可见的配置控件。通过XML定义配置界面的内容。在AAAModuAlgorithmTab.xml里。 显示是定义模块运行之后,需要在渲染窗口上显示哪些东西,由一些基本的图像、图形组成,如:imagecirclepointrect等等。在AAAModuDisplay.xml里。

    模块本身,就是可被调用执行的逻辑块,以动态库的形式存在于磁盘上。由底层运行部分和界面运行部分组成。底层运行部分名为AAAModu.dll,界面部分为ModuCs.dll,如果界面部分还有较复杂的建模过程,无法仅仅靠配置XML定义,则还会有一个配置控件,名为AAAModuControl.dll

二、模块运行机制

    了解了模块的基本概念之后,还是不知道这几部分是如何配合工作的。接下来以模块运行把整个过程串起来。(以平移旋转功能为例)

   模块运行时,先从输入中拿到各Input的值,再拿到配置的参数,根据编写好的逻辑将输入与参数一起参与运算,将计算的结果赋值到输出上。显示配置的图形与输出关联,显示出具体的图形。



  1. 三、看一个实例圆查找


圆查找功能定义:在图像的某个位置,查找圆形并输出,找圆的参数可调。


输入:从圆查找的功能定义可知,圆查找的输入有图像,查找框。打开IMVSCircleFindModu.xml,找到Input,可见如下定义:


XML中可见,输入图像为IMAGE这个组合类型(Combination,image, width, height, format 4个基本类型组成,类型分别为image, int, int, int


输入ROI有框(InputROI类型为ROIBOX)和圆弧(InputROIAnnulus类型为ROIANNULUS)两种。


输入还有位置修正信息Position Correction Info类型为FIXTURE



配置:圆查找需要设置所查找圆的半径大小范围,设置明暗变化阈值等。查看IMVSCircleFindModuAlgorithmTab.xml,可见:

分别对应圆查找的基本参数,运行参数,结果显示


圆查找的参与与XML里的定义一一对应。比如EdgeThresh对应边缘阈值,默认值为0xf,即界面上显示的15。如果自定义模块开发过程中需要某个配置控件,又不知道具体的控件类型及用法。可以去看看其它已有模块,是不是有一样的。可以把该模块的配置XML打开,找到需要的控件,看懂它的使用逻辑,复制过来,并修改参数的名称。

配置里还有一个重要的工作,是将需要输入数据与配置控件关联起来,让人可以在界面上配置输入数据从哪来。圆查找的输入数据是图像和ROI,几乎所有的模块都需要这两个数据,所以把这两个数据的配置控件做成了基本界面库。在配置XML中如下:



图像对应的ImageSourceGroup, ROI有很多配置方式,对应的Tab_ROI Area里的所有控件。显示如下:


运算:在圆查找模块中,需要获取图像,找到ROI区域,并尝试找出半径,边缘阈值符合参数的圆。具体的获取输入数据,参数数据在第二部分文档中讲解。并将搜索到的圆赋值到输出数据中。

输出:从圆查找定义可知,至少会输出一个圆形。查看IMVSCircleFindModu.xmlOutput,如下:


ModuStatus模块运行状态,类型为int.


OutputCircle输出圆形,类型为CIRCLE的复合类型,由Radius半径,类型为floatCenterX圆心点XCenterY圆心点Y,类型也都为float组成。


还有一些其它输出。


     显示:圆查找至少要显示搜索到的圆形,还需要显示底图。查看IMVSCircleFindModuDisplay.xml可见:


Display里定义了要显示的图像,名称为InputImage,类型为image。图像数据,长,宽,格式分别对应(Mapping)到输入输出中的InImage, InImageHeight, InImageWidth, InImagePixelFormat.

定义了要显示的圆形,名称为Circle Result, 类型为circle。图形的中心点X,Y,内径,外径分别对应(Mapping)到输入输出中的CenterXCenterY Radius Radius









版权声明:本文为V社区用户原创内容,转载时必须标注文章的来源(V社区),文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:v-club@hikrobotics.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
上一篇

ID3050/5050智能读码器新品发布

下一篇

LabVIEW基于算法平台C#版本SDK进行二次开发

评论请先登录 登录
全部评论 5

楼主写的很棒👍“由底层运行部分和界面运行部分组成。底层运行部分名为AAAModu.dll,界面部分为ModuCs.dll,如果界面部分还有较复杂的建模过程,无法仅仅靠配置XML定义,则还会有一个配置控件,名为AAAModuControl.dll。”这句话对我来说一针见血,解决了我的困惑。

2022-08-23 18:33:47
回复
nice
2022-04-22 17:32:54
回复

学习了

2022-02-27 22:41:13
回复
通俗易通
2022-02-24 23:20:24
回复

学习了,详细具体,手动点赞

2022-02-20 11:44:17
回复
  • 1
Lv.0
17
创作
143
粉丝
123
获赞
相关阅读
  • 海康机器人“悉灵杯”课题研究活动-获奖公布
    2022-09-05
  • 汽车行业-汽车焊点检测案例
    2022-09-01
  • VM3D模块学习经验分享
    2022-09-22
  • SC系列智能相机图像存储的几种方式
    2022-09-08
  • 有关条码二维码相关知识
    2022-08-30

请升级浏览器版本

您正在使用的浏览器版本过低,请升级最新版本以获得更好的体验。

推荐使用以下浏览器