• ICP 求解相机思路


    1.之前仍然是需要创建find_feature_matches,和pixel2cam,一个是用来匹配描述子的,一个是把像素坐标转成归一化平面坐标的。里面的变量都要带上&。
    2.因为是3d-3d.所以这里读取了两个深度图。depth1,depth2.跟之前一样。不同的是第二张图片的像素坐标也要转成空间点坐标。转成空间点坐标不需要旋转和平移。
    ushort d1=depth.ptr<unsigned short>(int(keypoints_1[m.queryIdx].pt.y)[int(keypoints_1[m.queryIdx].pt.x]
    这里就把.pt看成是坐标块。
    float dd1=float(d1)/1000.0;
    Point2d p1,p2;
    p1=pixel2cam(keypoints_1[m.queryIdx].pt,K]也不是坐标块。
    pts1.pushback(Point3f(p1.x*dd1,p1.y*dd1,dd1))
    3.定义了一个函数pose_estimation_3d3d,里面变量就是pts1,pts2,R,t.R,t是求的结过。所以知道pts1,pts2就可以了。
    先计算质心Point3f p1,p2.计算完质心,计算pts1,pts2的去质心坐标,并赋值给q1,q2.然后算W
    W为qi*qi.transpose.要保证形式是Eigen::Vector3d.
    接下来只需要把w放进Eigen::JacobiSVD函数里面就可以了
    Eigen::JacobiSVD svd(w,Eigen::MatrixComputeFullU|Eigen::MatrixComputerFullV)
    然后定义U,V
    Eigen::Matrix3d U,V.
    U=svd.matrixU();
    V=svd.matrixV();
    R_=U*(V.transpose())
    t_=Eigen::Vector3d(p1)-R*Eigen::Vector3d(p2);
    然后把R_和t_转成R,t就可以了。就是R=Mat_double(3,3)<<R_(0,0)这种。
    这里求出的R,t是第二帧到第一帧的变换。而实际上要求的是第一帧到第二帧的变换。所以对R,t求逆。
    R 的逆就是它的转置。R.t().t的逆是-R.t()*t.
    这样位姿就求出来了。

  • 相关阅读:
    ansible 通过堡垒机/跳板机 访问目标机器需求实战(ssh agent forward)
    运维标准化与流程化建设
    运维与自动化运维发展方向
    文件atime未变问题的研究
    ansible 任务委派 delegate_to
    ansible 调优
    windows中安装模拟器后修改模拟器中的hosts方法
    负载均衡服务器主要考量三个指标
    DRBD+NFS+Keepalived高可用环境
    sshpass
  • 原文地址:https://www.cnblogs.com/talugirl/p/7388613.html
Copyright © 2020-2023  润新知