首页 > 解决方案 > 激光雷达到图像投影问题

问题描述

我有如下所示的 3D 点,

              objpts = np.float32([[-24.6608814740376,7.77957823997484,-0.3467245],
                        [-24.6472521660611,5.72834451906318,-0.3467245],
                        [-18.4698745259624, 5.76938976002516,-0.3467245],
                        [-18.483503833939, 7.82062348093682,-0.3467245],
                        [-24.6608814740376, 7.77957823997484, 2.4066965],
                        [-24.6472521660611, 5.72834451906318, 2.4066965],
                        [-18.4698745259624, 5.76938976002516, 2.4066965],
                      [-18.483503833939, 7.82062348093682, 2.4066965]])

JSON文件如下所示,

"camera_06":{ "extrinsics":{ "yaw_deg":-170.00001556208605, "R":[[-0.98851285476551365, 0.15101692369437689, -0.006018697634966764], [-0.15101790740705864, -0.98853098363718561, -0.00029331159425322094], [-0.0059939641079565127, 0.00061898884077741807, 0.999981844458732 ]], "x_m":-9.282084, "y_m":1.255527, "z_m":0.457751 }, "intrinsics":{ "intrinsicMatrix":{ "focalLengthX":968.749578, "focalLengthY":969.750192, "principalPointX":965.512978 , "principalPointY":651.582338 }, "intrinsicDistortion":{ "k1":-0.054333, "k2":0.025711, "k3":-0.027771, "k4":0.01073 } } },

以下是获取投影点的python代码。

    import numpy as np
    import cv2

    objpts = np.float32([[-24.6608814740376,7.77957823997484,-0.3467245],
                 [-24.6472521660611,5.72834451906318,-0.3467245],
                 [-18.4698745259624, 5.76938976002516,-0.3467245],
                 [-18.483503833939, 7.82062348093682,-0.3467245],
                 [-24.6608814740376, 7.77957823997484, 2.4066965],
                 [-24.6472521660611, 5.72834451906318, 2.4066965],
                 [-18.4698745259624, 5.76938976002516, 2.4066965],
                 [-18.483503833939, 7.82062348093682, 2.4066965]])



          obj = np.zeros((4, 1), np.float32)
         obj[0] = -24.6608814740376,
         obj[1] = 7.77957823997484,
         obj[2] = -0.3467245,
         obj[3] = 1

       rmat = np.float32([[-0.98851285476551365, 0.15101692369437689, -0.006018697634966764 ],
                 [-0.15101790740705864, -0.98853098363718561, -0.00029331159425322094],
                 [-0.0059939641079565127, 0.00061898884077741807, 0.999981844458732],
                 [0, 0, 0]])


       tVec = np.zeros((4, 1), np.float32)
       tVec[0] = -9.282084
       tVec[1] = 1.255527
       tVec[2] = 0.457751
       tVec[3] = 1


       extrinsicMatrix =  np.float32([[-0.98851285476551365, 0.15101692369437689, 
                          -0.006018697634966764,-9.282084 ],
                         [-0.15101790740705864, -0.98853098363718561, 
                        -0.00029331159425322094,1.255527],
                  [-0.0059939641079565127, 0.00061898884077741807, 
                0.999981844458732,0.457751],
                 [0, 0, 0 , 1]])

              cx = 965.512978;
              cy = 651.582338;
              fx = 968.749578;
              fy = 969.750192;

              intrinsicMat = np.array([[fx, 0, cx, 0],[0,fy,cy, 0],[0,0,1, 0]])



            rVec, jacb = cv2.Rodrigues(rmat)
            print(tVec)

           [[-9.282084]
             [ 1.255527]
             [ 0.457751]]


            distCoeffs = np.zeros((4, 1), np.float32)

          imagePoints = cv2.projectPoints(objpts, rVec, tVec, intrinsicMat, distCoeffs);

          print(imagePoints)

          (array([[[ 60753.293  ,  -9317.519  ]],

          [[ 59867.54   ,  -1880.2196 ]],

           [[ 43312.184  ,  -6485.8486 ]],

           [[ 44441.234  , -15109.788  ]],

           [[  6185.1636 ,   -219.89659]],

            [[  6083.6655 ,    431.09888]],

            [[  4163.2847 ,    111.43414]],

            [[  4266.914  ,   -547.49945]]], dtype=float32), array([[-3.80793055e+06,  
      8.90772015e+05,  7.55035231e+02,
     3.67417254e+03,  0.00000000e+00, -2.26756875e+05,
     6.17164470e+01,  0.00000000e+00,  1.00000000e+00,
     0.00000000e+00,  2.34045232e+08,  9.16193393e+11,
    -1.22924529e+06,  1.11720457e+07],
   [ 6.34783692e+05, -1.47858683e+05,  9.62898830e+04,
     0.00000000e+00,  3.67796756e+03,  3.78097678e+04,
     0.00000000e+00, -1.02800710e+01,  0.00000000e+00,
     1.00000000e+00, -3.90250391e+07, -1.52767406e+11,
     4.00114993e+06, -1.23051497e+06],
   [-3.74551768e+06,  5.75908217e+05, -5.04673084e+03,
     3.69310101e+03,  0.00000000e+00, -2.24548369e+05,
     6.08021196e+01,  0.00000000e+00,  1.00000000e+00,
     0.00000000e+00,  2.18156259e+08,  8.07988370e+11,
    -3.07560176e+05,  1.07507075e+07],
   [ 1.60788442e+05, -2.40801978e+04,  9.38000292e+04,
     0.00000000e+00,  3.69691559e+03,  9.65182400e+03,
     0.00000000e+00, -2.61077749e+00,  0.00000000e+00,
     1.00000000e+00, -9.37707017e+06, -3.47299852e+10,
     3.60489721e+06, -3.07877853e+05],
   [-2.36300974e+06,  5.45800269e+05,  3.98631375e+03,
     4.29959645e+03,  0.00000000e+00, -1.87947012e+05,
     4.37127098e+01,  0.00000000e+00,  1.00000000e+00,
     0.00000000e+00,  8.32100044e+07,  1.63505300e+11,
    -6.23349025e+05,  5.60574078e+06],
   [ 3.98204652e+05, -9.11602910e+04,  8.37772535e+04,
     0.00000000e+00,  4.30403747e+03,  3.16780235e+04,
     0.00000000e+00, -7.36007149e+00,  0.00000000e+00,
     1.00000000e+00, -1.40248491e+07, -2.75584308e+10,
     2.01059564e+06, -6.23992878e+05],
   [-2.43319999e+06,  8.18560750e+05,  1.11383957e+04,
     4.27396205e+03,  0.00000000e+00, -1.91807656e+05,
     4.48781842e+01,  0.00000000e+00,  1.00000000e+00,
     0.00000000e+00,  9.90469174e+07,  2.25649889e+11,
    -1.41322371e+06,  6.10923997e+06],
   [ 8.82146932e+05, -2.95925952e+05,  8.68453563e+04,
     0.00000000e+00,  4.27837659e+03,  6.95365476e+04,
     0.00000000e+00, -1.62530217e+01,  0.00000000e+00,
     1.00000000e+00, -3.59077464e+07, -8.18054636e+10,
     2.72163646e+06, -1.41468341e+06],
   [-2.95871793e+04,  6.83990210e+03,  1.16674830e+03,
     3.21093169e+02,  0.00000000e+00, -1.73005929e+03,
     5.38802895e+00,  0.00000000e+00,  1.00000000e+00,
     0.00000000e+00,  1.55746298e+05,  4.64722838e+06,
    -9.38141741e+03,  8.51532464e+04],
   [ 4.78341278e+03, -1.66458552e+03,  8.22846079e+03,
     0.00000000e+00,  3.21424824e+02,  2.88852700e+02,
     0.00000000e+00, -8.98663322e-01,  0.00000000e+00,
     1.00000000e+00, -2.60035820e+04, -7.75906625e+05,
     3.05021766e+04, -9.39110740e+03],
   [-2.88422454e+04,  4.39527690e+03,  5.29719956e+02,
     3.21237056e+02,  0.00000000e+00, -1.69717771e+03,
     5.28325634e+00,  0.00000000e+00,  1.00000000e+00,
     0.00000000e+00,  1.43126523e+05,  4.00246031e+06,
    -2.32733747e+03,  8.11716101e+04],
   [ 1.15450508e+03, -7.17625500e+02,  8.11457637e+03,
     0.00000000e+00,  3.21568860e+02,  7.31122489e+01,
     0.00000000e+00, -2.27361098e-01,  0.00000000e+00,
     1.00000000e+00, -6.16570787e+03, -1.72420880e+05,
     2.72188288e+04, -2.32974136e+03],
   [-1.40371509e+04,  3.16081321e+03,  8.97560816e+02,
     3.25227503e+02,  0.00000000e+00, -1.07355229e+03,
     3.30092712e+00,  0.00000000e+00,  1.00000000e+00,
     0.00000000e+00,  3.58353999e+04,  4.01584599e+05,
    -3.56230018e+03,  3.19673851e+04],
   [ 2.21954862e+03, -1.05942075e+03,  6.23356449e+03,
     0.00000000e+00,  3.25563428e+02,  1.81337936e+02,
     0.00000000e+00, -5.56997256e-01,  0.00000000e+00,
     1.00000000e+00, -6.05309826e+03, -6.78332332e+04,
     1.14690975e+04, -3.56597966e+03],
   [-1.45946686e+04,  4.77229813e+03,  1.54681618e+03,
     3.25080020e+02,  0.00000000e+00, -1.10784006e+03,
     3.40789958e+00,  0.00000000e+00,  1.00000000e+00,
     0.00000000e+00,  4.33892448e+04,  5.70250754e+05,
    -8.16426776e+03,  3.52336492e+04],
   [ 5.04188059e+03, -2.24973413e+03,  6.34860447e+03,
     0.00000000e+00,  3.25415793e+02,  4.02371817e+02,
     0.00000000e+00, -1.23648522e+00,  0.00000000e+00,
     1.00000000e+00, -1.57591424e+04, -2.07117290e+05,
     1.57104056e+04, -8.17270057e+03]]))

由于我没有得到正确的投影点,请帮助我解决问题。或者有没有其他方法可以实现这一点。

图像 激光雷达

标签: opencv

解决方案


推荐阅读