计算相机投影矩阵(含代码)(Python)

这篇具有很好参考价值的文章主要介绍了计算相机投影矩阵(含代码)(Python)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

计算相机投影矩阵(含代码)(Python)

前几天处理点云时,需要使用到像片与3D点云的对应关系。在这边找了一圈没有发现直接可用的代码,于是去GitHub试了一下,以下是一个提炼后的矩阵计算代码。
下面展示 矩阵计算代码

import warnings
import numpy as np
import os
import argparse
import cv2
import os
import glob

def calculate_projection_matrix(points_2d, points_3d):
    """
    To solve for the projection matrix. You need to set up a system of
    equations using the corresponding 2D and 3D points:

                                                      [ M11      [ u1
                                                        M12        v1
                                                        M13        .
                                                        M14        .
    [ X1 Y1 Z1 1 0  0  0  0 -u1*X1 -u1*Y1 -u1*Z1        M21        .
      0  0  0  0 X1 Y1 Z1 1 -v1*X1 -v1*Y1 -v1*Z1        M22        .
      .  .  .  . .  .  .  .    .     .      .       *   M23   =    .
      Xn Yn Zn 1 0  0  0  0 -un*Xn -un*Yn -un*Zn        M24        .
      0  0  0  0 Xn Yn Zn 1 -vn*Xn -vn*Yn -vn*Zn ]      M31        .
                                                        M32        un
                                                        M33 ]      vn ]

    Then you can solve this using least squares with np.linalg.lstsq() or SVD.
    Notice you obtain 2 equations for each corresponding 2D and 3D point
    pair. To solve this, you need at least 6 point pairs.

    Args:
    -   points_2d: A numpy array of shape (N, 2)
    -   points_3d: A numpy array of shape (N, 3)

    Returns:
    -   M: A numpy array of shape (3, 4) representing the projection matrix
    """

    # Placeholder M matrix. It leads to a high residual. Your total residual
    # should be less than 1.
    ###########################################################################
    ###########################################################################
    b=np.zeros(((int(2*points_3d.shape[0])),1))
    A=np.zeros((int(2*points_3d.shape[0]),12))
    x=0
    for i in range(0,points_3d.shape[0]):
    	A[x,0:3]=points_3d[i,:]
    	A[x,3]=1
    	A[x,8:11]=-points_2d[i,0]*points_3d[i,:]
    	A[x,11]=-points_2d[i,0]
    	A[x+1,4:7]=points_3d[i,:]
    	A[x+1,7]=1
    	A[x+1,8:11]=-points_2d[i,1]*points_3d[i,:]
    	A[x+1,11]=-points_2d[i,1]
    	x=x+2
    U,S,VT=np.linalg.svd(A)
    V=VT.T
    Mtemp=V[:,V.shape[1]-1]
    M=np.zeros((3,4))
    M[0,:]=Mtemp[:4]
    M[1,:]=Mtemp[4:8]
    M[2,:]=Mtemp[8:12]
    ###########################################################################
    ###########################################################################

    return M

data_dir = os.path.dirname(__file__) + '/data/'
Points_2D = np.loadtxt(data_dir + 'new2d.txt')
Points_3D = np.loadtxt(data_dir + 'new3d.txt')
P = calculate_projection_matrix(Points_2D,Points_3D)

print(P)

结语

代码源于
链接: AdityaNair111
最后感谢piong233的热心帮助文章来源地址https://www.toymoban.com/news/detail-610419.html

到了这里,关于计算相机投影矩阵(含代码)(Python)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python实战应用讲解-【numpy科学计算】line_profiler模块(附python示例代码)

    目录   Numpy 安装line_profiler 准备工作 具体步骤 Numpy 用line_profiler分析代码 具体步骤 攻略小结

    2023年04月08日
    浏览(51)
  • 利用最小二乘法求解相机投影矩阵

    1、相机成像几何模型的建立 为了得到三维空间物体表面某点的几何位置与其所在二维平面图像中对应点之间的相关关系,需要建立相机成像的几何模型。 为了建立几何模型,首先需要构建几个重要的坐标系: 世界坐标系(World Coordinate):在环境中建立的三维坐标系,用来

    2024年02月05日
    浏览(47)
  • numpy 矩阵向量相除(python)

    下面看一个简单的例子就明白了

    2024年02月13日
    浏览(34)
  • python实现混淆矩阵(numpy)

    假设有A、B、C、D、E五个类别 step1:将pred和label进行一对一组合 Step2:遍历list_pred_label,将其中的类别转为混淆矩阵索引(A:0,B:1,C:2,D:3,E:4) step3:对混淆矩阵进行赋值

    2024年02月12日
    浏览(35)
  • 【python】使用numpy创建同心矩阵

    输入一个正奇数N,创建一个N*N的矩阵满足: 1. 矩阵中心的元素为N,其外层被N-1包围; 2. N-1的外层被N-2包围; 3. 依次循环,直到形成一个N*N的矩阵。 很容易可以计算得出,矩阵元素从内到外递减,最外层的元素为(N+1)/2. 我们可以使用numpy从外向内地填充矩阵;首先生成一个

    2024年02月13日
    浏览(43)
  • Python numpy - 数组与矩阵的运算

    目录  数组array 一 数组的函数 unique函数  sum函数  max函数 二 数组的加减 三 数组的乘除  矩阵matrix 一 矩阵的生成 二 矩阵的加减 三  矩阵的乘法 创建数组a和b用来运算(至少两个) 数组常用函数 函数 作用 unique() 求数组里的唯一值,输出从小到大排列 sum() 对数组整

    2024年02月11日
    浏览(45)
  • Python学习(2)-NumPy矩阵与通用函数

    文章首发于:My Blog 欢迎大佬们前来逛逛 data:表示输入的 数组 或者 字符串 ,使用‘,’分割列,使用‘;’分割行 创建两个普通的矩阵: 需要注意:mat创建的矩阵是不会产生副本的,即 共享内存 : matrix也是创建矩阵的: data:数组或者字符串,与mat一样 copy:表示创建

    2024年03月25日
    浏览(31)
  • python中numpy矩阵的零填充

    目录 需求:  方法: 一、再new一个更大的所需要的矩阵大小   二、pad函数  其他想法 对于图像处理中的一些过程,我需要对读取的numpy矩阵进行size的扩充,比如原本是(4,6)的矩阵,现在需要上下左右各扩充3行,且为了不影响数值计算,都用0填充。 比如下图,我有一个

    2024年02月11日
    浏览(33)
  • Python库第一课:基础Numpy知识(下):矩阵

            好的,我们今天继续来学习Numpy的基础,昨天,已经介绍完Numpy的成员之一——数组,今天,在接着介绍其另一大成员——矩阵,也是应用非常广泛的成员。         矩阵,在线性代数中是几乎贯穿全文的成员,因此,这里需要较高的线性代数的基础。在这里,默认

    2024年02月03日
    浏览(54)
  • Python,Numpy 轻松实现矩阵每一列升序排列

    my_array.sort()改变有序数组并返回已排序数组。 np.sort(my_array)返回已排序数组的副本,因此原始数组不会改变。 以下是可选参数。 axis:int,可选—要排序的轴。默认值为-1,表示沿最后一个轴排序。 kind:{\\\'quicksort\\\',\\\'mergesort\\\',\\\'heapsort\\\',\\\'stable\\\'},可选—排序算法。默认为\\\'quic

    2024年02月11日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包