描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787302496410丛书名: LabVIEW研究院
《图像处理、分析与机器视觉(基于LabVIEW)》配有各种具有代表性的图像实例,以及图像处理、分析和机器视觉应用的程序源代码。这些图像和源代码不仅可加强读者对内容的理解,还能作为实际工程项目的参考。
《图像处理、分析与机器视觉(基于LabVIEW)》可作为图像处理、分析和机器视觉项目开发人员的技术参考书,或高等学校计算机、虚拟仪器、自动化、模式识别与图像处理等专业的教材,也可作为对机器视觉开发团队或公司的培训或辅导教材。
目录
第1部分机器视觉系统构建
第1章绪论
1.1机器视觉的定义与发展
1.2机器视觉系统的构成与开发过程
1.3NI视觉平台简介及软件安装
第2章成像系统
2.1成像系统模型
2.2镜头
2.3相机
2.3.1CCD和CMOS
2.3.2模拟相机和模拟视频信号
2.3.3数字相机和数字视频信号
2.3.4相机筛选
2.4本章小结
第3章图像采集、存储与显示
3.1图像采集设备
3.2NIMAX与相机驱动
3.3IMAQ、IMAQdx与图像采集
3.4本章小结
第4章图像管理与显示
4.1内存中的图像
4.2内存图像管理
4.3图像显示
4.3.1图像显示控件
4.3.2图像浏览器
4.3.3外部窗口显示
4.4ROI与图像遮罩
4.5无损图层
4.6本章小结
第5章图像存储
5.1图像文件读写
5.2BMP文件
5.3TIFF文件
5.4JPEG文件
5.5PNG文件
5.6AVI文件
5.7本章小结
第6章系统校准与图像矫正
6.1畸变模型
6.2图像校准
6.3坐标校准
6.4误差与校准质量
6.5图像几何矫正
6.6本章小结
第2部分图像操作与增强
第7章图像操作与运算
7.1像素操作
7.2图像操作与几何变换
7.3图像运算
7.4彩色图像操作与运算
7.5本章小结
第8章灰度分析与变换
8.1直方图
8.2灰度分析
8.3结构相似性
8.4灰度变换
8.5本章小结
第9章空间域图像增强
9.1线性卷积
9.2邻域增强
9.2.1线性滤波
9.2.2非线性滤波
9.3本章小结
第10章频域图像增强
10.1图像的傅里叶变换
10.2图像的频域滤波
10.3NI Vision频域图像滤波方法
10.4本章小结
第3部分特征分析与机器决策
第11章阈值分割与边缘分割
11.1阈值分割
11.1.1全局分割
11.1.2局部分割
11.2边缘分割
11.2.1点检测
11.2.2线检测
11.2.3轮廓提取
11.3本章小结
第12章形态学与区域分割
12.1像素的形态学处理
12.2颗粒的形态学处理
12.3区域分割
12.4区域生长与形态学重构
12.5本章小结
第13章颗粒特征与分析
13.1点与线
13.2边界与面积
13.3角度和矩
13.4测量坐标系
13.5本章小结
第14章图像特征及应用
14.1灰度测量
14.2边缘检测
14.3轮廓分析与比较
14.4纹理分析
14.4.1小波变换
14.4.2纹理的统计分析
14.5角点检测
14.6本章小结
第15章图像模式匹配
15.1灰度匹配
15.2几何匹配
15.3黄金模板比较
15.4本章小结
第16章目标测量
16.1目标搜索
16.2特征定位
16.3几何测量
16.3.1卡钳
16.3.2卡尺
16.3.3解析几何法
16.4结果判定
16.5本章小结
第17章分类识别
17.1训练过程与分类器
17.1.1样本集合
17.1.2分类器配置
17.1.3分类器操作和训练
17.1.4分类器输出和评价
17.2分类检测与识别
17.3OCR
17.3.1字符集训练
17.3.2文字识别与验证
17.4本章小结
第18章彩色视觉
18.1色彩空间
18.2色谱与色彩匹配
18.3色彩定位
18.4彩色模式匹配
18.5色彩分类
18.6彩色图像分割
18.7本章小结
第19章仪表与条码
19.1仪表读取
19.2条码读取
19.2.1一维码
19.2.2二维码
19.3本章小结
第20章双目立体视觉
20.1双目视觉系统原理
20.2系统校准
20.3图像调整
20.4对应点匹配和3D重建
20.5本章小结
参考文献
在电子学和计算机科学中,图像处理、分析与机器视觉一直是一个十分活跃的分支。随着过去30年电子和计算机技术的迅猛发展,人们对这一分支的研究已经不再局限于图像处理分析理论和实验室验证,而是不断向机器视觉领域延伸。
机器视觉主要研究各种图像处理分析技术在实际工业环境中的应用。目前,国内外这方面的研究日趋深入,相关的书籍也层出不穷。但是,大多数书籍更倾向于对理论和算法进行抽象讲解。对于大部分工程人员来说,要将这些理论转化为具体的工程实践,仍有不少的困难需要克服。此外,由于很多客观条件的制约,工程人员无法深入地研究图像处理与分析的各种理论和算法。因此,对他们而言,一套封装了各种算法且能快速解决各种问题的平台工具更具意义。至于理论研究和算法等工作,应留给平台工具开发人员去完成。
虚拟仪器利用计算机把高性能模块化硬件和可灵活定制的软件相结合,完成各种测试、测量和自动化任务。National Instruments(NI)公司的LabVIEW是一个可视化、跨平台、使用图形化编程语言的虚拟仪器开发平台。它广泛支持各种硬件,且包含丰富的面向应用的封装函数库。这些可扩展的函数库覆盖面很广,包括数据采集、信号处理、数学计算、统计分析、数据通信、数据库、移动开发、嵌入式开发、FPGA和运动控制等。对于图像处理、分析和机器视觉系统开发,NI公司提供了与LabVIEW无缝集成的函数库NI Vision。工程人员在LabVIEW中使用它,可快速构建大型机器视觉自动化系统。
本书基于LabVIEW和NI Vision,介绍图像处理、分析与机器视觉的工程应用和系统开发技术。全书根据读者对图像处理、分析与机器视觉知识掌握的程度和实际需求的不同,分为机器视觉系统构建、图像操作与增强和特征识别与机器决策三大部分。
第1部分包括第1~6章,主要讨论机器视觉系统的成像系统模型原理、镜头相机部件的选型、系统的搭建和校准以及图像采集、显示和存储等技术。通过学习这些内容,读者将能按照分辨率工程应用的需求,完成机器视觉系统搭建,并能用其采集用于后续处理的图像,并对图像进行显示和存储。
第2部分包括第7~10章,主要讨论图像的操作、图像变换、图像灰度分析以及图像的空间域和频域增强技术。由于这些技术的理论知识几乎在所有图像处理类的大学教程或工程参考书籍中都有介绍,因此本书第2部分内容重点介绍这些技术在工程实践中的作用和使用方法。当然,这部分内容中对理论知识作了汇总性介绍,这不仅完全可以满足初学图像处理和分析技术的工程人员或在校大学生的需要,还能帮助他们在各种繁杂的信息中理清脉络。
第3部分包括第11~19章,介绍机器视觉软件开发的关键技术,包括图像分割、形态学处理、特征提取、特征分析、特征在机器视觉系统开发中的应用以及目标测量、图像模式匹配、目标分类识别等技术。这部分将重点放在已经完成系统搭建和图像增强后的机器视觉软件开发上。在进行机器视觉软件开发时,不仅要考虑软件工作的理论基础,还要考虑其在实际工作环境中保持鲁棒性和实时性的前提下,仍能对各种变化因素具有不变性。例如,即使出现光照变化、被测件的位置变化、尺寸变化或被测件旋转等情况,机器视觉软件也仍能正常工作。此外,这部分内容还介绍了色彩空间和色彩匹配、色彩定位、彩色模式匹配以及色彩分类识别等技术,将机器视觉扩展到彩色图像范围。最后,还介绍了机器视觉仪表和条码读取技术。这部分内容适合进行机器视觉系统开发的工程人员或在校的研究生或博士生。
全书尽可能覆盖基于LabVIEW和NI Vision的图像处理、分析与机器视觉系统开发的最新技术。为帮助读者深入理解书中的内容,本书还精心收集了各种具有典型性的图像,并基于LabVIEW和NI Vision的最新版本创建了各种实例程序。这些实例图像和程序的代码可以从清华大学出版社官方网站(http://www.tup.com .cn)下载。
本书的编写是一个艰难和长期坚持的过程。2012年我的《LabVIEW虚拟仪器项目开发与管理》一书出版后,我想继续将基于LabVIEW开发图像处理、分析和机器视觉系统的一些经验和心得汇总成书。恰巧那时清华大学出版社和NI公司也计划联合出版一套LabVIEW技术丛书。在得到邀约后,我就与清华大学出版社一起制订了本书的编写计划。在第1部分的编写过程中,因工作原因,我不得不和妻儿迁居国外,后续章节的编写也是在新环境和工作之余完成的。感谢妻子和儿子在此过程中给予我的极大支持和理解。此外,许多同行和LAVA、NI Discussion Forums、VI Home、GSD Zone等论坛上的朋友对本书内容的规划提出了不少宝贵意见,他们的鞭策和关注给了我不断坚持的信念,在此向他们表示衷心的感谢!
本书中的实例程序和图像可通过扫描封底的二维码在益阅读网站上下载。
在下载的实例程序和图像目录中,同一章中的实例程序存在同一目录中,并按照“CH章号”的形式命名。例如,第15章的所有实例代码存放在CH15目录中(如下图)。
实例程序使用的图像和书中的插图则统一存放在IMGs目录中。为了程序运行方便,实例图像并未按章划分目录存放,而是在各实例程序代码和书中代码插图中明确说明了图像的路径。例如,第16章插图中的代码使用了保存在IMGs目录下Bracket子目录中的Bracket3.png图像。
由于时间和篇幅的限制,本书内容很难覆盖基于LabVIEW的图像处理、分析和机器视觉技术的各个方面,也难免存在不妥之处,请读者原谅并提出宝贵意见。
衷心希望机器视觉和虚拟仪器技术能在LabVIEW助力下有长足发展!
笔者
2018年3月于多伦多
图31相机对信号的转换
3.1图像采集设备相机输出的视频信号中携带着彩色或黑白图像帧。若要在计算机中分析处理这些图像,必须先设法从视频中提取出这些图像。图像采集设备就是用于从视频信号中“抓取”图像帧的设备,也称为帧存器(frame grabber)。不同类型的相机输出的模拟和数字视频信号不仅有彩色和黑白之分,还常出于兼容性和数据传输的需要,在不同于RGB的色彩空间(YUV、YIQ或YCbCr)对信号进行编码。相应地,从不同输出类型的相机提取数字图像的方法也略有差别,表31汇总了从不同输出类型的相机获取数字图像的方法。以从彩色RGB数字视频信号中获取图像帧为例,除了需要参照同步信号提取图像帧数字信号,还要考虑视频信号的编码方式。如果相机为带Bayer滤镜的单CCD/CMOS相机,则必须将原始RGB数据(RGB raw data)解码为完整的RGB图像。而若相机使用3个CCD/CMOS分别采集RGB分量,则可以直接参照同步信号提取数字图像。无论何种方法,都需要先参照同步信号从视频中提取出图像帧,并最终将图像转换至RGB色彩空间,用于计算机显示。
表31从不同输出类型的相机获取数字图像
信号类型色彩颜色
空间获 取 步 骤
模拟视频黑白灰度(1) 参照同步信号提取图像帧模拟信号;
(2) 采样、量化编码后获得黑白灰度数字图像彩色
YUV(1) 参照同步信号提取图像帧模拟信号;
(2) 采样、量化编码获得YUV色彩空间的数字图像;
(3) 将数字图像从YUV色彩空间转化至RGB色彩空间
YIQ(1) 参照同步信号提取图像帧模拟信号;
(2) 采样、量化编码获得YIQ色彩空间的数字图像;
(3) 将数字图像从YIQ色彩空间转化至RGB色彩空间
数字视频
黑白灰度直接提取各帧黑白数字图像彩色
RGB对于带Bayer滤镜的单CCD/CMOS相机(通常输出RGB raw data):
(1) 参照同步信号提取图像帧数字信号;
(2) 通过插值算法对原始RGB数据解码(参见2.3.2节),以获取完整的RGB彩色数字图像帧。
对于3CCD/CMOS相机,由于其直接输出完整的RGB数据,所以可直接参照同步信号提取数字图像帧
YCbCr(1) 参照同步信号提取图像帧数字信号;
(2) 将其他编码方式的YCbCr数字图像变换至YCbCr444色彩空间;
(3) 将YCbCr444色彩空间的数字图像转换至RGB色彩空间(参见2.3.3节)
在空间坐标上对彩色图像各个分量或灰度图像的离散化抽样称为采样(sampling),对各个抽样点数据的离散化称为量化(quantization)。采样确定了图像的空间分辨率,而量化则确定了图像中像素灰度的分辨率。采样和量化的结果就是在二维空间上将连续的图像沿水平和垂直方向等间距地分割成由离散像素构成的矩阵结构,矩阵中各点的数值就是量化后的灰度值。如果用笛卡儿坐标系来描述图像的数字化,则各采样点可以用坐标系中xy平面上离散点表示,而量化值则可以用xy平面上各采样点对应于z轴上的离散点表示。数字图像中每个像素点的坐标和灰度都可以对应于空间坐标系中的某一点,如图32所示。
图32图像的采样和量化
图像数字化时,采样频率越高(采样点间隔越小,数量越多),采样获得的数据量越大,图像的空间分辨率也就越高。根据采样定理,采样频率必须大于或等于源图像中最高频率分量的两倍,才能恢复图像。为了更精确地恢复图像,实际中一般使用高频率分量的5~10倍作为采样频率。如果采样不足,图像中就会出现颗粒(graininess)现象,极端情况下连是什么物体都很难辨别。量化可以将模拟图像(或某个颜色分量)中连续的灰度值转换为由一组离散数据表示的离散灰度值。当图像的采样点数一定时,可以表示灰度的离散数据个数和范围越大,则图像的颜色和灰度就越丰富、精细。从应用的角度来看,只要水平和垂直方向采样点数足够多,灰度级数足够高,数字图像就可近似地被当作原始模拟图像,当然得到的数字图像容量也较大。对灰度图像来说,可以表示灰度的离散数值个数称为灰度级数,每个数值称为一个灰度级。量化的灰度级数越小,图像的质量就越差。如果是只有0和1两个灰度级的极端情况,图像就变成二值图像。图33显示了使用不同采样频率和量化级时获得的不同数字图像的效果。
图33不同采样率和量化级下的图像效果
图像的采样和量化由图像采集设备完成,它们可按所处理的信号标准不同分为两大类。一类专门对成像设备输出的标准模拟视频信号(如PAL、NTSC、CCIR、RS170/EIA等)或非标准模拟视频进行采集和量化; 另一类设备自身就能完成图像的数字化,它们将信号编码为黑白灰度数字信号或彩色RGB/YCbCr数字视频后,通过USB、IEEE 1394或Camera Link等数字接口传送至计算机。目前,在机器视觉行业中,虽然Camera Link标准的数字图像接口卡正逐步取代其他图像数字化设备,但传统的模拟图像采集卡仍因其低廉的价格和模拟相机的存在而被大量使用。图像采集卡有多种总线形式,如PCI、PCI Express、 PXI、AGP、ISA、PC104Plus、CompactPCI以及VME等。图34给出了一个PCI图像采集卡的硬件示意图。
图34PCI图像采集卡硬件示意图
PCI总线出现之前,各种总线的数据传输速率极低,这使得早期的图像采集卡不得不基于帧存储器来工作。当时,在对图像处理前,先要“冻结”动态图像并将其写入帧存器。在图像处理时,还要将图像再从帧存储器中读出。这使得图像采集和处理的速度极为缓慢,也限制了机器视觉应用的发展。20世纪90年代初,Intel公司提出了PCI(Peripheral Component Interconnect,外设组件互连)局部总线规范。它不仅支持32位或64位的总线带宽,还允许直接或间接连接到总线上的设备快速完成数据交换,从而较好地解决了数据传输的瓶颈问题。PCI总线的速度提升也使得图像采集卡摆脱了帧存储器的工作方式,取而代之的是一个先进先出(FIFO)的缓存器。数字化后的图像只要在缓存器中进行简单的缓存,即可直接快速地传送到计算机内存,供计算机进行进一步处理或显示。这就极大地提高了整个图像处理系统的速度,也带动了机器视觉应用的飞速发展。图35显示了典型PCI图像采集卡的基本逻辑结构。同步分离器用于从输入的视频信号中分离出水平和垂直同步脉冲。如果没有外部同步信号源,则采集卡就会使用分离出的同步脉冲对齐图像中的行(水平同步)和帧(垂直同步)。通常在视频信号与图像采集卡相连接之初,图像采集卡需要3帧图像采集的时间才能达到稳定工作状态。如果有多个相机同步工作,则当一个相机的视频源切换至另一个时,就可造成各相机图像之间的相位差。外同步可以保证所有相机的水平与垂直都是同步的,这就是锁相机制。一些采集卡本身就带有用于锁相的同步信号发生器,通常这些同步信号是TTL电平。可以将该信号作为相机的同步信号源来同步视频信号,详见2.3.4节。应注意,使用采集卡的同步发生器并不表示同步分离器也是由同步发生器直接控制的,事实上同步分离器与同步发生器是相互独立工作的。
图35图像采集卡的基本逻辑结构
一旦采集卡达到行和帧同步的稳定工作状态,就可以对视频信号进行采样和量化,以产生图像像素。根据视频标准,采样/保持单元需要对CCIR标准的视频信号每行抽样767个像素点,对于EIA标准的视频每行需抽样647个像素。如第2章所述,对于CCIR标准的视频信号,需要14.75MHz的像素时钟频率来抽样,而对于EIA相机则需要12.3MHz的像素时钟频率。实际中,采集卡的参数可能与标准值会有些不同,但差别不会太大。另外,只有在采集卡使用相机的像素时钟时,才能够在不产生像素抖动的情况下,精确地将相机传感器芯片的像素映射到采集卡缓存。PCI总线的持续平均数据传输率一般在50~90Mb/s之间,总线上主设备(BUS master device)的突发数据传输速率可以达到132Mb/s。在图像采集过程中,如果PCI总线的传输速度可持续大于图像数字化的速率,图像就可以数据流的方式直接传输到计算机或显示设备。事实上图像对视频信号的数字化总是持续进行的,而PCI总线设备却是以突发的方式向总线传输数据。如果图像数字化的速度较快,就需要使用图像缓存队列缓存那些在相邻突发数据传输间隔时间产生的图像数据,以匹配图像采集和经PCI总线传送的速度。必要时,还要使用更大容量的在板存储器(onboard memory)。一旦图像数据流源源不断地经过总线传送至计算机,就可以将它们抓取到计算机内存中进行处理。并非所有模拟相机都严格输出标准视频信号,有的相机会在视频标准的基础上对像素时钟、触发机制等进一步精细化,有的相机则为了提高精度或输出速率提供多个输出通道。相较于隔行扫描的标准模拟视频,逐行扫描和线阵相机针对运动目标检测应用时更有效。如果要对这些非标准的视频信号进行数字化,相应的图像采集卡也必须能提供一些标准视频以外的特性。不仅如此,为了满足部分机器视觉系统的高要求,一些图像采集卡上还配备图像预处理模块,以减轻计算机的预算负担。使用非标准图像采集卡时,应仔细研究其使用手册。数字视频可通过两大类标准接口传输。一类是与计算机直连式的数字接口,如IEEE 1394、USB、GigE等; 另一类则通常需要接口卡,如LVDS/RS422 、Channel Link、Camera Link等。无论是针对哪种制式的信号,图像采集卡的选择都要与相机综合考虑,此外,虽然直连相机价格较低,但它们常为了减少数据传输量而对信号进行有损压缩。此外,也无法通过计算机发送指令控制其行为。因此大多数对精度和自适应要求较高的机器视觉应用并不选择此类相机。选择图像数字化设备时应注意其支持的接口标准、图像类型、通道数、图像分辨率、帧率、同步和触发以及与计算机的总线接口等。表32列出了一些实际图像采集卡的参数。图像采集卡的接口应与相机视频输出接口匹配,才能正常进行连接。采集卡可支持的分辨率体现其对图像信号采样的密集程度,也决定了所获得数字图像的像素分辨率。图像的帧率与采集卡的采样率反映了采集卡处理图像的速度和能力,模拟视频的帧率为每秒25帧或30帧(帧率单位用fps表示),视所用标准而定。为保证数据完整性,在选择采集设备时,需要保证它的数据采样频率大于或等于相机信号数据输出频率。具体来说,可以按照下面定量的经验公式进行选择: 数字视频采集设备采样率>数码相机的帧率
模拟视频采集设备采样率≥1.2×(分辨率×帧率)
表32图像采集卡参数实例
标识总线输出标准色彩扫描方式面阵/线阵分辨率像素时钟通道帧率
A1PCICCIR/RS170黑白隔行面阵768×576
325/30fps
A2PCI/
PCI ExpressPAL/NTSC/
CCIR/RS170彩色/黑白隔行面阵768×576
225/30fpsA3PCI ExpressCCIR/RS170/
非标准黑白隔行/逐行面阵
65MHz325/30fps
D1PCICamera Link彩色/黑白隔行/逐行面阵/线阵
60MHz
D2PCI/
PCI ExpressCamera Link彩色/黑白隔行/逐行面阵/线阵
85MHz
D3PCICamera Link彩色隔行/逐行线阵
60Hz
除了输出RGB色彩空间的数字图像,有些图像采集设备还可以通过板载转换电路将RGB数字图像转换到HSL、HIS或HSV(又称为HSB)色彩空间再传送到计算机。这些色彩空间是为了按照人类区分颜色的习惯来对其进行量化而创建的。它们通过色调(Hue)、饱和度(Saturation)和光线的亮度(Lightness)、强度(Intensity)或明度(Value/Brightness)构成的三维模型来表示目标的颜色。由于这些色彩空间将图像的色彩信息与表征光线强度的信息进行了分离,所以不稳定光源就不会影响系统对彩色分量的处理结果,因此这些色彩空间特别适合进行色彩匹配的机器视觉系统的开发。若采集卡可以在采集的数字图像输入到计算机前就完成色彩空间转换,那么视觉系统的实时性就可以提高。有关这些色彩空间的使用,本书后续章节将详细讲述。图像采集设备可以使用不同位数的二进制数据来量化图像的像素灰度,如1位、2位、4位、8位、16位、32位等。此二进制数的位数称为位深度。位深度决定了采集到的数字图像的类型,其值越大,说明可以用来表述灰度的离散数据越多。对于灰度图像来说,使用一组离散数据即可表示图像中被量化的像素灰度,而彩色图像则通常需要三组数据来表示像素的RGB或HSL/HSI分量。从图像分析和处理来的角度来看,位深度不仅决定了灰度级的高低,还决定了能在图像上施加的操作。例如,多数图像处理算法只能用于灰度图像,如果要对RGB彩色图像的灰度分量施加这些算法,就需要先将其转换到HSL/HSI色彩空间上,再对L或I分量进行操作。图像采集卡通常可以工作在锁相环(PLL)、XTAL和VScan 3种同步模式下。PLL工作模式下,相机向采集卡提供A/D转换的时钟信号,此时钟信号来自相机输出的视频信号,水平和垂直同步信号可以来自复合视频信号(composite video)、复合同步信号(composite sync)或分离同步信号(separate sync)。在XTAL模式下,图像采集卡给为相机提供时钟信号以及水平和垂直同步信号,并用所提供的时钟信号作为A/D转换的时钟。在XTAL模式下,同步信号仍可使用相机输出的水平和垂直同步脉冲。在VScan工作模式下,采集卡的像素时钟、水平和垂直同步均由相机提供。机器视觉应用中所使用的图像采集卡与多媒体视频捕捉卡在本质上有较大区别,在使用时应加以区分。多媒体视频捕捉卡获取图像的目的是为了进行视频和音频编辑、显示、存储和传输,因此通常用低分辨率图像及压缩技术即可。而用于机器视觉的图像必须尽可能精确地表示检测目标,因而对图像的分辨率要求也较高。从驱动软件的角度看,多媒体图像采集卡多采用现存的标准接口,如MCI或TWAIN,而机器视觉领域的图像采集卡常通过驱动对硬件资源直接存取。3.2NIMAX与相机驱动图像数字化设备完成对图像的数字化后,就将图像以数据流的方式通过总线传送给计算机。随后,在驱动软件的支持下,开发人员就可以从源源不断传来的数据中“抓取”一帧一帧的图像放至事先分配好的内存中,进行与机器视觉相关的分析处理。从软件开发的角度来看,为了能获取图像数据,需要先建立与硬件的连接。这可以通过“打开”并配置图像采集设备来完成。硬件的配置信息可以使驱动软件控制硬件,并正确解析传送至计算机的数据。配置信息通常保存在配置文件中,内容包括获取数据的硬件通道或端口、图像的大小、像素位深度、抓取速率和抓取方式等。它也决定了可以对打开设备所返回图像数据的操作,例如,若打开设备返回的是RGB彩色图像,就不能直接对图像进行某些灰度运算。一旦建立了与硬件的连接,就可以抓取图像数据至事先分配好的图像缓冲区中,使用机器视觉或图像处理分析函数对其进行分析处理。如果不再需要采集图像,就可以释放事先分配的缓冲区,并关闭已经打开的设备。基于LabVIEW开发机器视觉应用时,需要使用NI视觉软件。NI视觉软件包括NI视觉采集软件NI Vision Acquisition Software、NI自动化和测量设备管理器NI Measurement & Automation Explorer(简称NI MAX)、NI视觉开发模块NI Vision Development Module和NI自动检测视觉生成器NI Vision Builder AI。这些软件分别从不同的层面支持机器视觉应用的开发,图36显示了NI视觉软件的逻辑层次结构。NI MAX和NI视觉软件采集软件直接与图像采集硬件设备接口。NI视觉采集软件包括了上千种图像采集设备的驱动,NI MAX则用于配合它对图像采集硬件设备进行配置、诊断和管理。它们共同在图像采集硬件设备与NI视觉高层应用软件NI Vision Development Module和NI Vision Builder AI之间架起了桥梁。NI视觉软件采集软件包括NIIMAQ和NIIMAQdx两部分,开发人员使用它们可以从不同相机获取图像。NIIMAQ主要用于从模拟相机、并行数字相机、Camera Link或NI智能相机采集图像,而NIIMAQdx则主要用于从GigE、IEEE 1394、DirectShow(USB)以及IP(Ethernet)相机采集图像。
图36NI视觉软件的逻辑层次结构
一般在获得图像采集硬件设备后,第一步要做的就是安装NI视觉采集软件和NI MAX,以便图像采集硬件设备可以被驱动和配置、诊断。建议安装软件前,先不要将硬件连接到计算机,否则容易造成在系统中找不到硬件设备的情况。安装完成后,只要将硬件设备连接到计算机,就可以在NI MAX中找到该设备,对其进行配置。在MAX中对图像采集设备的每种不同配置都会与一个独特的名字关联,称为接口。与接口关联的配置信息通常被保存在一个与接口同名、后缀为“.iid”的接口文件(interface file)中。默认情况下,接口文件会以imgn.iid形式来命名,其中n为该采集设备在系统中序号,如img0.iid、img1.iid等。当程序需要从采集设备获取数据时,就可以根据某一接口对应的配置打开设备,建立到设备的连接并获取数据。这种方案不仅允许事先对同一图像采集设备进行多种不同的配置,还方便了应用程序在同种硬件配置环境下的可移植性。实际工作中用到的很多图像采集设备都有不止一个通道,各个通道上连接的相机类型、特性、工作状态和返回的数据格式可能完全不同。那么驱动为什么能保证程序通过同一个采集设备的“接口”,顺利地从各个通道上所连接的不同相机获取图像数据呢?这是因为接口文件除了包含设备的基本配置信息外,还包含了与各通道对应的“相机文件(camera file)”位置信息。“相机文件”也称为界面控制文件(interface control document,后缀名为“.icd”),其中包含的某个型号相机的类型参数规定了NI视觉采集软件如何解析从相机收到的数据。根据所选用的相机不同,它也可能包含控制、操作相机的指令等内容。在NI MAX中对图像采集设备进行配置时,可以从配置树中选择NIIMAQ Devices,并右击要配置的设备的各个通道,选择Camera菜单,为各个通道所连接的不同相机指定具体的相机文件。一旦完成这一步配置,与采集设备关联的接口文件中就会记录各个通道所对应的相机文件保存路径(通常与接口文件放置在同一目录),如图37所示。正是因为可以通过接口文件找到与各个通道所连接相机对应的相机文件,所以驱动才可以正常解析各个通道所返回的数据。
图37接口文件中记录了相机文件的保存路径
只有为各通道所连接的相机选择了与之匹配的相机文件后,才能在NI MAX中对图像采集设备做进一步诊断和配置,如进行自检或设置采集图像的大小、位深度、颜色、亮度、饱和度等。图38显示了相机文件、接口文件和相机之间的关系。若需要使用某个通道上的相机,就可以在LabVIEW程序中为采集设备初始化函数指定相应的接口和通道号,打开设备。通常用InterfaceChannel的形式表示某个采集设备的接口和通道,例如img01就表示系统中第一个采集设备(编号为0)的第2个通道(编号为1)。如果Channel被省略,则代表第一个通道,如“Img1”就代表系统中第二个接口设备的第一个通道。由于接口所对应的接口文件中已经包含了与该通道所关联的特定相机文件的位置信息,因此打开设备的函数就会寻找该特定相机文件,根据其中的配置来建立到采集设备的连接。如果不能找到接口文件中指定的相机文件,则驱动会寻找兼容的通用相机文件。若最终未找到任何可以用于解析数据的相机文件,则驱动会报错。
图38相机与相机文件和接口文件的关系
接口文件和相机文件保存的位置根据所安装的视觉采集软件版本不同而不同: (1) 若安装的是8.2.3版本以前的NI视觉采集软件,则文件保存在下面的文件夹中: \NIIMAQ\Data。(2) 若安装的是8.2.3或之后版本的NI视觉采集软件,则文件保存路径还依赖于操作系统。Windows XP系统保存在文件夹C: \Documents and Settings\All Users\Shared Documents\National Instruments\NIIMAQ\Data中,Windows Vista或Windows 7操作系统则将它们保存在文件夹C: \Users\Public\Public Documents\National Instruments\NIIMAQ\Data中。由于模拟相机一般并不允许通过编程来改变相机的参数,因此常为它们指定支持NTSC、PAL、RS170或者CCIR等视频标准的通用相机文件。并行数字相机和Camera Link相机可以根据发给它们的指令来改变参数,且不同的相机可识别的命令集不同,因此这些相机通常需要特定的相机文件才能正常工作。这些相机文件一般和对应的相机同名,包括制造商和机型编号等,如Dalsa HS80 40 MHz Full Config.icd。IEEE 1394相机和GigE相机通常将所有的相机特定的信息保存在相机内部,因此无须为其指定相机文件。如果安装了视觉采集软件后却找不到某一相机的相机文件,可使用www.ni.com/cameras页面下的Industrial Camera Advisor工具或登录ftp: //ftp.ni.com/support/imaq/camera_support/camera_files查找。如果这些地方仍找不到某一并行数字相机或Camera Link接口相机的相机文件,则可以使用免费的NI相机文件生成器NI Camera File Generator(下载地址http: //sine.ni.com/nips/cds/view/p/lang/en/nid/14207)生成相机文件。NI相机文件生成器也可以用于对相机文件进行更新,图39显示了其工作界面。
图39NI相机文件生成器
值得一提的是,所有在NI MAX中对硬件设备的配置操作都可以利用系统配置API在LabVIEW程序中通过代码实现。系统配置API包含用于保存系统配置和创建系统配置报表的VI和函数以及用于查找系统中设备的VI和函数。该API包含的VI也可在远程系统上发现、配置和安装软件。这意味着程序设计人员可以通过代码对硬件进行自动配置和诊断、检测等,以省去在NI MAX中的手动配置工作。图310显示了LabVIEW中的系统配置API函数,这些函数位于函数选项的Measurement I/O>System Configuration子选项中,相关帮助可以在LabVIEW的安装目录下的help/nisyscfg.chm处找到。
图310系统配置API
3.3IMAQ、IMAQdx与图像采集一旦安装完驱动,并在NI MAX中或使用系统配置函数完成对采集设备的配置后,就可以在程序中通过定义的接口打开设备,建立到设备的连接,并开始采集图像,直到采集任务完成,关闭设备为止。常见的图像采集方式包括Snap、Sequence、Grab、Ring和Event等几种,这些采集方式的工作特点各不相同,可分别用于不同场合。图311显示了几种采集方式的工作示意图。
图311常见图像采集方式
总体来说,各种采集方式可以根据是否连续进行图像采集分为一次性采集(OneShot)和连续采集(Continuous)两大类。Snap和Sequence方式属于OneShot类,它们通常只需要在打开采集设备后,采集一帧或多帧图像到缓冲区即达到目的,随后关闭打开的设备完成采集任务。Grab、Ring和Event方式则属于Continuous类,它们通常要连续采集单帧或多帧图像到缓冲区,并在采集过程中对单帧或多帧图像进行分析处理,直到任务完成为止。相较而言,Continuous类采集更适合对实时性要求较高的场合。Snap方式用于采集一帧图像到内存缓冲区中。每采集一帧图像前,都会打开图像采集设备并对其进行初始化。在获取一帧图像到内存中后,就关闭已经打开的图像采集设备。如果要再采集另一帧图像,就需要重复以上过程。由于抓取每一帧图像时都要打开、关闭图像采集设备,因此Snap方式仅用于对速度要求不高或只需逐帧分析图像的应用。Sequence方式与Snap方式类似,但它每次并不是只采集一帧图像,而是在设备打开并初始化后,连续采集指定数目的多帧图像,并且可以设置跳过某些帧。在完成指定数目的图像帧采集后,图像设备被关闭。由于Sequence方式要连续采集多帧图像,所以需要事先为采集到的图像分配足以存储这些图像序列的内存空间。Sequence方式适合需要对多个连续的图像帧综合分析的应用。Grab方式从速度上对Snap方式进行了优化,它并不在每帧图像采集时都重复地打开或关闭图像采集设备,而是在设备打开后,就一直连续、高速地采集图像,直到需要停止时才关闭图像采集设备。由于Grab方式并不在每帧图像采集时都重复地打开和关闭图像采集设备,因此图像采集的速度相对于Snap方式要快很多。然而,Grab方式通常只在计算机内存中分配一帧图像大小的缓冲区,每次新采集的图像帧总是要循环覆盖缓冲区中保存的前一帧图像数据。因此对于应用程序来说,通常要考虑是使用当前缓冲区中的图像数据,还是要等待全新的一帧图像。Ring方式在Grab方式的基础上优化了缓冲区的管理。首先,缓冲区的大小从一帧图像大小增加到多帧图像大小。其次,在图像采集时,图像数据将按顺序逐帧写入缓冲区,当缓冲区被填满时,又会从缓冲区的起始位置,重新开始循环写入图像数据帧。也可以通过配置使Ring方式采集每帧图像或跳过固定数量的帧。Grab和Ring方式均适用于需要连续、高速采集图像的场合。然而由于Grab方式仅有一帧图像大小的缓冲,因此不仅容易丢失图像帧,而且在需要多次对连续多帧图像进行处理分析的情况下显得捉襟见肘。Ring方式有足够多的帧缓冲,可以极好地替代Grab方式连续对多帧图像进行分析。在前面几种方式中,当某一帧图像采集完成后,驱动程序并不主动通知应用程序,而事件驱动的Event采集方式则可以进行主动通知。这就使得程序不必在图像采集过程中时刻检查图像帧采集是否完成,而只要等到通知事件发生时提取图像帧即可。Event方式可以极大地节省系统资源,提高实时性,然而,并不是所有驱动程序都支持这种采集方式。NIIMAQ和NIIMAQdx是NI提供的图像采集软件,它可以与LabVIEW、LabWindows CVI、Visual C 、Visual Basic等开发工具兼容。使用NIIMAQ和NIIMAQdx提供的函数(图312)可以在这些开发工具中快速实现各种图像采集程序。其中, NIIMAQ主要支持从模拟相机、并行数字相机、Camera Link或NI智能相机采集图像,而NIIMAQdx则主要用于从GigE、IEEE 1394、DirectShow(USB)以及IP(Ethernet)相机获得图像。由于所支持的相机不同,两者也在相机属性设置上稍有差别。除此之外,NIIMAQdx还增加了对Event采集方式的支持。
图312NIIMAQ和NIIMAQdx函数
NIIMAQ和NIIMAQdx提供两种封装级别的函数,一种是高度封装的高层函数,另一种是涉及驱动和采集过程的低层函数。高层函数用于快速构建最基本类型的图像采集程序; 而使用低层函数,则可以创建任何类型的图像采集程序。在需要对缓冲区、图像采集过程或相机进行更精细控制的场合,低层函数尤为适合,但代价是要详细了解相关的API和驱动程序。
图313显示了使用NIIMAQ高层函数实现Snap采集方式的代码。它遵循“初始化设备并分配缓冲区→采集图像→关闭设备并释放缓冲区”的实现过程。IMAQ Init.vi用于打开采集设备并对其进行初始化。它需要图像采集设备的接口和通道信息IF Name作为输入参数。例如,若要使用系统中的第二个图像采集卡的第3个通道,且在NIMAX中配置时均使用默认值,则可以用img12作为IF Name的值。IMAQ Init.vi基于接口文件和相应的相机文件打开设备后,就返回一个到该设备的引用。由于NIIMAQ和IMAQdx会基于该引用实现图像采集或与该接口设备相关的属性访问或操作,因此可以认为该引用代表了到采集设备的连接或会话(session)。
图313使用IMAQ高层函数实现Snap方式图像采集
IMAQ Create函数在内存中为图像采集分配内存缓冲区,IMAQ Dispose则用于释放不再使用的图像缓冲。它们位于LabVIEW的Vision and Motion>Vision Utilities>Image Management函数选项中,可协同工作以实现对图像采集缓冲区的自动管理。在分配缓冲区时,需要为每个缓冲区指定一个独一无二的名字Image Name,并使用图像的类型Image Type信息来确定缓冲区中所存储数字图像的类型。IMAQ Create函数将根据图像的类型信息来确定缓冲区的大小。如果不知道所采集图像的类型,可以参考已建立的“引用”,使用属性结点来获知。关于采集的图像如何在内存中存放,将在第4章进行介绍。图像类型由像素的位深度和编码方式决定。NI Vision不仅可直接支持8位、16位、32位的灰度图像,还支持32位和64位的RGB彩色图像、32位的HSL(色相Hue,饱和度Saturation,亮度Luminance)彩色图像以及复数图像,如表33所示。
表33NI Vision支持的图像类型
图 像 类 型数据类型图例
灰度图像
Grayscale (U8)8位
Unsigned
1B,灰度级: 0(黑)~255(白)可用于8位以下的单色图像
Grayscale (U16)16位
Unsigned
2B,灰度级: 0(黑)~65535(白)
可用于8位到16位的单色图像
Grayscale (I16)16位
Signed
2B,灰度级: -32768(黑)~32767(白)
Grayscale (SGL)32位
Floating
4B,灰度级: -∞ (黑)~ ∞(白)
彩色图像
RGB (U32)32位
Unsigned
RGB
Alpha
Red
GreenBlue
8位Alpha字节常用于进行图像重叠时的透明艺术处理,
在机器视觉应用中基本不用RGB (U64)64位
Unsigned
RGB
AlphaAlpha
RedRed
Green
GreenBlueBlue
16位Alpha字节未使用
HSL (U32)32位
Unsigned
HSL
Alpha
HueSaturationLuminance
8位Alpha节未使用
复数图像Complex (CSG)64位
Complex
主要用于图像的频域处理
高32位为实部(Real),低32位用于虚部(Imaginary)
灰度图像量化级数随着量化后的数据类型位深度而变化。例如,若使用8位无符号整数(U8)对灰度量化,则灰度范围为0~255。其中0代表黑色,255代表白色。如果使用16位的无符号整数(U16),则灰度范围扩展到0~65535。若使用16位带符号整数(I16),则灰度范围改变为-32768~32767。使用整数代表灰度时,灰度级的步长均为1。当然也可以使用32位单精度浮点数(SGL)来表示图像灰度,此时灰度值范围为-∞到 ∞,灰度级的步长也为浮点数。NI Vision支持RGB和HSL两个色彩空间的彩色图像,其中RGB空间可支持32位(U32)、64位(U64)RGB彩色图像,HSL空间可支持32位(U32)HSL彩色图像。在计算机内存中,彩色图像的每个像素都由3个分量和一个在机器视觉系统中不常用的Alpha值构成。例如64位无符号RGB图像的像素分别由闲置的16位Alpha值、代表红色的16位R分量、代表绿色的16位G分量和代表蓝色的16位B分量构成。RGB色彩空间可以极大地简化图像显示设备的设计,因此常用于图像显示。然而,RGB色彩空间能表示的颜色数少于人眼可辨识的颜色,且它必须使用3个颜色分量才能表示一种颜色,不仅不够直观,而且往往增大了彩色图像处理的难度。HSL色彩空间使用色调、饱和度和亮度来表示颜色。色调对应于颜色的波长,也就是说它代表的是人眼所能感知的颜色,如红、黄、紫等。可以想象这些颜色分布在一个平面的色环上,0°~360°中的一个角度代表一种颜色。饱和度与色调中混入白色的多少成反比,100%饱和的颜色中未混入任何白色。亮度用于控制色彩的明暗变化,数值越小,色彩越暗(越接近于黑色); 数值越大,色彩越亮(越接近于白色)。HSL色彩模型如图314所示。HSL的优点在于它易于被人眼辨认,且将色彩与亮度信息完全区分开来,互不干扰。也就是说即使在光线亮度不断变化的情况下,基于它开发的色彩匹配等机器视觉应用也会有很强的鲁棒性。
图314HSL色彩模型(彩图见插页)
HSL色彩空间常用于各种图像处理算法设计,而RGB色彩空间则适用于图像显示。很多机器视觉应用在进行图像处理前都先将RGB图像转换至HSL色彩空间再进行处理,而在HSL色彩空间对图像处理完成后,会再将其转换至RGB色彩空间进行显示。RGB色彩空间到HSL色彩空间的相互转换可以通过以下公式进行: H=2562π×arctan3(G-B)2R-G-B
S=255×(1-3minR,G,BR G B)
L=0.299R 0.587G 0.114BHSL色彩空间到RGB色彩空间的转换可使用以下公式进行: R=rL0.299r 0.587g 0.114b
G=gL0.299r 0.587g 0.114b
B=bL0.299r 0.587g 0.114b其中r、g、b的值可通过以下公式确定: h=H2π256s=S255s′=1-s3
f(h)=1-s cos(h)3cosπ3-h
b=s′r=f(h)g=1-r-b 0h′=h-2π/3r=s′g=f(h′)b=1-r-g 2π/3h′=h-4π/3g=s′b=f(h′)r=1-g-b 4π/3另外,为了便于在频率域对图像进行各种处理,NI Vision还支持64位复数(CSG)图像。对普通灰度图像或彩色图像的某个分量进行FFT操作就可以得到复数图像。复数灰度图像中的每个像素被编码为两个分别代表实部和虚部的32位的单精度浮点数。复数图像不仅便于提取像素的实部、虚部、相位和幅度,还极大地方便了在频率域对图像的各种操作。除了以上支持的图像类型,在实际开发过程中,图像采集设备还经常会采集到其他NI Vision并不直接支持的图像类型。如8位以下的灰度图像、10~16位的灰度图像、不同于32位和64位的RGB图像、从YCbCr视频抓取到的图像以及从带有Bayer滤镜的相机获取的原始数据(Raw Data)的RGB图像等。对于这些图像类型,为了方便后续处理,NI图像采集软件所包含的驱动程序会先将其自动转换为NI Vision支持的格式,再传送给应用程序。这样NI Vision就可以通过直接或间接方式处理几乎所有常见的图像类型。当然,如果不希望驱动程序进行自动转换,则可以直接抓取原始数据,在程序中自行解码或完成各种色彩空间转化。表34显示了NI图像采集软件支持的图像类型及对各种不支持的图像类型进行自动转换的方法。
表34NI图像采集软件对各种图像格式的自动转换
类别视频类型采集到的原始数据NI Vision图像类型
支持的类型灰度
8位无符号灰度图像帧Grayscale (U8)
16位无符号灰度图像帧Grayscale (U16)16位带符号灰度图像帧Grayscale (I16)浮点数灰度图像帧Grayscale (SGL)彩色
32位RGB图像帧RGB (U32)64位RGB图像帧RGB (U64)32位HSL图像帧HSL (U32)复数复数图像Complex (CSG 64Bit)
不支持的类型灰度
1位、2位、4位等低于8位的灰度图像Grayscale (U8)10位~16位的灰度图像Grayscale (I16)YCbCr
从YCbCr 4∶1∶1视频抓取的原始图像帧RGB (U32)从YCbCr 4∶2∶2视频抓取的原始图像帧RGB (U32)从YCbCr 4∶4∶4视频抓取的原始图像帧RGB (U32)RGB
24位RGB图像RGB (U32)30~48位RGB图像RGB (U64)Bayer
从8位Bayer相机提取的原始图像帧RGB (U32)从8~16位Bayer相机提取的原始图像帧RGB (U32)
IMAQ Create的参数Border Size(图像边界大小)用于确定图像缓冲区的大小,参见图315。它是指沿着图像边缘应额外添加的像素行和列宽度。例如,如果图像尺寸为256×256,则当Border Size等于2时,单个图像的缓冲区尺寸就是258×258。 IMAQ Create函数返回一个指向空缓冲区的引用New Image。IMAQ Create函数执行完成之初,其实只是锁定了缓冲区在内存中地址。只有当函数IMAQ Snap.vi运行时,程序才真正综合所采集图像的大小、图像边界大小以及图像类型等信息,锁定缓冲区。此后,程序会从设备抓取一帧图像到缓冲区中供进一步处理。当图像采集和处理任务完成时(不再需要从设备抓取图像,且不需要缓冲区中的图像数据),就可以使用IMAQ Close.vi和IMAQ Dispose关闭图像采集设备并释放图像缓冲区。
图315缓冲区管理函数IMAQ Create和IMAQ Dispose
如果需要,也可以使用低层函数实现Snap方式的图像采集程序。使用低层函数可以在实现所需功能时直接对图像采集过程或缓冲区进行控制,从而赋予程序更强的灵活性。它通常用于以下场合: 需要对图像采集顺序进行定制。 需要对缓冲进行操作,如自行规定环状缓冲等。 需要通过“会话”设置所采集图像的属性,如大小等。 进行同步或异步图像采集等。使用低层函数创建图像采集程序的步骤也遵循“初始化设备并分配缓冲区→采集图像→关闭设备并释放缓冲区”的实现过程,只是相对于使用高层函数来说,它对各个环节的控制更精细。图316显示了使用IMAQ低层函数实现的Snap方式图像采集的程序,同时说明了使用低层函数创建图像采集程序的方法。
图316使用IMAQ低层函数实现Snap方式图像采集
评论
还没有评论。