当前位置: 首页>行业 >

OpenCV之摄像机标定

来源: QT教程 | 时间: 2023-04-20 22:20:07 |

最近方向定下来是双目立体视觉,主要是做重建这块的研究。大致过程是图像获取->摄像机标定->特征提取->匹配->三维重建,当然开始可以进行图像预处理,矫正,后期可以进行点云的进一步处理,如渲染表面使其更接近于现实物体。


(资料图)

图像获取相对来说比较简单,用相机拍摄目标物(大型场景或特定小型的室内物体)。但有两点需要注意:

1、双目重建所需的图像一般为两张,角度相差不应过大,否则公共部分太少以至于重建效果不佳;整个过程简便,成本也不高,但缺陷是只有两张图像的点云所表示的物体信息不会很全面;

2、标定所需的图像又是另外拍摄的,用张正友标定法的话,把印有黑白棋盘格的图像粘至硬纸板上,然后左右摄像机各自进行拍摄,理论上获得角度(图像)越多,最终标定结果越精确;标定板见下图:

这里主要结合OpenCV对左右摄像机标定做一个简单的介绍,望朋友们指正,一起交流、进步。

摄像机的标定问题是机器视觉领域的入门问题,可以分为传统的摄像机定标方法和摄像机自定标方法。定标的方法有很多中常见的有:Tsai(传统)和张正友(介于传统和自定标)等,

摄像机成像模型和四个坐标系(通用原理)。

摄像机模型采用经典的小孔模型,如图中Oc(光心),像面π表示的是视野平面,其到光心的距离为f(镜头焦距)。

四个坐标系分别为:世界坐标系(Ow),摄像机坐标系(Oc),图像物理坐标系(O1,单位mm),图像像素坐标系(O,位于视野平面的左上角,单位pix)。

空间某点P到其像点p的坐标转换过程主要是通过这四套坐标系的三次转换实现的,首先将世界坐标系进行平移和转换得到摄像机坐标系,然后根据三角几何变换得到图像物理坐标系,最后根据像素和公制单位的比率得到图像像素坐标系。(实际的应用过程是这个的逆过程,即由像素长度获知实际的长度)。

ps:通过摄像头的标定,可以得到视野平面上的mm/pix分辨率,对于视野平面以外的物体还是需要通过坐标转换得到视野平面上。

转化的过程和公式参见:摄像机标定原理(关键是三个坐标系).ppt

2 张正友算法的原理

zhang法通过对一定标板在不同方向多次(三次以上)完整拍照,不需要知道定标板的运动方式。直接获得相机的内参(参考文献上矩阵A)和畸变系数。该标定方法精度高于自定标法,且不需要高精度的定位仪器。

ZHANG的算法包含两个模型:一.经典针孔模型,包含四个坐标系,二畸变模型(这个来源未知)

公式三项依次表示,径向畸变,切线畸变,薄棱镜畸变。OPENCV中函数只能给出k1,k2,p1,p2。

还存在另外一种畸变模型,见《摄像机标定算法库的设计和试验验证》一文26 page。

张正友标定有matlab的工具箱TOOLBOX_CAL,以及OpenCV库,下面是C++结合OpenCV的代码:

1 #include "cvut.h"  2 #include 3 #include 4 #include 5 using namespace cvut;  6 using namespace std;  7 void main()   8 {  9      ifstream fin("calibdata.txt"); 10      ofstream fout("calibration_result.txt");  11      //****************开始提取角点***********************// 12      cout<<"开始提取角点………………"; 13      int image_count=0;  14      CvSize image_size;  15      CvSize board_size = cvSize(5,7);    16      CvPoint2D32f * image_points_buf = 17                 new CvPoint2D32f[board_size.width*board_size.height];   18      Seqimage_points_seq;  19      string filename; 20      while (std::getline(fin,filename)) 21      { 22           cout<<"
 将鼠标焦点移到标定图像所在窗口" 23           <<"并输入回车进行下一幅图像的角点提取 
"; 24           image_count++; 25           int count; 26           Imageview(filename);  27           if (image_count == 1) 28           { 29                image_size.width = view.size().width; 30                image_size.height = view.size().height; 31           } 32           if (0 == cvFindChessboardCorners( view.cvimage, board_size, 33                 image_points_buf, &count, CV_CALIB_CB_ADAPTIVE_THRESH )) 34           { 35                 cout<<"can not find chessboard corners!
"; 36                 exit(1); 37           } 38           else 39          { 40            Imageview_gray(view.size(),8,1); 41            rgb2gray(view,view_gray); 42            cvFindCornerSubPix( view_gray.cvimage,  43            image_points_buf, count, cvSize(11,11), 44            cvSize(-1,-1),  45            cvTermCriteria( CV_TERMCRIT_EPS+CV_TERMCRIT_ITER, 30, 0.1 )); 46            image_points_seq.push_back(image_points_buf,count); 47            cvDrawChessboardCorners( view.cvimage, board_size,  48                     image_points_buf, count, 1); 49            view.show("calib"); 50            cvWaitKey();  51            view.close(); 52          } 53      }//角点提取循环 54      delete []image_points_buf;  55      cout<<"角点提取完成!
"<object_points(1, 59                 board_size.width*board_size.height*image_count,3); 60      Matriximage_points(1,image_points_seq.cvseq->total,2); 61      Matrixpoint_counts(1,image_count,1); 62      Matrixintrinsic_matrix(3,3,1); 63      Matrixdistortion_coeffs(1,4,1); 64      Matrixrotation_vectors(1,image_count,3); 65      Matrixtranslation_vectors(1,image_count,3); 66      int i,j,t; 67      for (t=0;ttotal,str,10); 81      cout<total;i++) 83      { 84             image_points(0,i,0) = image_points_seq[i].x; 85             image_points(0,i,1) = image_points_seq[i].y; 86      } 87      for (i=0;iimage_points2(1,point_counts(0,0,0),2);135      int temp_num  = point_counts(0,0,0); 136      cout<<"	每幅图像的定标误差:
";137      fout<<"每幅图像的定标误差:
";138      for (i=0;irotation_vector(3,1);176      Matrixrotation_matrix(3,3);177      fout<<"相机内参数矩阵:
";178      fout<

这段程序可以直接运行,本人是在vs2010+OpenCV2.4.0环境下,配置在前面文章中有介绍。标定板图像序列名称放在文件"calibdata.txt"中,每行一幅图像名,路劲问题这里就不论述了。如

image/chess1.jpg image/chess2.jpg

……

最后标定结果存储在"calibration_result.txt"中,命令行窗口也会显示一些信息。观察结果会发现,摄像机内参数矩阵M1和畸变系数k1,k2,p1,p2是直接调用OpenCV中标定函数求解出的,以及每幅图像相对于对应摄像机成像平面的旋转矩阵R"(或旋转向量)和平移向量t",而不是世界坐标系相对于摄像机坐标系,也不是两部摄像机之间的空间关系。而对于外参[R t],一直都是很抽象的问题。

在重建的过程中,主要需要两个元素:

1、摄像机内M1、外参数M2(或者说是投影矩阵M=M1*M2)

2、左右成像平面上的匹配特征点对

最后通过视差原理计算出物体上特征点对应的空间点坐标,得到最终点云。

当然,有兴趣的可以继续学习、研究下去,外参可以通过图像上的点和预先得到的世界坐标系下的物体上的空间点坐标,利用一系列数学关系计算。

在实际操作中,可以在重建过程进行自标定,即不用分别进行标定求得摄像机参数,而是直接通过特征点对计算投影矩阵,后面步骤同上。当然自标定得到的结果精度不是很高,目前较多的是上面所述的张正友标定法,介于传统与自标定之间。

【领 QT开发教程 学习资料, 点击下方链接莬费领取↓↓ ,先码住不迷路~】

点击这里:

关键词:

 

热文推荐

OpenCV之摄像机标定

最近方向定下来是双目立体视觉,主要是做重建这块的研究。大致过程是图像获取->摄像机标定->特征提取->匹配->三维重建,当然开始可以进行图像

2023-04-20

世界短讯!全面高能!宏碁发布掠夺者刀锋X和掠夺者·擎Neo游戏本

2023年4月20日在主题为“探索新平衡”的宏碁全球春季新品发布会上,宏碁发布全新电竞游戏本阵容,全系列采用全新设计,并搭载最新第13代英特尔

2023-04-20

口子窖(603589):9家机构给予“买入”评级,从消费场景的角度来看有望迎来快速复苏_环球观察

公司作为安徽白酒品牌代表之一,随着疫情管控的不断优化,疫情影响消退后,省内白酒消费升级确定性较强,23年以来消费场景反弹明显,从消费场

2023-04-20

《热血群英传》张春华介绍

热血群英传张春华怎么样?热血群英传是一款三国卡牌策略手游,小伙伴们可以收集不同的名将来随意搭配,那么可能还有的小伙伴对于热血群英传中

2023-04-20

广告费税前扣除比例怎么算_广告费税前扣除比例 全球今头条

1、印刷广告基于广告费收入减去印刷费后的净收入,并计算从价税率。2、从1985年7月1日起,一般报纸

2023-04-20

全球时讯:日本女乒只剩独苗,孙颖莎迎来一波怪球手,钱天一再战19岁小将

截止到昨天,中国女乒只损失了1人,而我们的老对手日本女乒则已经损失了一大半的队伍。她就幸运多了,非常幸运,第一轮基本没遇到中国选手,所

2023-04-20

环球视讯!2023职工医保报销比例是多少?职工医疗保险一个月要交多少钱?

职工医疗保险报销比例是多少?职工医疗保险一个月要交多少钱?下面跟社保网小编一起来看看职工医疗保险要交多少年?。一、职工医疗保险报销比

2023-04-20

Gamera公布休闲游戏化社区《GamerAworlD》 邀您共享闲暇时光_聚焦

中国独立游戏发行商GameraGames在今天的五周年特别节目上,首次公开了由GammaLab开发的休闲游戏化社区《GamerAworlD》,目前该产品的Steam商店已经上线。

2023-04-20

一季度国内糖价上涨3.26% 如何应对?|全球快资讯

一季度国内糖价上涨3 26%如何应对?

2023-04-20

预售10.90万元起 吉利博越COOL将于4月26日上市_世界播资讯

吉利博越COOL将于4月26日上市。新车造型沿袭“StarburstVision"设计美学基因,以更年轻、时尚、富有动感的概念打造全新“数字棱角”美学。-更

2023-04-20

低碳研究行业点评:欧盟碳关税靴子落地,加速提振绿电绿氢消费

第一时间提供各大券商研究所报告,最大程度减少个人投资者与机构之间信息上的差异,使个人投资者更早的了解到上市公司基本面变化。

2023-04-20

退避三舍出自什么时期 退避三舍出自哪个时期

今天来聊聊关于退避三舍出自什么时期,退避三舍出自哪个时期的文章,现在就为大家来简单介绍下退避三舍出自什么时期,退避三舍出

2023-04-20

海通恒信(01905):每手“21恒信G1”将于4月26日派息41元 环球微资讯

海通恒信(01905)发布公告,该公司2021年公开发行公司债券(面向专业投资者)

2023-04-20

width:100%;height:155px;background:#333;overflow:hidden;text-align:center;positi

央行货币政策司司长邹澜:总体看,金融数据领先于经济数据,实际上反映出供需恢复不匹配的现状。邹澜强调,

2023-04-20

托福考试新调整

(记者周姝芸)日前,ETS(美国教育考试服务中心)在北京宣布托福考试的多项改革措施,此次调整包括缩短考试时长和增加下午场考位等。

2023-04-20

微生物除臭剂商品报价动态(2023-04-20)

交易商品牌 产地交货地最新报价微生物除臭剂 99%含量浓缩型河南清迈环保科技有限公司国产河南省 郑州市5900元 吨

2023-04-20

魏牌全面做强大六/七座市场,蓝山/高山双旗舰组合闪耀上海车展|当前焦点

魏牌全面做强大六 七座市场,蓝山 高山双旗舰组合闪耀上海车展

2023-04-20

世界新动态:《圣斗士星矢》真人电影曝一组剧照!4.28日本上映!

日前,《圣斗士星矢》真人电影发布多张剧照,众卡司登场。本片由东映映画和索尼影业共同打造,新田真剑佑扮

2023-04-20

农业现代化,江苏建湖有“质”更有“智”!_每日聚焦

今年以来,建湖县加快构建现代农业产业体系,围绕农业规模化、产业化、品牌化、科技化“四化”方向,突出有基地、有园区、有企业、有市场“四

2023-04-20

中科曙光2022全年营收超130亿元,净利润增幅连续六年超30%|每日热点

4月18日,曙光信息产业股份有限公司(中科曙光,603019 SH)发布2022年年报。年报披露,2022年中科曙光营收130 08亿元,同比增长15 44%;归属

2023-04-20

资讯

冲刺“运动科技第一股”!Keep递表再次申请港交所主板

2022年9月6日,Keep递表港交所主板,冲刺运动科技第一股,高盛和中金公司为联席保荐人。这是继2022年2月25日递表失效后的再次申请。招股书

2022-09-16     
北京推出14条秋游文化线路

金秋时节,北京市文化和旅游局以赏银杏品文化为主题,推出14条“叶落的季节——漫步北京赏银杏品文化主题线路”,邀市民和游客以步行、骑行

2021-10-27     
基因编辑发力,培育高质量人源化供体猪

此次人体试验,仅仅验证了基因编辑猪克服异种器官移植的超急性排斥反应,还需解决延迟性排斥反应、消耗性血栓等问题。但通过这次试验,能更

2021-10-27     
中国经济高质量发展步伐稳健 长期向好基本面未变

在全球疫情走势和经济走势趋于复杂的背景下,中国经济巨轮将驶向何方,举世关注。2020年10月26日至29日,党的十九届五中全会在京举行,明确

2021-10-27     
南美解放者杯决赛允许近4.5万观众入场

南美洲足联主席多明格斯25日与今年解放者杯决赛对阵的两支俱乐部负责人会晤,宣布决赛现场观众人数增加到球场容量的75%,即近4 5万人。今年

2021-10-27     
22年从警生涯 面对荣誉他说:不要给我报功 给最辛苦的

9月24日,时任安徽省安庆市公安局迎江分局刑警大队大要案中队中队长周磊因在工作中激烈搏斗引发心源性猝死,倒在了工作岗位上,经医院抢救

2021-10-27