精华内容
下载资源
问答
  • 双目相机三维重建

    2019-04-09 10:29:56
    matlab实现双目标定,畸变矫正和立体校正,再用vs实现三维重建,亲测可用。
  • // 前三维为xyz,第四维为颜色 // 根据双目模型计算 point 的位置 double x = (u - cx) / fx; double y = (v - cy) / fy; double depth = fx * b / (disparity.at(v, u)); point[0] = x * depth; point[1] = y * ...

    CMakeLists.txt

    cmake_minimum_required(VERSION 3.17)
    project(untitled)
    find_package(Pangolin REQUIRED)
    find_package( OpenCV REQUIRED )
    
    set(CMAKE_CXX_STANDARD 14)
    include_directories(${OpenCV_INCLUDE_DIRS})
    
    add_executable(stereoVision stereoVision.cpp)
    target_link_libraries(stereoVision ${OpenCV_LIBS} ${Pangolin_LIBRARIES})
    

    stereoVision.cpp

    #include <opencv2/opencv.hpp>
    #include <vector>
    #include <string>
    #include <Eigen/Core>
    #include <pangolin/pangolin.h>
    #include <unistd.h>
    
    using namespace std;
    using namespace Eigen;
    
    // 文件路径
    string left_file = "../left02.jpg";//我的图片
    string right_file = "../right02.jpg";//我的图片
    
    //string left_file = "../left.png";//高博的图片
    //string right_file = "../right.png";//高博的图片
    
    // 在pangolin中画图,已写好,无需调整
    void showPointCloud(
        const vector<Vector4d, Eigen::aligned_allocator<Vector4d>> &pointcloud);
    
    int main(int argc, char **argv) {
    
    	//高博的参数
        // 内参
        //double fx = 718.856, fy = 718.856, cx = 607.1928, cy = 185.2157;
        // 基线
        //double b = 0.573;
        //我的英特尔D435i的参数
        // 内参
        double fx = 457.000, fy = 455.518, cx = 313.727, cy = 238.285;
        // 基线
        double b = -0.04115;//注意这里的单位是“米”
    
        // 读取图像
        cv::Mat left = cv::imread(left_file, 0);
        cv::Mat right = cv::imread(right_file, 0);
    
        cv::Ptr<cv::StereoSGBM> sgbm = cv::StereoSGBM::create(
            0, 96, 9, 8 * 9 * 9, 32 * 9 * 9, 1, 63, 10, 100, 32);    // 神奇的参数
        cv::Mat disparity_sgbm, disparity;
        sgbm->compute(left, right, disparity_sgbm);
        disparity_sgbm.convertTo(disparity, CV_32F, 1.0 / 16.0f);
    
        // 生成点云
        vector<Vector4d, Eigen::aligned_allocator<Vector4d>> pointcloud;
    
        // 如果你的机器慢,请把后面的v++和u++改成v+=2, u+=2
        for (int v = 0; v < left.rows; v++)
            for (int u = 0; u < left.cols; u++) {
                if (disparity.at<float>(v, u) <= 0.0 || disparity.at<float>(v, u) >= 96.0) continue;
    
                Vector4d point(0, 0, 0, left.at<uchar>(v, u) / 255.0); // 前三维为xyz,第四维为颜色
    
                // 根据双目模型计算 point 的位置
                double x = (u - cx) / fx;
                double y = (v - cy) / fy;
                double depth = fx * b / (disparity.at<float>(v, u));
                point[0] = x * depth;
                point[1] = y * depth;
                point[2] = depth;
    
                pointcloud.push_back(point);
            }
    
        cv::imshow("disparity", disparity / 96.0);
        cv::waitKey(0);
        // 画出点云
        showPointCloud(pointcloud);
        return 0;
    }
    
    void showPointCloud(const vector<Vector4d, Eigen::aligned_allocator<Vector4d>> &pointcloud) {
    
        if (pointcloud.empty()) {
            cerr << "Point cloud is empty!" << endl;
            return;
        }
    
        pangolin::CreateWindowAndBind("Point Cloud Viewer", 1024, 768);
        glEnable(GL_DEPTH_TEST);
        glEnable(GL_BLEND);
        glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    
        pangolin::OpenGlRenderState s_cam(
            pangolin::ProjectionMatrix(1024, 768, 500, 500, 512, 389, 0.1, 1000),
            pangolin::ModelViewLookAt(0, -0.1, -1.8, 0, 0, 0, 0.0, -1.0, 0.0)
        );
    
        pangolin::View &d_cam = pangolin::CreateDisplay()
            .SetBounds(0.0, 1.0, pangolin::Attach::Pix(175), 1.0, -1024.0f / 768.0f)
            .SetHandler(new pangolin::Handler3D(s_cam));
    
        while (pangolin::ShouldQuit() == false) {
            glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    
            d_cam.Activate(s_cam);
            glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
    
            glPointSize(2);
            glBegin(GL_POINTS);
            for (auto &p: pointcloud) {
                glColor3f(p[3], p[3], p[3]);
                glVertex3d(p[0], p[1], p[2]);
            }
            glEnd();
            pangolin::FinishFrame();
            usleep(5000);   // sleep 5 ms
        }
        return;
    }
    

    一.高博的相机参数和图片

    left.png
    在这里插入图片描述

    right.png
    在这里插入图片描述
    运行结果
    深度图
    在这里插入图片描述点云图
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

    二.我的图片

    在这里插入图片描述
    三维点云图(动图GIF)
    在这里插入图片描述

    最后再附一下代码,可能有修改:

    #include <opencv2/opencv.hpp>
    #include <vector>
    #include <string>
    #include <Eigen/Core>
    #include <pangolin/pangolin.h>
    #include <unistd.h>
    
    using namespace std;
    using namespace Eigen;
    
    // 文件路径
    //string left_file = "../left031.jpg";
    //string right_file = "../right031.jpg";
    string left_file = "../left033.jpg";
    string right_file = "../right033.jpg";
    
    //string left_file = "../left.png";
    //string right_file = "../right.png";//
    // 在pangolin中画图,已写好,无需调整
    void showPointCloud(
        const vector<Vector4d, Eigen::aligned_allocator<Vector4d>> &pointcloud);
    
    int main(int argc, char **argv) {
    
        // 内参
        //double fx = 718.856, fy = 718.856, cx = 607.1928, cy = 185.2157;
        // 基线
        //double b = 0.573;
        // 内参
        double fx = 457.000, fy = 455.518, cx = 313.727, cy = 238.285;
        // 基线
        double b = 0.04115;
    
        // 读取图像
        cv::Mat left = cv::imread(left_file, 0);
        cv::Mat right = cv::imread(right_file, 0);
    
        cv::Ptr<cv::StereoSGBM> sgbm = cv::StereoSGBM::create(
            0, 96, 9, 8 * 9 * 9, 32 * 9 * 9, 1, 63, 10, 100, 32);    // 神奇的参数
        cv::Mat disparity_sgbm, disparity;
        sgbm->compute(left, right, disparity_sgbm);
        disparity_sgbm.convertTo(disparity, CV_32F, 1.0 / 16.0f);
    
        // 生成点云
        vector<Vector4d, Eigen::aligned_allocator<Vector4d>> pointcloud;
    
        // 如果你的机器慢,请把后面的v++和u++改成v+=2, u+=2
        for (int v = 0; v < left.rows; v++)
            for (int u = 0; u < left.cols; u++) {
                if (disparity.at<float>(v, u) <= 0.0 || disparity.at<float>(v, u) >= 96.0) continue;
    
                Vector4d point(0, 0, 0, left.at<uchar>(v, u) / 255.0); // 前三维为xyz,第四维为颜色
    
                // 根据双目模型计算 point 的位置
                double x = (u - cx) / fx;
                double y = (v - cy) / fy;
                double depth = fx * b / (disparity.at<float>(v, u));
                point[0] = x * depth;
                point[1] = y * depth;
                point[2] = depth;
    
                pointcloud.push_back(point);
            }
    
        cv::imshow("disparity", disparity / 96.0);
        cv::waitKey(0);
        // 画出点云
        showPointCloud(pointcloud);
        return 0;
    }
    
    void showPointCloud(const vector<Vector4d, Eigen::aligned_allocator<Vector4d>> &pointcloud) {
    
        if (pointcloud.empty()) {
            cerr << "Point cloud is empty!" << endl;
            return;
        }
    
        pangolin::CreateWindowAndBind("Point Cloud Viewer", 1024, 768);
        glEnable(GL_DEPTH_TEST);
        glEnable(GL_BLEND);
        glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    
        pangolin::OpenGlRenderState s_cam(
            pangolin::ProjectionMatrix(1024, 768, 500, 500, 512, 389, 0.1, 1000),
            pangolin::ModelViewLookAt(0, -0.1, -1.8, 0, 0, 0, 0.0, -1.0, 0.0)
        );
    
        pangolin::View &d_cam = pangolin::CreateDisplay()
            .SetBounds(0.0, 1.0, pangolin::Attach::Pix(175), 1.0, -1024.0f / 768.0f)
            .SetHandler(new pangolin::Handler3D(s_cam));
    
        while (pangolin::ShouldQuit() == false) {
            glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    
            d_cam.Activate(s_cam);
            glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
    
            glPointSize(2);
            glBegin(GL_POINTS);
            for (auto &p: pointcloud) {
                glColor3f(p[3], p[3], p[3]);
                glVertex3d(p[0], p[1], p[2]);
            }
            glEnd();
            pangolin::FinishFrame();
            usleep(5000);   // sleep 5 ms
        }
        return;
    }
    
    展开全文
  • 全部开源的双目相机三维重建包含测试图像
  • 双目视觉的三维重建

    2018-06-11 21:13:55
    双目视觉的三维重建 双目视觉的三维重建 双目视觉的三维重建
  • 双目相机标定的原理可太多了,反而对于标定结果的解析却很少。在这里对相机的内参和双目标定的内参详细解释。 拍图时要注意:1)双目标定拍照时,要保证标定板精度高,我用的12×9,每个格25mm。 2)标定板图像占...

    双目相机标定的原理可太多了,反而对于标定结果的解析却很少。在这里对相机的内参和双目标定的内参详细解释。

    拍图时要注意:1)双目标定拍照时,要保证标定板精度高,我用的12×9,每个格25mm。    

                             2)标定板图像占界面三分之一左右,太小绝对不行,标定板要整个出现在图像里。

                             3)单目标定的图要重新拍,保证标定板遍历图像四周,畸变参数才会准(我是单独两个相机拍不是zed那种点一下拍两张图的)

     

    展开全文
  • 双目视觉三维重建

    2018-08-14 12:45:37
    一些双目三维重建的代码,有matlab和c++的,效果不错。
  • 很好的源码,思路清晰,利用双目实现的,大家有兴趣使用的可以直接下载,可以应用到比赛和论文内的,工具是matlab,代码也很好理解
  • 双目相机三维重建

    2020-11-29 14:04:17
    双目相机三维重建 一.步骤 摄像机的标定(内参和外参) 双目图像的标定(张正友标定法) 立体匹配算法获得视差图 生成深度图 进行三维重建 二.详细过程 1.摄像机的标定 内参,摄像机内参反映的是摄像机坐标系到...

    双目相机的三维重建

    一.步骤

    1. 摄像机的标定(内参和外参)
    2. 双目图像的标定(张正友标定法)
    3. 立体匹配算法获得视差图
    4. 生成深度图
    5. 进行三维重建

    二.详细过程

    1.摄像机的标定
    内参,摄像机内参反映的是摄像机坐标系到图像坐标系之间的投影关系。摄像机内参的标定使用张正友标定法,简单易操作。去网上找棋盘格,从不同角度用双目相机进行拍摄,建议20张左右。然后运用Maltab进行标定。
    外参,摄像机外参反映的是摄像机坐标系和世界坐标系之间的旋转R和平移T关系。如果两个相机的内参均已知,并且知道各自与世界坐标系之间的R1、T1和R2,T2,就可以算出这两个相机之间的Rotation和Translation,也就找到了从一个相机坐标系到另一个相机坐标系之间的位置转换关系。摄像机外参标定也可以使用标定板,只是保证左、右两个相机同时拍摄同一个标定板的图像。外参一旦标定好,两个相机的结构就要保持固定,否则外参就会发生变化,需要重新进行外参标定。
    2.双目图像标定。
    先进行单目标的标定,再进行双目标的标定,我是采用的matlab手工标定。

    双目标定后的结果:
    在这里插入图片描述
    3.视差图
    (1)BM算法
    (2)GC算法
    (3)SGBM算法

    BM、GC和SGBM算法性能比较:

    (1)视差效果:BM<SGBM<GC;
    
    (2)处理速度:BM>SGBM>GC;
    
    (3)图像类型:BM和GC算法只能对8位灰度图像计算视差,SGBM算法可以处理24位彩色图像;
    

    我生成的视差图:

    在这里插入图片描述
    4.深度图
    5.三维重建

    展开全文
  • 基于双目视觉的深度计算和三维重建双目视觉opencv opengl三维重建,简单的三维重建系统,代码可正常运行
  • 点击上方“3D视觉工坊”,选择“星标”干货第一时间送达作者:Tengfei Jianghttps://zhuanlan.zhihu.com/p/81016834本文已由原作者授权,不得擅自二次转载前言三维重建是个跨多学科的应用领域,围绕不同的尺度大小、...

    点击上方“3D视觉工坊”,选择“星标”

    干货第一时间送达

    作者:Tengfei Jiang

    https://zhuanlan.zhihu.com/p/81016834

    本文已由原作者授权,不得擅自二次转载

    前言

    三维重建是个跨多学科的应用领域,围绕不同的尺度大小、不同速度要求、不同精度要求、不同硬件成本等要求发展出了各种各样的技术方案。在这个应用领域,充分体现了,没有最好的设备,只有最合适的方案。在本系列文章中,我尝试解释接触过的不同技术方案,如有错误之处,敬请斧正。

    双目立体视觉原理

    视差 (Disparity) 及 深度计算

    人依靠两只眼睛判断深度(物体离眼睛的距离),具体是如何来判断的呢,我们从小到大似乎并未接受过深度计算的训练。视差(Disparity)是解释原理的基本概念之一。我们可以做个简单的实验,将手指置于双目之间,分别开闭左右眼。怎么样,是不是发现手指不在同一个位置?这就是视差。

    688489045d74e5e008110d683c502a54.png 

    可以参考上图,当左右相机同时观察三维点时,该点分别投影在左右相机的相平面上,这两个投影点之间的差异就是视差:d=Xleft-Xright。 这个公式看起来简单直观,其实有不少未解释清楚的地方,比如这两个 x 是在同一个坐标系内么,这两个像平面一定是平行摆放的吗,为什么可以直接减?等等 。 要解释清楚这些问题,上图还是略简陋,让我们换张图来解释。

    aa599d2bb1d34c135eb196985cc39c7f.png 

    图中,P是三维物体的顶点坐标,其和左右相机光心CL、CR的连线与左右相平面的交点 b7814394170aa953b3d770f677f92162.png8070b2b4dd8afbd48a17b241d2bfc3cd.png 即为投影点。注意现在说的所有坐标都是定义在同一个坐标系内,坐标原点与标架已经在图中左下角标识出来了。 现在问题来了,已知 14a7531fc06173671dd7d241456b2cae.png ,已知d、b、f,求z。这是一个初中几何题,答案很简单:

    a845c89de9f5647380486c57d98b548c.png

    从公式可以看出,视差 d和深度z成反比关系。视差越大,可以探测的深度越小。b是两个相机光心的距离,又叫基线(baseline),f是相机的焦距。f、b与深度均成正比关系。

    立体匹配

    从上一节可以看到,如果要计算深度,我们需要知道视差、基线、焦距。另外注意,上文的推导是基于理想模型,比如不考虑相机的畸变,不考虑双相机光轴不平行的情况。

    在视差计算之前,我们首先给定了两个投影点。但实际应用中,我们并不知道左右相机中哪两个点是对应点。查找对应点是双目立体视觉中非常核心的步骤,可以毫不夸张地说,大部分的结构光重建方案解决的都是如何准确快速地匹配对应点。在介绍具体方案之前,有些通用的背景知识稍微铺垫一下。

    对极几何(Epipolar Geometry)是一个内容非常丰富的范畴(本文不想铺展太多,只是选择几个概念简单描述,详细内容可以参考《计算机视觉中的多视图几何》一书)。对极几何描述的是三维点与两个相机相平面之间的特殊几何关系,我们先看下图的模型。

    2758e42e233e1c8b90dff4784758d9b8.png 

    其中C0、C1为两个相机中心,P为空间中一点,P在C0、C1对应像平面上的投影分别为X0、X1。C0、C1连线与像平面的交点e0、e1称为极点(Epipoles),l0、l1称为极线(Epipolar Lines),C0、C1、P三点组成的平面称为极平面(Epipolar Plane)

    这个模型有个有趣的性质。当三维点P沿着185d6d0a8ba12094db415b5f81f73f94.png方向接近左相机时,我们发现其在左相机上的投影点X0并不会移动,但是其在右相机相平面上的投影点x1发生了变化,其移动轨迹一定是沿着极线l1。反过来,假设我们并不知道P点坐标,只知道X0是其在左相机上的投影,要寻找其在右相机相平面中的投影,则只需要沿着极线l1搜索即可。这个性质使得对应点匹配的搜索空间直接从2维降低到1维。

    聪明的同学看到这肯定会问了,没有P点怎么知道极线在哪,这不是因果不分么?事实上极线的位置仅和X0以及相机的内外参有关,和P点位置无关。这就引出了接下来的约束。在对极几何中有个非常著名的约束---对极约束(Epipolar Constraint)形式化地描述了对应点 X0、X1之间的几何关系:9d2c6428aeada21a001d82b5549507e5.png

    其中F是基础矩阵(Fundamental Matrix)。这个式子是如此简洁,以至于忍不住想要推导一番,推导过程见附录1。

    极线矫正 对极约束描述了对应点匹配可沿极线搜索。在实际应用中,两个相机摆放一定是不平行的,因而相平面中的极线大概率是条斜线,这就给搜索过程带来了不便,为了简化过程,还需要引入额外的极线矫正步骤,使得两相机的极线共线且平行于相平面的X 轴。矫正前后的效果如下面两张图所示,应该比较直观。

     cea625221fa2a33559ddb00f226d4cd3.png

    8250a8643d2aa8818afa5a5e3b3ad450.png 

    对应点查找经过上述处理后,要生成视差图,最核心的步骤就是在相平面的同一行上,查找对应点了。查找的方法有多种,大体上可以分成两类。

    (1)提取图像特征该类方法可以对每张图像单独进行分析,提取“特征”。这里特征可以有不同的表示方法,如边缘、角点等,也可能来自其他主动投射的结构光信息,如正弦条纹相位值、编码值等,通过在双目图像之间查找相同(相似)特征来确定对应点。

    (2)使用相关关系 该类方法假设对应点小领域内有相似的亮度模式,因而可以用两者的相关关系来定位。为了增加额外的亮度变化信息,通常会通过主动光源投射随机散斑这类图案。

    具体的结构光重建原理会在后续文章中展开讨论。

    参考

    7a9397202db1ed570831ed69b74f267d.png

    附录

    对极约束证明:

    be4e998d0bd3f643e64b043adbd993bb.png

    上述内容,如有侵犯版权,请联系作者,会自行删文。

    交流群

    欢迎加入我们公众号读者群一起和同行交流,目前有3D视觉深度学习激光SLAM、VSLAM、三维重建、点云后处理、图像处理、手眼标定、自动驾驶、位姿估计等微信群,请扫描下面微信号加群,备注:”研究方向+学校/公司+昵称“,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进去相关微信群。

    fb7153786173fa22eadc11584714d7bd.png

    知识星球

    学习3D视觉核心技术,扫描查看详情,3天内无条件退款

    ce5420a48cde22838e3286b60cb8839e.png

    圈里有高质量教程资料、可答疑解惑、助你高效解决问题

    展开全文
  • 双目视觉三维重建框架

    万次阅读 多人点赞 2018-01-23 14:08:52
    玉米竭力用轻松具体的描述来讲述双目三维重建中的一些数学问题。希望这样的方式让大家以一个轻松的心态阅读玉米的《计算机视觉学习笔记》双目视觉数学架构系列博客。这个系列博客旨在捋顺一下已标定的双目视觉中的...
  • OpenCV实现SfM:双目三维重建

    千次下载 热门讨论 2015-09-02 14:29:19
    使用OpenCV3.0进行双目三维重建。 代码是用VS2013写的,OpenCV版本为3.0且包含扩展部分,如果不使用SIFT特征,可以修改源代码,然后使用官方未包含扩展部分的库。软件运行后会将三维重建的结果写入Viewer目录下的...
  • vs2015+opencv2.4.10实现的双目立体视觉三维重建c++代码。SGBM立体匹配
  • 谈到双目相机测距,我们首先要先了解测距的原理:如下图所示,这是双目摄像头的俯视图。 上图解释了双摄像头测距的原理,书中Z的公式如下:b代表基线,根据相似三角形关系, 这里d表示为左右图横坐标之差,称为视差...
  • 点击上方“3D视觉工坊”,选择“星标”干货第一时间送达结构光三维重建系统是由一个相机和一个投影仪组成,关于结构光三维重建系统的理论有很多,其中有一个简单的模型是把投影仪看做相机来使用,从而得到物体的三维...
  • 双目立体视觉三维重建

    万次阅读 多人点赞 2018-07-22 17:15:08
    双目立体视觉的整体流程包括:图像获取、双目标定、双目矫正、立体匹配、三维重建。 Stereo Vision OpenCV+OpenGL 双目立体视觉三维重建 OpenCV 双目测距(双目标定、双目校正和立体匹配) 真实场景的双目立体...
  • matlab利用双目图像视差进行三维重建

    千次阅读 热门讨论 2019-11-20 15:17:41
    colormap jet colorbar %% % 三维重建 points3D = reconstructScene(disparityMap, stereoParams); % Convert to meters and create a pointCloud object points3D = points3D ./ 1000; ptCloud = pointCloud...
  • 双目三维重建和误差估计

    千次阅读 2018-08-18 10:09:34
    双目测距的精度和基线长度(两台相机之间的距离)有关,两台相机布放的距离越远,测距精度越高。 但问题是:往往在实际应用中,相机的布放空间是有限的,最多也只有几米或几十米的基线长度,这就导致双目测距在远...
  • 今日光电 有人说,20世纪是电的世纪,21世纪是光的世纪;知光解电,再小的个体都可以被...三维重构又被称为三维重建,百度百科中对它的定义为:指对三维物体建立适合计算机表示和处理的数学模型,是在计算机环境下对...
  • 记录一下深度学习进行双目三维重建看过的网络 持续更新(时不时更新) 数据集: SceneFlow KITTI 与三维有关的数据集: TanksAndTemples 一大堆Github总结的数据集 Github大佬的笔记 -----------------------------...
  • 之后了解到三维重建原理 由两张图象的二维图像哥哥像素点的坐标,推导出咱们三维试图重德三维坐标系统中对应的xyz的坐标数值,并显示在Matlab三维图中。 那么像素点怎么找的呢,具体能找到多少个像素点呢,,鉴于...
  • 基于双目立体视差图进行三维点云的重建,并提供PFM文件转成Mat格式的接口。点云重建过程清晰明了、内含所需的所有文件,详情见:https://mp.csdn.net/mdeditor/86644361
  • 计算三维重建的方法称为SfM(Structure from Motion).\ 假设计算机已经标定,计算重建的部分可以分为下面四个步骤:\ (1)、检测特征点,然后在两幅图间进行特征点匹配。\ (2)、有匹配算出基础矩阵。\ (3)、由...
  • OpenCV+OpenGL 双目立体视觉三维重建

    万次阅读 多人点赞 2016-08-08 00:02:47
    0.绪论这篇文章主要为了研究双目立体视觉的最终目标——三维重建,系统的介绍了三维重建的整体步骤。双目立体视觉的整体流程包括:图像获取,摄像机标定,特征提取(稠密匹配中这一步可以省略),立体匹配,三维重建...
  • CSDN中关于立三维重构的介绍层出不穷,CNKI中也有各类综述对三维重构进行总结,撰写这篇博客仅作为本人对该类博客、论文的总结学习,...三维重构又被称为三维重建,百度百科中对它的定义为:指对三维物体建立适合...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,218
精华内容 1,287
关键字:

双目相机三维重建