【OpenCV&OpenGL&Markerless AR】原理部分+代码

说在前面

我理解的markerless ar

  • 基于标记的ar是以标记为核心,模型相对于标记。
  • 基于无标记的ar则是以现实世界中的各种物体为核心,模型相对于物体。我们可以决定模型摆放在哪一个物体上。

涉及的OpenCV中的知识

关键点

  • 基于标记ar的原理部分我们知道要实现ar有三个重要的matrix,model、view、projection;现在已知model、projection,那么最主要的就是view matrix,即获取相机姿态(位置和朝向)

流程

  • 确定并记录已知物体的特征描述

    • feature detection & feature description
      这些特征是图像中难以被噪声、亮度、缩放所影响的点;可以使用特征点检测算法例如SURF得到。(SURF算法CSDN\博客园一大堆,就不提了)
      feature detection
      在这里插入图片描述
      左:原图 右:使用SURF检测结果(辣鸡摄像头的盒子)
  • 获取并记录相机捕获的每一帧的特征描述

    使用同样的算法。

  • 使用特征匹配算法对已知物的特征与当前帧的特征进行匹配

    特征匹配算法:例如FLANN、BRUTEFORCE
    然后对这些特征点对进行精简
    (有关FLANN 匹配算法自行寻找,一大堆)
    在这里插入图片描述

  • 单应性估计

    使用上面计算好的特征点对来计算单应性矩阵,使用单应性矩阵将左图四个角点转换到右图中(右图使用绿线将四个角点连接起来了);

    Mat cv::findHomography //返回单应性矩阵
    (
    InputArray srcPoints, //已知物体的特征点
    InputArray dstPoints, //捕获图像中的已经匹配到的特征点
    int method = 0, 
    double ransacReprojThreshold = 3, 
    OutputArray mask = noArray(), 
    const int maxIters = 2000, 
    const double confidence = 0.995 
    )
    

    (有关单应性估计请自行寻找,一大堆)
    在这里插入图片描述

  • 相机姿态估计

    现在,我们准备好了:

    1. 原图四个角点
    2. 相机捕捉的图像中对应的四个角点

    以此来估计相机姿态,使用solvePnP函数

    bool cv::solvePnP 
    (
    //输入三维坐标,我们使用四个角点+z坐标0代替
    InputArray objectPoints, 
    //输入图像中对应的二维坐标,也就是2.
    InputArray imagePoints, 
    //相机内参矩阵,见marker-based ar原理部分
    InputArray cameraMatrix, 
    //相机畸变系数,见marker-based ar原理部分
    InputArray distCoeffs, 
    //输出,旋转向量,相机朝向
    OutputArray rvec,
    //输出,平移向量,相机位置 
    OutputArray tvec, 
    //不管
    bool useExtrinsicGuess = false, 
    不管
    int flags = SOLVEPNP_ITERATIVE 
    )
    

    由此,我们就解决了markless ar中最麻烦的相机姿态估计问题,可以愉快的ar了

Result

部分遮挡影响不大。
在这里插入图片描述

Code

  • github
    已知物体的图像可以自己拍一张;由于是个简单的demo,稳定性差强人意。

( o=^•ェ•)o ┏━┓

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值