开发一个自己的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


 图 2 模块概念与实际文件对应

二、模块运行机制

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


图 3 运行机制

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




图 4 圆查找输入定义

三、看一个实例圆查找

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

输入:从圆查找的功能定义可知,圆查找的输入有图像,查找框。打开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进行二次开发

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

可惜了  图片看不到了

2023-10-13 14:29:54 江苏省
回复

楼主写的很棒👍“由底层运行部分和界面运行部分组成。底层运行部分名为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
0
关注
0
粉丝
0
创作
0
获赞
所属专题
  • VM4.2二次开发环境配置方法(入门必看)
  • Visionmaster4.2 + QT5.14.2 + VS2017二次开发保姆级避坑课程
  • 使用VisionMaster4.2SDK联合C#进行二次开发入门
  • VM二次开发视觉框架(C#)
  • 二次开发过程注意的点
  • 开发一个自己的VM模块(三)
  • 开发一个自己的VM模块(二)
  • 开发一个自己的VM模块系列一:模块详解
  • 【VM集成开源AI】深度学习算子模块封装
  • Vm算子CMvdImage图片生成方法,即IntPtr转byte[]和byte[]
  • Sauvola二值化处理在图像处理应用的优势介绍分析
  • “启智杯”设计大赛-一种模板匹配建模与识别控件
  • “启智杯”模板匹配控件的扇形掩膜实现方式交流
  • “启智杯”:IMvdImage类型转换为MFC的CBitmap类型
  • "启智杯":确定扇环外切矩形的方法
  • VM二次开发小技巧-增加十字辅助线
  • VM二次开发小技巧—快速匹配模板切换
相关阅读
  • [V社区三周年]内容蓝海,智享未来
    2024-12-06 浏览 0
  • 【开发有道系列】C++与C#相互调用的方法
    2024-11-19 浏览 0
  • 关于同一排三个充电桩,中间位置的车不能与两侧一同进入充电问题的配置经验
    2024-12-04 浏览 0
  • 【重磅!智能视觉处理卡】SVA2000二次开发保姆级教程
    2024-11-19 浏览 0
  • 海康机器人叉车开箱标准流程SOPV1.0
    2024-12-07 浏览 0

请升级浏览器版本

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

推荐使用以下浏览器