基于HALCON的双目立体视觉系统实现

双目立体视觉是机器视觉的一种重要形式,它是基于视差原理并由多幅图像获取物体三维几何信息的方法。双目立体视觉系统一般由双摄像机从不同角度同时获得被测物的两幅数字图像,或由单摄像机在不同时刻从不同角度获得被测物的两幅数字图像,并基于视差原理恢复出物体

 

的三维几何信息,重建物体三维轮廓及位置。双目立体视觉系统在机器视觉领域有着广泛的应用前景。

HALCON是在世界范围内广泛使用的机器视觉软件。它拥有满足您各类机器视觉应用需求的完善的开发库。HALCON也包含Blob分析、形态学、模式识别、测量、三维摄像机定标、双目立体视觉等杰出的高级算法。HALCON支持Linux和Windows,并且可以通过C、C++、C#、Visual Basic和Delphi语言访问。另外HALCON与硬件无关,支持大多数图像采集卡及带有DirectShow和IEEE 1394驱动的采集设备,用户可以利用其开放式结构快速开发图像处理和机器视觉应用软件。

一.双目立体视觉相关基本理论介绍

1.1 双目立体视觉原理

双目立体视觉三维测量是基于视差原理,图1所示为简单的平视双目立体成像原理图,两摄像机的投影中心的连线的距离,即基线距为b。摄像机坐标系的原点在摄像机镜头的光心处,坐标系如图1所示。事实上摄像机的成像平面在镜头的光心后,图1中将左右成像平面绘制在镜头的光心前f处,这个虚拟的图像平面坐标系O1uv的u轴和v轴与和摄像机坐标系的x轴和y轴方向一致,这样可以简化计算过程。左右图像坐标系的原点在摄像机光轴与平面的交点O1和O2。空间中某点P在左图像和右图像中相应的坐标分别为P1(u1,v1)和P2(u2,v2)。假定两摄像机的图像在同一个平面上,则点P图像坐标的Y坐标相同,即v1=v2。由三角几何关系得到:

             

上式中(xc,yc,zc)为点P在左摄像机坐标系中的坐标,b为基线距,f为两个摄像机的焦距,(u1,v1)和(u2,v2)分别为点P在左图像和右图像中的坐标。

视差定义为某一点在两幅图像中相应点的位置差:

由此可计算出空间中某点P在左摄像机坐标系中的坐标为:

因此,只要能够找到空间中某点在左右两个摄像机像面上的相应点,并且通过摄像机标定获得摄像机的内外参数,就可以确定这个点的三维坐标。

1.2 双目立体视觉的系统结构以及精度分析

由上述双目视觉系统的基本原理可知,为了获得三维空间中某点的三维坐标,需要在左右两个摄像机像面上都存在该点的相应点。立体视觉系统的一般结构为交叉摆放的两个摄像机从不同角度观测同一被测物体。图2和图3分别为实物图与原理图。这样通过求得两个图像中相应点的图像坐标,便可以由双目立体视觉测量原理求取三维空间坐标。事实上,获取两幅图像也可以由一个摄像机实现,如一个摄像机通过给定方式的运动,在不同位置观测同一个静止的物体,或者通过光学成像方式将两幅图像投影到一个摄像机,都可以满足要求。

各种双目视觉系统结构各有优缺点,这些结构适用于不同的应用场合。对要求大测量范围和较高测量精度的场合,采用基于双摄像机的双目立体视觉系统比较合适;对测量范围要求比较小,对视觉系统体积和质量要求严格,需要高速度实时测量对象,基于光学成像的单摄像机双目立体视觉系统便成为最佳选择。

基于双摄像机的双目立体视觉系统必须安装在一个稳定的平台上,在进行双目视觉系统标定以及应用该系统进行测量时,要确保摄像机的内参(比如焦距)和两个摄像机相对位置关系不能够发生变化,如果任何一项发生变化,则需要重新对双目立体视觉系统进行标定。

视觉系统的安装方法影响测量结果的精度。测量的精度可由下式得出:

上式中⊿z表示测量得出的被测点与立体视觉系统之间距离的精度,z指被测点与立体视觉系统的绝对距离,f指摄像机的焦距,b表示双目立体视觉系统的基线距,⊿d表示被测点视差精度。

为了得到更高的精度,应该使摄像机的焦距以及基线长度增大,同时应该使被测物体尽可能的靠近立体视觉系统。另外这个精度和视差的精度有直接的关系。在HALCON中一般情况下视差结果可以精确到1/5~1/10个像素,如果一个像素代表7.4μm那么视差的精度可以达到1μm。图4表示深度测量的精度和各个参数之间的关系(假设视差精度为1μm)。

如果b和z之间的比值过大,立体图像对之间的交迭区域将非常小,这样就不能够得到足够的物体表面信息。b/z可以取的最大值取决于物体的表面特征。一般情况下,如果物体高度变化不明显,b/z可以取的大一些;如果物体表面高度变化明显,则b/z的值要小一些。无论在任何情况下,要确保立体图像对之间的交迭区域足够大并且两个摄像机应该大约对齐,也就是说每个摄像机绕光轴旋转的角度不能太大。

1.3 双目立体视觉系统标定

摄像机内参数的标定和单目视觉系统标定一致,双目立体视觉系统的标定主要是指摄像机的内部参数标定后确定视觉系统的结构参数R和T(即两个摄像机之间的位置关系,R和T分别为旋转矩阵和平移向量)。一般方法是采用标准的2D或3D精密靶标,通过摄像机图像坐标与三维世界坐标的对应关系求得这些参数。具体的标定过程【3】如下:

1、将标定板放置在一个适当的位置,使它能够在两个摄像机中均可以完全成像。通过标定确定两个摄像机的内部参数以及他们的外部参数(R1、T1与R2、T2),则R1、T1表示左摄像机与世界坐标系的相对位置,R2、T2表示右摄像机与世界坐标系的相对位置。

2、假定空间中任意一点在世界坐标系、左摄像机坐标系和右摄像机坐标系下的非齐次坐标分别为xw、x1、x2,则:

消去xw,得到:

两个摄像机之间的位置关系R、T可以用以下关系式表示:

1.4 双目立体视觉中的对应点匹配

由双目立体视觉系统原理可以看出双目立体视觉是建立在对应点的视差基础之上,因此左右图像中各点的匹配关系成为双目立体视觉技术的一个极其重要的问题。然而,对于实际的立体图像对,求解对应问题极富挑战性,可以说是双目立体视觉中最困难的一步。为了能够增加匹配结果的准确性以及匹配算法的速度,在匹配过程中通常会加入下列几种约束:

(1) 极线约束。在此约束下,匹配点已经位于两副图像中相应的极线上。

(2) 唯一性约束。两副图像中的对应的匹配点应该有且仅有一个。

(3) 视差连续性约束。除了遮挡区域和视差不连续区域外,视差的变化都是平滑的。

(4) 顺序一致性约束。位于一副图像极线上的系列点,在另一幅图像中极线上有相同的顺序。

图像匹配的方法有基于图像灰度(区域)的匹配、基于图像特征的匹配和基于解释的匹配或者多种方法结合的匹配【3】。

二.使用HALCON进行双目立体视觉测量

本节以电路板高度测量为例,讲述在HALCON中如何方便快捷地实现高效双目立体视觉测量(图像为640*480)。

2.1 双目立体视觉系统安装

根据1.2节中对双目立体视觉系统结构分析以及精度的分析,在确保两个立体图像对有足够大的交迭区域的同时,根据待测物体表面形态以及精度要求设计合理的双目立体视觉系统安装方案(图2)。然后将双目立体视觉系统安装在一个稳定的平台上,确保开始标定后,摄像机的焦距以及摄像机的相对关系都不发生变化。

2.2 双目立体视觉系统标定

为了进行视觉系统的标定,需要得到空间点的三维坐标以及该点在左右两幅图像中坐标的对应关系,另外还需要给定两个摄像机的初始参数。拍摄标定板图像时,要保证标定板在左右两个摄像机中都能够完整成像。

如果使用HALCON标准标定板,首先可以通过函数find_caltab()在标定板图像中分离出标定板区域,然后利用find_marks_and_pose()算子,该算子通过亚象素阈值、亚象素边缘提取、圆心确定等一系列操作计算标定板上每个点的图像坐标以及标定板与摄像机之间大约的位置关系,即摄像机的外参初始值。其中使用find_caltab()分离标定板区域运算时间大约为5ms,find_marks_and_pose()计算标定板上49个标志点的坐标大约需要时间为40ms,计算坐标精度为亚象素级,如某标志点在左摄像机图像坐标系中坐标为(198.612619165, 344.142354438),右摄像机图像坐标系中相应点坐标为(212.140195587, 226.377754012)。

如果使用自定义的标定板,可以使用HALCON中的图像滤波、亚象素边缘及线提取、亚象素轮廓处理等基本函数开发算法求取标志点的坐标并估算摄像机的外参初始值。

获得标志点相应的坐标以及摄像机的起始参数后,通过调用函数binocular_calibration()来确定两个摄像机的内参数、外参数以及两个摄像机之间的相对位置关系。通过539个标志点坐标的对应关系计算出摄像机各个参数需要的时间为1.6094s,计算误差约为0.02个象素。

2.3 校正立体图像对

为了能够更精确地进行匹配,提高运算的效率,在获得摄像机的内外参数后首先对立体图像对进行校正。校正的过程其实就是将图像投影到一个公共的图像平面上,这个公共的图像平面方向由双目立体视觉系统基线与原始两个图像平面交线的叉集确定。

校正后的图像可以看作是一个虚拟的立体视觉系统(图5)采集的图像对。这个视觉系统中摄像机的光心与实际摄像机一致,只是通过绕光心的旋转使光轴平行,并且视觉系统中两个摄像机的焦距相同。这个虚拟的立体视觉系统就是双目立体视觉原理中提到的最简单的平视双目视觉模型。

HALCON中将标定过程中获得的摄像机的内参以及两个摄像机相对位置关系作为参数传递给函数gen_binocular_rectification_map(),再将获得的两个图像的映射图传递给函数map_ image(),即可得到校正后的两幅图像,并可获得校正后虚拟立体视觉系统中两个摄像机的内参和外参。其中函数gen_binocular_rectification_map()耗时约为0.3488s,map_image()耗时约为0.0050s。

2.4 获得图像中三维信息

为了得到图像中某点的三维信息,需要在另一幅图像中找到该点的对应点坐标。因此想获得物体的深度信息,首先需要对校正后的立体图像对进行匹配。由于经过校正后,两幅图像中的对应点在图像的同一行中,因此在匹配时只需要在相应的行中寻找匹配点。为了得到更佳的匹配结果,如果被测物体表面没有明显的特征信息,则需要测量时在物体表面增加特征点。另外要避免被测物体上重复图案在同一行中。

将校正后的图像以及虚拟立体视觉系统中的摄像机内外参数传递给binocular_disparity(), 这时可以设置匹配窗大小、相似度计算方式等参数,在匹配中使用图像金字塔提高匹配速度,并且可以自我检测匹配结果的正确性。函数返回一个视差图 (物体表面三维信息的表示)和一个匹配分值图(表示匹配结果的准确程度),函数的运行时间约为0.6051s。

函数binocular_distance()与binocular_disparity()类似,只不过返回一个深度图(物体表面在第一个摄像机坐标系中的深度信息)和一个匹配分值图。图6~图9显示了HALCON中利用双目立体视觉测量电路板三维信息的过程。

HALCON中另外还有很多关于立体视觉的函数,可以获得图像中某点的三维坐标,另外可以校正倾斜对高度测量的影响等。

三. 总结

以视觉系统为基础的三维外形轮廓的非接触式、高速测量是一个重要的研究方向,双目立体视觉方法是其中一种最常用的方法。本文介绍了双目立体视觉的基本原理,实现方法以及标定和匹配等相关技术,并通过一个典型应用案例讲述了如何使用HALCON方便快速地搭建高效的双目立体视觉系统。双目立体视觉系统的应用领域非常广泛,为了能够将这些技术应用在实际的工程中,需要尽可能提高算法的效率与精度。在HALCON中通过校正立体视觉系统的方法,简化了匹配的复杂度,通过使用图像金字塔以及各种约束提高了算法速度和精度。在已知摄像机内外参的情况下,由两个立体图像对中恢复三维模型需要约1.3s。

另外,HALCON中不仅有匹配、识别、定位、测量和三维等性能杰出的高级算法,还提供了一系列(的)高效的图像处理基本函数,如滤波、亚象素边缘、亚象素轮廓、Blob、分割、形态学、分类器、几何变换,用户可以通过这些基本函数来搭建各种应用中高效实用的算法。

时间: 2024-08-01 14:10:59

基于HALCON的双目立体视觉系统实现的相关文章

双目立体视觉

双目立体视觉(Binocular Stereo Vision)是机器视觉的一种重要形式,它是基于视差原理并利用成像设备从不同的位置获取被测物体的两幅图像,通过计算图像对应点间的位置偏差,来获取物体三维几何信息的方法.融合两只眼睛获得的图像并观察它们之间的差别,使我们可以获得明显的深度感,建立特征间的对应关系,将同一空间物理点在不同图像中的映像点对应起来,这个差别,我们称作视差(Disparity)图像.[1] 双目立体视觉测量方法具有效率高.精度合适.系统结构简单.成本低等优点,非常适合于制造现

基于HALCON的模板匹配方法总结 (转)

很早就想总结一下前段时间学习HALCON的心得,但由于其他的事情总是抽不出时间.去年有过一段时间的集中学习,做了许多的练习和实验,并对基于HDevelop的形状匹配算法的参数优化进行了研究,写了一篇<基于HDevelop的形状匹配算法参数的优化研究>文章,总结了在形状匹配过程中哪些参数影响到模板的搜索和匹配,又如何来协调这些参数来加快匹配过程,提高匹配的精度,这篇paper放到了中国论文在线了,需要可以去下载. 德国MVTec公司开发的HALCON机器视觉开发软件,提供了许多的功能,在这里我主

基于Cobbler实现多版本系统批量部署

前言 运维自动化在生产环境中占据着举足轻重的地位,尤其是面对几百台,几千台甚至几万台的服务器时,仅仅是安装操作系统,如果不通过自动化来完成,根本是不可想象的.记得前面我们探究了基于PXE实现系统全自动安装,但PXE同时只能提供单一操作系统的批量部署,面对生产环境中不同服务器的需求,该如何实现批量部署多版本的操作系统呢?Cobbler便可以的满足这一实际需求,本文带来的是基于Cobbler实现多版本操作系统批量部署. Cobbler 简介 Cobbler是一款自动化操作系统部署的实现工具,由Pyt

RDIFramework.NET — 基于.NET的快速信息化系统开发框架 — 系列目录

RDIFramework.NET - 基于.NET的快速信息化系统开发框架 - 系列目录 RDIFramework.NET,基于.NET的快速信息化系统开发.整合框架,给用户和开发者最佳的.Net框架部署方案.  框架简单介绍 RDIFramework.NET,基于.NET的快速信息化系统开发.整合框架,为企业或个人在.NET环境下快速开发系统提供了强大的支持,开发人员不需要开发系统的基础功能和公共模块,框架自身提供了强大的函数库和开发包,开发人员只须集中精力专注于业务部分的开发,因此大大提高开

基于cobbler实现自动化安装系统

基于cobbler实现自动化安装系统 环境介绍 centos6.8 为centos6.8提供两块网卡 (非必要) 一块为桥接,方便xshell连接和测试 一块为vmnet3:用来搭建dhcp,tftp,和为客户端提供cobbler服务 前提,(确保安装TFTP,dhcp,rsync) # yum install httpd cobbler cobbler-web pykickstart debmirror 1.启动对应的服务 # service httpd start # service cob

Android弹幕实现:基于B站弹幕开源系统(4)-重构

?? Android弹幕实现:基于B站弹幕开源系统(4)-重构 弹幕在视频播放的APP中比较常见,但是逻辑比较复杂,现在在附录1,2,3的基础上,我再次对弹幕进行抽象和重构,把弹幕从底向上抽象成不同的层,便于复用. 第一步,抽象数据层.通常弹幕的来源是来源于后台的数据接口请求,在实时直播时候,是通过网络的轮询机制获取数据,那么,我把这部分代码抽出来设计成一个MGDanmakuHttpController,该类专注于数据的获取与分发: package zhangphil.danmaku; impo

Android弹幕实现:基于B站弹幕开源系统(1)

?? Android弹幕实现:基于B站弹幕开源系统(1) 如今的视频播放,流行在视频上飘弹幕.这里面做的相对比较成熟.稳定.使用量较多的弹幕系统,当推B站的弹幕系统,B站的弹幕系统已经作为开源项目在github上,其项目地址:https://github.com/Bilibili/DanmakuFlameMaster 以B站开源的弹幕项目为基础,现给出一个简单的例子,实现发送简单的文本弹幕.第一步,首先要在Android的build.gradle文件中引入B站的项目: repositories

基于Jenkins的自动构建系统开发_android总结

持续集成相关理论 1.1 极限编程的概述 1.1.1 极限编程的产生 2001年,为了解决许多公司的软件团队陷入不断增长的过程泥潭,一批业界专家一起概括出了一些可以让软件开发团队具有快速工作.响应变化能力的价值观和原则,他们称自己为敏捷联盟.敏捷开发过程的方法很多,主要有:SCRUM,Crystal,特征驱动软件开发(Feature Driven Development,简称FDD),自适应软件开发(Adaptive Software Development,简称ASD),以及最重要的极限编程(

Android弹幕实现:基于B站弹幕开源系统(2)

?? Android弹幕实现:基于B站弹幕开源系统(2) 在附录1的基础上,模拟实现一种实际开发的应用场景:从网络中不间断的周期取弹幕数据,这些弹幕数据往往是批量的,然后把这些从网络中取到的批量数据逐个的显示出来.注意本例中的Handler和线程安全队列ConcurrentLinkedQueue的使用.Java代码: package zhangphil.danmaku; import android.app.Activity; import android.graphics.Color; imp