大幅面多相机高精度定位及测量解决方案

  随着机器视觉应用的日益广泛,大幅面多相机视觉系统的需求越来越多,主要应用方向为大幅面高精度的定位与测量和场景拼接等。多相机视觉系统的难点在于多相机坐标系的统一,可以分为两类,一是相机视野间无重叠部分,二是相机视野间有重叠部分。相机间无重叠部分的情况主要用于大幅面多相机高精度的定位和测量,相机间有重叠部分的情况主要用于场景的拼接等。       

使用大标定板统一坐标的方法

方案简介:

  此方法采用一块大标定板来统一各个相机的坐标,每个大标定板中有若干小标定板,各个小标定板间的位置关系都是已知的,各个相机都能拍摄到一个小标定板。通过各个小标定板可以标定每个相机的内部参数和外部参数,每个相机的坐标都可以转换到各个小标定板的坐标系上,从而统一各个相机的坐标。

系统结构:

常用的标定板形式:

上图所示为单个标定板图像,大标定板由若干单个标定板组成,标定板的大小和数量根据实际测量情况而定。

多个标定板组合示意图:

案例分析:


(1)检测目标分析

测量产品需要若干个测量指标。如下图所示。

(2)图像获取

采用4只相机来完成所有项目的测量,分别拍到的照片如下图所示。

(3)检测流程

先分别利用每张图的两条垂直边计算出它们的交点,那么得到的4个交点就可以算出L1和L2的值,如下图所示。


利用4个边角图来测量4个角的L3,如下图所示,这里可以选择测量多个点,也可以取它们的平均值。

注意事项:

  此种方法需要将多只相机的坐标统一到一个坐标系中,并且单一相机还要做自己的校准,保证精度。

根据检测要求,设置取多少个点作为参考,但是这影响测试的时间,需酌情考虑。

 应用领域:

手机和平板电脑面板尺寸的检测。


相对运动统一坐标的方法

方案简介:

  此方法采用相机和被测物之间的相对运动来统一相机的坐标,相机和被测物只要一方运动即可,记录各个位置的坐标,然后通过数学运算来统一坐标。通常情况下是相机位置固定,被测物通过机械手等运动装置进行移动,然后把相机坐标系统一到机械手等运动装置的原点。

总体结构:

方法介绍:

   通过相机拍摄的图像对mark点进行定位,从而计算出被测物相对于标准位置的偏差,包含角度偏差和位移偏差,最终确定机械装置需要旋转的角度和平移的距离。选用手机触摸屏和手机外壳的定位系统来介绍算法原理。
  手机触摸屏和手机外壳的定位系统,使用多支相机代替一支相机的方法进行定位,使手机触摸屏和手机外壳精确组装。相机分为两组,每组两支相机,一组拍摄手机外壳(组1),一组拍摄触摸屏(组2),两组相机标定方法相同,下面只介绍拍摄手机外壳的两支相机的标定。相机固定,机械手吸住手机外壳移动,两支相机分别拍摄手机外壳的两个定位孔,使用模板匹配的方法对两个定位孔进行识别,如下图所示:

(1)通过机械手的移动获取标定所用坐标

  组1相机1: 把mark点移动到相机视野中,定相机的初始位置,得到初始mark点的中心坐标Point11(cRow11, cColumn11),机械手沿X方向移动一定距离(5mm)后得到mark点的中心坐标Point12 (cRow12, cColumn12),机械手沿Y方向移动一定距离(6mm)后得到mark点的中心坐标Point13(cRow13, cColumn13),同时可以得到在上述三个位置机械手的空间坐标Robot11(X1[0],Y1[0])、 Robot12(X1[1],Y1[1]) 、Robot13(X1[2],Y1[2])。
  组1相机2: 同上,把相同mark点移动到相机视野中,通过相同的操作得到坐标:Point21 (cRow21, cColumn21)、Point22 (cRow22, cColumn22)、Point23 (cRow23, cColumn23)、Robot21 (X2[0],Y2[0])、 Robot22(X2[1],Y2[2])、Robot23(X2[2],Y2[2])。

(2) 图像距离和实际距离之间转换比例关系的确定:

  通过数学运算可计算得到比例关系。

(3) 标准线斜率求取:

  需要在两个相机的视野中各选取一点作为标准线的起始点和终点,然后求取此标准线在机械手坐标系中的斜率。调整机械手到合适位置,确定此处为标准位置,此时组1的两支相机分别拍摄初始位置的两个不同的mark点的图像。通过模板匹配方法找到两个相机初始位置视野中两个mark点的中心坐标Point10(Row10,Column10)和Point20(Row20,Column20),Point10和Point20确定为标准线的起始点和终点。求取Point10在机械手中的坐标如图6所示,下图中XOY是机械手坐标系,X1O1Y1是组1相机1的图像坐标。

  通过点到直线的距离运算可以得到d14,d15和d16的实际长度,由于在移动过程中使用的是同一个mark点,d1,d2,d3在相机1和相机2的视野中的值是一样的。从而可以得到Point10在机械手坐标系中的实际坐标为:
  Point10X=X1[1]+d16+d2,Point10Y=Y1[1]+(d1-d15)。
  同样可以得到Point20在机械手坐标系中的实际坐标:
  Point20X=X2[1]+d26+d2,Point20Y=Y2[1]+(d1-d25)。
  求取该标准线斜率;
  K=(Point20Y-Point10Y)/(Ponit20X-Point20Y)=(Y2[1]-Y1[1]-d25+d15)/(X2[1]-X1[1]+d26-d16)
  之后在每次定位时需要和此标准线的斜率进行比较,从而得到和标准线的夹角,最后进行旋转校正。
注意:由于Point10和Point20会落在不同的位置,在计算Point10和Point20的实际坐标时上述公式会有所变化,但原理相同。

(1) 旋转中心的确定

  依据三个点就可以确定一个圆的原理,让机械手在初始位置旋转三次,得到Robot31,Robot32和Robot33三个相对于机械手坐标系的坐标点,三个点的坐标就可以求出旋转圆心的坐标。

定位校准

   以后在每次进行检测时,得到的结果都和标准线进行比较,可以得到和标准线的夹角和相对于标准位置的位置偏差,根据得到的角度和位置偏差进行校正。在校正过程中需要先旋转后平移,做一个闭环反馈系统实时校正。

应用领域:

手机或平板电脑触摸屏和外壳的装配定位。

标定方法拼接图像

方案简介:

  对于有些大幅面物体 ,可以通过拍摄多幅图像,每幅图像覆盖物体的不同的部分。如果摄像机经过标定并且它们与一个共有的世界坐标系之间的相对关系已知,就可以通过不同的图像进行精确测量。
  甚至可以将多幅图像拼接为一副覆盖整个物体的大图,这个可以通过将每幅图像都校正到同一个测量平面上实现。在结果图像上,可以直接在世界坐标系中进行测量。

图像拼接示意图:

安装:

  两个摄像机或多个摄像机必须安装在一个稳定的平台上,并且每幅图像覆盖整个场景的一部分。摄像机的方位可以随意,也就是说不需要它们看起来平行或垂直于物体表面。调整摄像机焦距、灯光以及交迭区域,使用一个大的可以覆盖整个视野的参照物。为了保证可以将多幅图像拼接为一副大图,它们之间必须存在一个小的交迭区域。交迭区域可以很小,因为这个交迭区域只是为了保证在拼接的结果图像中没有缝隙,下图为交叠区域示意图。

标定:

图像的标定可以分为两个步骤。

确定每个摄像机的内参。可以分别对每个摄像机进行标定求取摄像机的内参。

  确定所有摄像机的外参。因为最后要将所有的图像转换到某一个世界坐标系中,所以需要使用一个大的标定物,这个标定物可以出现在所有的图像中,它可以由多个标定板组合而成,标定板的数量和使用摄像机的数量一致。下图为两个相机分别拍摄到的标定图像。

 

注意:为了确定摄像机的外参,每个摄像机只需要拍摄一副标定图像就已经足够。标定物在多个摄像机分别进行拍摄标定图像的过程中不可以移动。理想情况下,这些标定图像应该同时获取。

将单个图像拼接为一个大图:

  首先,每幅图像都必须进行校正,将这些图像转换到一个共有的坐标系中,它们之间就会正确匹配。在得到所有进行校正图像需要的映射图后,使用两个摄像机拍摄的每个图像对都可以进行校正并且高效的拼接。拼接的结果图由两幅校正后的图像组成,每个校正后的图像占图像的一个部分,下图为校正后的图像和拼接结果。

应用领域:

液晶面板表面质量的检测

非标定方法拼接图像

简介:

  此种方法和前三种方法相比精度较低,适用于不需要实现高精度拼接的应用场合。这种拼接方法的优点是不需要进行摄像机标定,并且每幅单独的图像可以自动进行排列。
拍摄单幅图像规则:

在拍摄每幅图像时需要遵循下面这些规则:

(1)相邻的图像之间必须有交迭

(2)图像之间的交迭区域必须有比较明显的特征,这样就可以保证比较精确的自动匹配过程。如果在某些交迭区域内的特征不明显那么可以通过定义合适的图像对来克服。如果整个物体的特征都不是特别明显,那么交迭区域就应该更大一些。

(3)交迭的图像的缩放比例必须大约相等。一般情况下,缩放比例的不同不能超过 5-10%

(4)这些图像的亮度应该相似,至少在交迭区域部分的亮度相似。否则,如果亮度区别非常明显的话,图像之间的接缝在结果图像中就非常明显,如下图所示。

定义交叠图像对:

需要定义一些交迭图像对,通过匹配确定这些图像对之间的转换关系。匹配的过程只会应用在这些交迭图像对上。

  如果需要拼接的图像比较多,或者交迭图像每行图像比较多,此时合理彻底地安排图像对的配置十分重要。否则就可能有些图像不能实现精确匹配。这主要是因为噪声造成点坐标的一些误差导致不能准确计算图像之间的转换关系,这些误差会由一个图像传到下一幅图像上。
提取图像中的特征点:
  提取出的特征点的数量影响运行时间以及匹配的结果。特征点的数量越多,匹配的过程就越慢。但是太少的特征点将增大产生错误结果的可能性。

在交迭的区域中匹配特征点并且确定图像之间转换关系:

  在进行图像拼接过程中最重要的任务就是图像对之间的匹配过程。匹配的图像对可以有任意的平移和旋转,唯一的要求就是图像应该有大约相同的缩放比例。如果图像之间平移和旋转的信息可用,它就可以用来限定寻找区域,这样就可以加速匹配过程并且使算法更加健壮。匹配特征点过程如下图所示。

生成拼接图像

知道了图像对之间的转换关系,就可以调用函数进行图像拼接,下图为拼接好的图像。

注意:

  需要注意球面拼接的情况,上述方法只适用于摄像机绕光心旋转或缩放。如果摄像机的移动包含平移或不是严格绕光心的旋转,使用这种方法得到的拼接结果将不准确也就不能够用在精确测量的场合。
应用领域:

(1)街景的拼接。

(2)电子地图的制作。

(3)医学影像的拼接















本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/255083.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hadoop 使用FileSystem API 读取数据

代码: package com.hadoop;import java.io.IOException; import java.io.InputStream; import java.net.URI;import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.…

庖丁解牛TLD(一)——开篇

最近在网上多次看到有关Zdenek Kalal的TLD的文章,说他做的工作如何的帅,看了一下TLD的视频,感觉确实做的很好,有人夸张的说他这个系统可以和Kniect媲美,我倒是两者的工作可比性不大,实现的方法也不同。但这…

服务器性能测试

浅谈服务器性能测试的全生命周期——从测试、结果分析到优化策略 原创 2016-06-16 Micheal 腾讯WeTest测试开发者的共同关注!作者:Micheal,腾讯资深后台开发工程师。WeTest导读 服务器性能测试是一项非常重要而且必要的工作,本文是…

庖丁解牛TLD(三)——算法初始化

上一讲我提到对于算法的初始化工作主要是在tldInit这个函数里实现的。主要分为如下几大步骤,1)初始化Detector。2)初始化Trajectory。3)训练Detector 1)初始化Detector 其中bb_scan为扫描grid区域,该函数输入为boundin…

在未启动程序情况 点击视图设计器 弹出未将对象引用窗体的解决方案

请问下 在未运行程序情况 点击视图设计器 弹出未将对象引用窗体 解决方案:1.看后台进程是不是相关的进程在启动,如果有关闭进程;重启vs,即可2.重启电脑转载于:https://www.cnblogs.com/yang12311/p/5593838.html

ASP站点无法访问怎么办

确保启用了目录浏览功能 转载于:https://www.cnblogs.com/acetaohai123/p/6571257.html

五、案例-指令参考-freemarker指令、表达式

案例-指令参考描述&#xff1a;本人自己测试写了一遍&#xff0c;如有错的地方&#xff0c;懂freemarker的朋友望指点指点&#xff01; 案例-指令参考 表达式 一、 Assign 1、<#assign name1"北京" name2"上海" name3"广东"> 调用&#xf…

PartitionMotionSearch()函数

encode_one_macroblock()函数中的运动估计分为两大块&#xff0c;对于宏块级的三种模式&#xff0c;分块后直接对patition依次调用PartitionMotionSearch()函数&#xff1b;而对于亚宏块级的&#xff08;含8x8, 8x4,4x8,4x4&#xff09;模式&#xff0c;首先将宏块拆分为4个88子…

201521123017 《Java程序设计》第4周学习总结

1. 本周学习总结 2. 书面作业 Q1.注释的应用 使用类的注释与方法的注释为前面编写的类与方法进行注释&#xff0c;并在Eclipse中查看。(截图) Q2.面向对象设计(大作业1&#xff0c;非常重要) 2.1 将在网上商城购物或者在班级博客进行学习这一过程&#xff0c;描述成一个故事。…

本文以H264视频流为例,讲解解码流数据的步骤。

本文以H264视频流为例&#xff0c;讲解解码流数据的步骤。 为突出重点&#xff0c;本文只专注于讨论解码视频流数据&#xff0c;不涉及其它&#xff08;如开发环境的配置等&#xff09;。如果您需要这方面的信息&#xff0c;请和我联系。 准备变量 定义AVCodecContext。如…

2008-2021年商业银行数据(农商行、城商行、国有行、股份制银行)

2008-2021年商业银行数据&#xff08;农商行、城商行、国有行、股份制银行&#xff09; 1、时间&#xff1a;2008-2021年 2、范围&#xff1a;1700银行 3 、指标&#xff1a;证券简称、year、证券代码、资产总计、负债合计、所有者权益合计、利润总额、净利润、贷款总额、存…

异常--自定义异常类

为什么要调用父类构造器? http://blog.csdn.net/rockpk008/article/details/52951856 转载于:https://www.cnblogs.com/dwj-ngu/p/6576382.html

EtherCAT 网站链接

http://www.ethercat.org.cn/cn.htm EtherCAT技术介绍 EtherCAT系统组成和工作原理 EtherCAT采用主从式结构&#xff0c;主站PC机采用标准的100Base-TX以太网卡&#xff0c;从站采用专用芯片。系统控制周期由主站发起&#xff0c;主站发出下行电报&#xff0c;电报的最大有效数…

IEC 6-1131/3的5种标准编程语言

用于开发控制系统和商业管理系统的TRACE MODE6编程工具面向不同领域的软件工程师. TRACE MODE6包含的五种编程语言为&#xff1a;Techno SFC、Techno LD、Techno FBD、Techno ST和Techno IL. 这些语言是下列IEC 6-1131/3标准语言的扩展&#xff1a; SFC&#xff08;顺序功能图…

NoPause/NoEmgAbort的任务 与后台任务的区别

NoPause/NoEmgAbort的任务示例 下面的例子显示了一个程序&#xff0c;可以监视控制器的错误并根据错误编号在发生错误时切换I/O On/Off。 Function main Xqt ErrorMonitor, NoEmgAbort : FendFunction ErrorMonitor Wait ErrorOnIf 4000 < SysErr And Syserr < 5999 T…

30分钟搞定后台登录界面(103个后台PSD源文件、素材网站)(转)

出处&#xff1a;http://www.cnblogs.com/best/p/6582294.html 目录 一、界面预览二、PSD源文件预览三、工具分享四、资源说明五、素材下载网站六、下载去年八月时要做一个OA系统为了后台界面而烦恼&#xff0c;后来写了一篇博客&#xff08;《后台管理UI的选择》&#xff09;介…

FFMpeg中apiexample.c例子分析——解码分析

FFMpeg中apiexample.c例子分析——解码分析 收藏 我们直接从 video_decode_example() 函数开始讲&#xff0c;该函数实现了如何去解码一个视频文件&#xff0c;以 .mpeg 文 件为例。 &#xff08; 1 &#xff09;将缓存的末尾清 0 &#xff0c;从而确保读操作不会越界导致破…

FFMpeg中apiexample.c例子分析——编码分析

FFMpeg中apiexample.c例子分析——编码分析apiexample.c例子教我们如何去利用ffmpeg库中的api函数来自己编写编解码程序。 &#xff08;1&#xff09;首先&#xff0c;main函数中一开始会去调用avcodec_init()函数&#xff0c;该函数的作用是初始化libavcodec&#xff0c;而我们…

Access2010打开系统表MSysObjects的控制权限

一、显示系统表 第一步&#xff1a;单击左上角【文件】页签&#xff0c;点击【选项】打开选项对话框&#xff0c;如图所示 第二步&#xff1a;在【Access选项】对话框中&#xff0c;选择【当前数据库】&#xff0c;在【导航】栏下&#xff0c;点击【导航选项】打开【导航选项】…

与 OpenCV 1 同时使用

与 OpenCV 1 同时使用 目的 对于OpenCV的开发团队来说&#xff0c;持续稳定地提高代码库非常重要。我们一直在思考如何在使其易用的同时保持灵活性。新的C接口即为此而来。尽管如此&#xff0c;向下兼容仍然十分重要。我们并不想打断你基于早期OpenCV库的开发。因此&am…