双目立体视觉系统三维重建学习总结(双目标定+图像校正(立体校正+畸变矫正)+视差图+深度图+点云重建)(完结)

        刚开始学习关于双目立体视觉系统三维重建方面的知识,大都是采取了很多大佬的文章,所以写篇文章做个总结。目前只是找出一个可执行的方案,不是说去掌握其中的每一个细节,掌握完细节后,再去落地,关于精确掌握各个部分,是之后进一步的研究,而不是目前所做的事。在完成项目的过程中,若遇到问题,就带着问题去解决,这样效率高。

此篇文章会涉及到相关程序的编写,其中的相关细节,比如说变量的问题,在编写的过程中需要搞清楚,不然会出现问题。

首先进行双目标定之前,先看怎样能够在连接了双目相机的情况下驱动左右两个相机(通过usb),注意在下载opencv-python与opencv-contrib-python两个包时,一定下载与python的版本相对应的包版本,以下提供关于如何下载的文章以及两个包的下载地址:

(18条消息) Python3.6下安装opencv_考古学家lx(李玺)的博客-优快云博客_python3.6对应的opencv版本

Links for opencv-python (tsinghua.edu.cn)

Links for opencv-contrib-python (tsinghua.edu.cn)

双目相机驱动程序如下:

# -*- coding: utf-8 -*-
import cv2 as cv
import time

AUTO = False  # 自动拍照,或手动按s键拍照
INTERVAL = 2  # 自动拍照间隔

cv.namedWindow("left")
cv.namedWindow("right")
camera = cv.VideoCapture(1)  #这里的0表示使用电脑内置摄像头,1表示使用双目相机

# 设置分辨率 左右摄像机同一频率,同一设备ID;左右摄像机总分辨率1280x480;分割为两个640x480、640x480
camera.set(cv.CAP_PROP_FRAME_WIDTH, 1280)
camera.set(cv.CAP_PROP_FRAME_HEIGHT, 480)

counter = 0
utc = time.time()
folder = "./Saveimage/"  # 拍照文件目录


def shot(pos, frame):
    global counter
    path = folder + pos + "_" + str(counter) + ".jpg"

    cv.imwrite(path, frame)
    print("snapshot saved into: " + path)


while True:
    ret, frame = camera.read()
    # 裁剪坐标为[y0:y1, x0:x1] HEIGHT*WIDTH
    left_frame = frame[0:480, 0:640]
    right_frame = frame[0:480, 640:1280]

    cv.imshow("left", left_frame)
    cv.imshow("right", right_frame)

    now = time.time()
    if AUTO and now - utc >= INTERVAL:
        shot("left", left_frame)
        shot("right", right_frame)
        counter += 1
        utc = now

    key = cv.waitKey(1)
    if key == ord("q"):
        break
    elif key == ord("s"):
        shot("left", left_frame)
        shot("right", right_frame)
        counter += 1
camera.release()
cv.destroyWindow("left")
cv.destroyWindow("right")

拍照是输入法在英文状态下,按下s可以拍照,按下q退出,还有就是目前使用的双目相机不是鱼眼的,可能不需要进行畸变校正

对于双目立体视觉系统三维重建来说,分以下几个步骤:

一、双目标定

        1.为什么要对双目相机进行标定?

           参考链接:对双目相机进行标定的原因

        2.双目标定有两种方式:

        (1)opencv标定;

        (2)matlab自带的标定工具箱(注意matlab里面有关于单目与双目的标定工具,别搞错了)。

          在这里主要是研究关于matlab方面的标定,opencv标定没有研究,关于matlab标定的参考链接如下所示:

          参考链接:基于matlab的双目标定(十分详细!!)

(18条消息) 双目摄像头Matlab参数定标_matlab双目相机标定_iNBC的博客-优快云博客

注意:双目相机标定里,一定要删除一些误差比较大的图片,可以参考以下链接:

(18条消息) matlab双目标定(详细过程)_双目标定步骤_西海岸看日出的博客-优快云博客

(误差很大:标定左下角有一个虚线,其中有些数据比虚线要高很多的要删掉,上述文章有说怎样删除误差大的操作) 

二、图像校正

       对双目相机进行标定之后,得到标定的相关数据,接下来就要进行图像的校正,图像校正方面主要是分为两个:

       1.立体校正

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

          答:双目相机系统主要的任务就是测距,而视差求距离公式是在双目系统处于理想情况下推导的,但是在现实的双目立体视觉系统中,是不存在完全的共面行对准的两个摄像机图像平面的。所以我们要进行立体校正。

                 立体校正的目的:把实际中非共面行对准的两幅图像,校正成共面行对准。

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值