计算机视觉实验八实验报告附代码_第1页
计算机视觉实验八实验报告附代码_第2页
计算机视觉实验八实验报告附代码_第3页
计算机视觉实验八实验报告附代码_第4页
计算机视觉实验八实验报告附代码_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验报告实验地点学生姓名实验日期学院实验课程班级学号实验项目同组人数环境参数成绩一、实验目的或要求;二、实验原理;三、实验仪器设备及系统;四、操作方法与实验步骤(相关流程图);五、实验数据记录(截图)及处理;六、实验结果分析及讨论;一、实验题目根据双目视图几何原理,计算双目视觉中的相机平行像面的变换。二、实验原理两摄像头之间的旋转矩阵和平移矩阵可以由下式求出:Rf国)TT=T「—RTj,其中,R为两摄像头间的旋转矩阵,T为两摄像头间的平移矩阵。Rr为右摄像头经过张氏标定得到的相对标定物的旋转矩阵,Tr为右摄像头通过张氏标定得到的相对标定物的平移向量。^为左摄像头经过张氏标定得到的相对相同标定物的旋转矩阵,Tl为左摄像头经过张氏标定得到的相对相同标定物的平移向量。两个式子是可以通过数学代换推导来的。但玉米觉得对这样有明显物理意义并且空间过程简单的计算式。物理上的空间想象,比纯代数代换,要生动的多。并且有利于大家揣摩整个物理过程。在玉米眼里,这两个式子是这样的:对于R,首先用T把左摄像机坐标系平移到右摄像机坐标系上(即两坐标系远点重合)。然后在同一参考系下的两个旋转矩阵相乘,表示世界坐标先向右旋转到Rr,再向左旋转Rl。那么两次旋转后得到的旋转,就是有摄像机旋转到左摄像机所需的旋转矩阵R。对于T,那就更容易理解了,先用R对左坐标系旋转一下,把左右两摄像机调成平行,然后直接平移向量相减,即得到。两摄像机之间的平移向量T。上面求得的R和T就是立体标定得到的参数了。那么运用的立体标定所得的参数了,下一步我们该做什么呢?答案是:立体校正。在介绍立体校正的具体方法之前,让我们来看一下,为什么要进行立体校正?因为当两个图像平面是完全共面行对准时,计算立体视差是最简单的。但是,在现实的双目立体视觉系统中,是不存在完全的共面行对准的两个摄像机图像平面的。所以我们要进行立体校正。立体校正的目的就是,把实际中非共面行对准的两幅图像,校正成共面行对准。如下面示意图所示。(共面行对准是指:两摄像机图像平面在同一平面上,且同一点投影到两个摄像机图像平面时,应该在两个像素坐标系的同一行)四、算法步骤1、设置迭代终止条件2、设置objectpoints,形式为(0,0,0),(1,0,0),(2,0,0)....,(6,5,0)3、用arrays存储所有图片的objectpoints和imagepoints4、对左右侧相机分别标定5、进行双目相机标定6、对立体校正7、在对好的极线的图片上画上直线五、运行结果六、主要代码//仿射变换一平移,旋转,缩放,翻转,错切#include<opencv2/opencv.hpp>#include<iostream>#include<math.h>usingnamespacecv;usingnamespacestd;intmain(intargc,char*argv)(Matsrc,dst;src=imread(〃left01.jpg〃);if(!src.data)(printf(〃couldnotloadimage...\n〃);return-1;}namedWindow("原图片〃,CV_WINDOW_AUTOSIZE);imshow(〃原图片〃,src);Matdst_warp,dst_warpRotateScale,dst_warpTransformation,dst_warpFlip;Point2fsrcPoints[3];//原图中的三点,一个包含三维点(x,y)的数组,其中x、y是浮点型数Point2fdstPoints[3];//目标图中的三点〃第一种仿射变换的调用方式:三点法//三个点对的值,上面也说了,只要知道你想要变换后图的三个点的坐标,就可以实现仿射变换

srcPoints[0]=Point2f(0,0);srcPoints[1]=Point2f(0,src.rows);srcPoints[2]=Point2f(src.cols,0);//映射后的三个坐标值dstPoints[0]=Point2f(0,src.rows*0.3);dstPoints[1]=Point2f(src.cols*0.25,src.rows*0.75);dstPoints[2]=Point2f(src.cols*0.75,src.rows*0.25);MatM1=getAffineTransform(srcPoints,dstPoints);//由三个点对计算变换矩阵warpAffine(src,dst_warp,M1,src.size());//仿射变换//第二种仿射变换的调用方式:直接指定角度和比例〃旋转加缩放Point2fcenter(src.cols/2,src.rows/2);//旋转中心doubleangle=45;//逆时针旋转45度doublescale=0.5;//缩放比例MatM2=getRotationMatrix2D(center,angle,scale);//计算旋转加缩放的变换矩阵warpAffine(src,dst_warpRotateScale,M2,Size(src.cols,src.rows),INTER_LINEAR);//仿射变换//仿射变换一平移Point2fsrcPoints1[3];Point2fdstPoints1[3];srcPoints1[0]=Point2i(0,0);srcPoints1[1]=Point2i(0,src.rows);srcPoints1[2]=Point2i(src.cols,0);dstPoints1[0]dstPoints1[1]dstPoints1[2]=Point2i(src.cols=Point2i(src.cols=Point2i(src.cols/3,0);/3,src.rows);+src.cols/3,0);MatM3=getAffineTransform(srcPoints1,dstPoints1);warpAffine(src,dst_warpTransformation,M3,Size(src.cols+src.cols/3,src.rows));〃仿射变换一翻转、镜像

Point2fsrcPoints2[3];Point2fdstPoints2[3];srcPoints2[0]=Point2i(0,0);srcPoints2[1]=Point2i(0,src.rows);srcPoints2[2]=Point2i(src.cols,0);dstPoints2[0]dstPoints2[1]dstPoints2[2]0);src.rows);=Point2i(src.cols,=Point2i(src.cols,=Point2i(0,0);MatM4=getAffineTransform(srcPoints2,dstPoints2);warpAffine(src,dst_warpFlip,M4,Size(src.cols,src.rows));//flip(src,dst_warpFlip,1);//flipCode:=0图像向下翻转//>0图像向右翻转//<0图像同时向下向右翻转imshow("affinetransformation](三点法)",dst_warp);imshow("affinetransfoemation2(指定比例和角度)dstPoints1[0]dstPoints1[1]dstPoint

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论