计算机视觉实验八实验报告附代码

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验报告

一、实验目的或要求;

二、实验原理;

三、实验仪器设备及系统;

四、操作方法与实验步骤(相关流程图);

五、实验数据记录(截图)及处理;

六、实验结果分析及讨论;

一、实验题目

根据双目视图几何原理,计算双目视觉中的相机平行像面的变换。

二、实验原理

两摄像头之间的旋转矩阵和平移矩阵可以由下式求出:

其中,R为两摄像头间的旋转矩阵,T为两摄像头间的平移矩阵。R r为右摄像头经过张氏标定得到的相对标定物的旋转矩阵,T r为右摄像头通过张氏标定得到的相对标定物的平移向量。R l为左摄像头经过张氏标定得到的相对相同标定物的旋转矩阵,T l为左摄像头经过张氏标定得到的相对相同标定物的平移向量。

两个式子是可以通过数学代换推导来的。但玉米觉得对这样有明显物理意义并且空间过程简单的计算式。物理上的空间想象,比纯代数代换,要生动的多。并且有利于大家揣摩整个物理过程。

在玉米眼里,这两个式子是这样的:

对于R,首先用T把左摄像机坐标系平移到右摄像机坐标系上(即两坐标系远点重合)。然后在同一参考系下的两个旋转矩阵相乘,表示世界坐标先向右旋转到R r,再向左旋转R l。那么两次旋转后得到的旋转,就是有摄像机旋转到左摄像机所需的旋转矩阵R。

对于T,那就更容易理解了,先用R对左坐标系旋转一下,把左右两摄像机调成平行,然后直接平移向量相减,即得到。两摄像机之间的平移向量T。

上面求得的R和T就是立体标定得到的参数了。

那么运用的立体标定所得的参数了,下一步我们该做什么呢?答案是:立体校正。

在介绍立体校正的具体方法之前,让我们来看一下,为什么要进行立体校正?

因为当两个图像平面是完全共面行对准时,计算立体视差是最简单的。但是,在现实的双目立体视觉系统中,是不存在完全的共面行对准的两个摄像机图像平面的。所以我们要进行立体校正。立体校正的目的就是,把实际中非共面行对准的两幅图像,校正成共面行对准。如下面示意图所示。(共面行对准是指:两摄像机图像平面在同一平面上,且同一点投影到两个摄像机图像平面时,应该在两个像素坐标系的同一行)

四、算法步骤

1、设置迭代终止条件

2、设置object points, 形式为 (0,0,0), (1,0,0), (2,0,0) ....,(6,5,0)

3、用arrays存储所有图片的object points 和 image points

4、对左右侧相机分别标定

5、进行双目相机标定

6、对立体校正

7、在对好的极线的图片上画上直线

五、运行结果

六、主要代码

// 仿射变换—平移,旋转,缩放,翻转,错切

#include

#include

#include

using namespace cv;

using namespace std;

int main(int argc, char* argv) {

Mat src, dst;

src = imread("left01.jpg");

if (!src.data) {

printf("could not load image...\n");

return -1;

}

namedWindow("原图片", CV_WINDOW_AUTOSIZE);

imshow("原图片", src);

Mat dst_warp, dst_warpRotateScale, dst_warpTransformation, dst_w arpFlip;

Point2f srcPoints[3];//原图中的三点,一个包含三维点(x,y)的数组,其中x、y是浮点型数

Point2f dstPoints[3];//目标图中的三点

//第一种仿射变换的调用方式:三点法

//三个点对的值,上面也说了,只要知道你想要变换后图的三个点的坐标,就可以实现仿射变换

相关文档
最新文档