机器视觉与图像处理
多功能和易用运动控制框架
支持图像模板深度学习

第一部分 概括

Real View Bench(简称RVB)是一套专业的数字图像处理和机器视觉算法软件开发组件,主要由数字图像处理,图像预处理和分析模块,BLOB操作等模块组成,涉及图像输入输出,格式转换,卷积操作,形态学操作,二值化,模板匹配和查找,形状匹配等。除了图像处理和机器视觉算法以外,RVB还提供高级的ROI(感兴趣区域-Region of Interest)在视频窗口(也视场窗口)用户界面编程, 提供常用的矩形,圆形,环形,多边形,以及自定义形状。当视场与窗口大小不一致的时候,视频窗口可以进行实际大小,拉伸,比例拉伸等方式进行显示。 作为快速开发应用系统的一部分,RVB定义了统一的数字相机操作应用程序接口(API),不同厂家的相机只要遵循该接口提供应用中间件,即可以溶入到RVB体系里面,为用户提供更多选择。

RVB全面支持OpenCV,可以将先进的OpenCV软件里面的图象或处理算法与RVB提供的灵活的UI完美结合,做出专业的机器视觉应用系统。

RVB主要遵循WINAPI的调用方式,支持不同编程语言,如VB, C#,VC等。分精华版和专业版。专业版在精华版的基础上进一步封装,用户界面更加友好,使用更加容易。不过,目前专业版仅支持 C/C++编程语言。

1.1命名规范

RVB由很多功能模块组成,为了避免不同模块之间的函数重名,模块中提供的函数名称命名如下: 前缀+函数名。

不同模块之间的前缀不一样,具体的模块前缀 见附表1。

1.2编译环境设置

在VC编程环境下面,通常将涉及的RVB模块的头文件和库文件的目录(incs目录libs)放在工程目录所在的同一个目录下,然后按照下面方式进行头文件引用。 头文件: #include "..\incs\rvb\img.h" 库文件: #pragma comment(lib, "../libs/bug/img")

当然,上面的引用方式不是唯一的,也可以按照其他方式进行使用RVB模块。详细的函数模块库名称和头文件名称请参考附表2。

1.3错误处理

很多模块(不是全部)的提供的函数除了可以通过返回值确认是否调用成功以外,还可以通过调用eeh模块中的rvGetLastError和rvGetErrorDescription获取详细的错误代码和描述信息。

1.4快速入门

机器视觉处理软件有很大部分在图像处理,主要的目的是将感兴趣的图像通过预处理,如边缘提取,去噪,二值化等,形成易于描述和分析的特征。然后根据这些量化的特征,进行后续的机器识别或训练工作。下面我们将以对某一视场图像进行统计记数为例来说明RVB机器视觉应用开发的一般过程。

在任何SDK函数被调用之前,请首先初始化RVB组件操作环境,如下:

rvInitializeEnv();

该函数必须只进行一次调用,在应用程序最开始的时候调用。相应地,在程序结束的时候,调用 rvFinalizeEnv() 进行资源释放。

1.4.1源图获取

待分析的视场源图可以从磁盘文件转载或从相机实时源进行抓取。图1是从磁盘里面装载的黄豆粒彩色图像。装载方式如下: RvImage image = rvLoadImage(“bean.jpg”); 该语句将从当前目录下装载名称为bean.jpg的文件,然后经过格式转换以后,根据需要生成一个RIT_GRAY或RIB_RGB的格式的RVB内部格式的图像文件。

(TIPS:至于rvLoadImage将文件图像转换为RIT_GRAY还是RIT_RGB或RIT_RGBA,取决于原图的象素通道数。)

图1 某一视场的黄豆原始图象。

1.4.2转成灰度图像

针对记数任务的需要,需要将彩色图像转换为二元图像,作为一个中间结果,需要将彩色图像转换成灰度图像。可以按照下面的语句进行: rviCast(m_image, RIT_GRAY);

图2是单通道的灰度图像,最大灰度值为255。

(TIPS: 如果图像已经是灰度图像格式,那么这部分就没有必要进行了。)

图2 某一视场的灰度图像。

1.4.3二值化处理

将灰度图像转换成二元图像。这里我们使用简单的灰度处理方法。

rvbInner(m_imBin,90,255);

这个语句将源图里面像素灰度值在90和255之间的为前景对象,其余为背景对象。二值化以后的结果如图3。

图3 转换成的二元图象。

1.4.4去除噪声。

在二值化以后,通常由于一些躁声如椒盐产生一些小的二元对象或在真正的二元对象产生空洞,如图3, 需要对这些不足进行进一步处理,这里使用腐蚀和膨胀的方式进行处理。

rvDilate(m_imBin);

rvDilate(m_imBin);

rvErode(m_imBin);

rvErode(m_imBin);

rvErode(m_imBin);

如图4。

图4 通过形态处理后的二元图象。

1.4.5记数,求得结果

在获取二元图像以后,将其转换为类型为标签(LABEL)的BLOB对象,然后可以获得黄豆的数量。

m_imLab = rviClone(m_imBin, m_imLab);

int n =rvBinToLabel(m_imLab);

sprintf(“The number of blob is: %d\r\n”, n);



抖音视频号: 第一感机器视觉
微信公众号: 精浦科技
深圳市软云动力科技有限公司
东莞办事处: 广东省东莞市松湖智谷B6栋225b
公司地址: 广东省深圳市南山区桃园路金桃园大厦2191

二维码1 二维码2 二维码3


深圳市软云动力科技有限公司 版权所有  鄂ICP备2022015826号-2   

统计显示 ▼