Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >旋转投影

旋转投影

作者头像
裴来凡
发布于 2022-05-29 01:22:52
发布于 2022-05-29 01:22:52
1.1K00
代码可运行
举报
运行总次数:0
代码可运行
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from scipy import linalg
import numpy as np
import matplotlib.pyplot as plt
class Camera(object):
    def __init__(self, P):
        self.P=P
        self.K=None#标定矩阵
        self.R=None#照相机旋转
        self.t=None#照相机平移
        self.c=None#照相机中心    
    def project(self,X):
        x=np.dot(self.P,X)
        for i in range(3):
            x[i]/=x[2]
        return x
    def rotationMatrix(self,a):
        R=np.eye(4)
        R[:3,:3]=linalg.expm([[0,-a[2],a[1]],[a[2],0,-a[0]],[-a[1],a[0],0]])
        return R
if __name__=="__main__":
    points=np.loadtxt('C:/Users/xpp/Desktop/3D/bt.p3d')# 载入点数据
    points=points.swapaxes(0,1)#交换维度以读取   
    points=np.vstack((points,np.ones(points.shape[1])))# 齐次坐标   
    P=np.hstack((np.eye(3), np.array([[0],[0],[-10]])))# 设置照相机参数
    cam=Camera(P)
    x=cam.project(points)
    #绘制投影
    plt.figure()
    plt.plot(x[0],x[1],'k.',color='pink')
    plt.show()
    #创建变换
    r=0.05*np.random.random(3)
    rot=cam.rotationMatrix(r)
    #旋转矩阵和投影
    plt.figure()
    for t in range(100):
        cam.P=np.dot(cam.P,rot)
        x=cam.project(points)
        plt.plot(x[0],x[1],'k.',color='pink')
        plt.show()

算法:旋转投影是通过照相机旋转进行投影,围绕一个随机的三维向量进行增量旋转的投影。

文献:Paumann-Page, M. , Tscheliessnig, R. , Sevcnikar, B. , Katz, R. S. , & Obinger, C. . (2019). Monomeric and homotrimeric solution structures of truncated human peroxidasin 1 variants. Biochimica et Biophysica Acta (BBA) - Proteins & Proteomics, 1868(1).

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-09-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 图像处理与模式识别研究所 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
相机矩阵
[[1000 1000 300] [ 0 1000 300] [ 0 0 1]] [[ 0.54030231 -0.84147098 0. 50. ] [ 0.84147098 0.54030231 0. 40. ] [ 0. 0. 1. 30. ]] (array([[ 1.e+03, -1.e+03, 3.e+02], [ 0.e+00, -1.e+03, 3.e+02], [ 0.e+00, 0.e+00, 1.e+00]]), array([[ 0.54030231, -0.84147098, 0. ], [-0.84147098, -0.54030231, 0. ], [ 0. , 0. , 1. ]]), array([ 50., -40., 30.]))
裴来凡
2022/05/29
4740
相机矩阵
三维投影
算法:三维投影是通过针孔照相机模型,在光线投影到图像平面之前,从唯一一个点经过,也就是照相机中心进行投影。如果图像坐标轴和三维坐标系中中x、y轴对齐、平行的话,可以得出针孔照相机的投影性质。照相机的光学坐标轴和z轴一致,该投影几何可以简化成相似三角形。在头硬质前通过旋转和平移变换,对该坐标系加入三维点,会出现完整的投影变换。
裴来凡
2022/05/29
4990
三维投影
手眼标定算法Tsai-Lenz代码实现(Python、C++、Matlab)
上一节介绍了手眼标定算法Tsai的原理,这一节介绍算法的代码实现,分别有Python、C++、Matlab版本的算法实现方式。
全栈程序员站长
2022/08/31
1.6K0
LQR的横向控制与算法仿真实现
在现代控制理论的领域中,线性二次型调节器(Linear Quadratic Regulator,简称LQR)被广泛认可为一种高效的优化控制方法。LQR的核心优势在于其能力,通过最小化一个定义良好的二次型代价函数,来设计出能够引导系统达到预定性能指标的控制策略。尽管LQR最初是为线性时不变系统(Linear Time-Invariant, LTI)设计的,但其在稳定性和性能优化方面的卓越表现,已经使得它在航空航天、机器人技术、汽车工业等多个高端技术领域得到了广泛应用。
艰默
2024/04/03
7270
LQR的横向控制与算法仿真实现
PID横向控制和仿真实现
PID是一种常见的控制算法,全称为Proportional-Integral-Derivative,即比例-积分-微分控制器。PID控制器是一种线性控制器,它将设定值与实际值进行比较,根据误差的大小,控制器会相应地调整系统的比例、积分和微分系数,以减小误差。
艰默
2024/01/11
3900
PID横向控制和仿真实现
A simple augmented reality application
在 OpenGL 中主要使用 4x4 矩阵来表示转换,这个和 3x4 的相机矩阵不同。然而,OpenGL 中的 GL_PROJECTION 和 GL_MODELVIEW 是将相机矩阵分开来表示。其中 GL_PROJECTION 表示相机的内参数 K 矩阵;GL_MODELVIEW 表示物体和相机之间的转换关系,可以粗略地表示为 R 和 t 矩阵。
caoqi95
2019/10/18
8820
Camera-Lidar投影:2D-3D导航
激光雷达和照相机是用于感知和理解场景的两个基本传感器。他们建立周边环境模型、提供检测和确定其他对象位置的方法,从而为机器人提供了安全导航所需的丰富语义信息。许多研究人员已开始探索用于精确3D对象检测的多模式深度学习模型。Aptiv开发的PointPainting [1]算法是一个非常有趣的例子。
小白学视觉
2020/07/24
2.6K0
Camera-Lidar投影:2D-3D导航
【论文阅读】BEVFromer-从多相机图像中学习BEV表达(1)
GridMask属于Information Dropping的方法,它通过随机在图像上丢弃一块区域,作用相当于在网络上增加一个正则项,避免网络过拟合。
YoungTimes
2023/09/01
6630
【论文阅读】BEVFromer-从多相机图像中学习BEV表达(1)
Numpy和MatplotlibPython科学计算——Numpy线性代数模块(linalg)随机模块(random)Python的可视化包 – Matplotlib2D图表3D图表图像显示
Python科学计算——Numpy Numpy(Numerical Python extensions)是一个第三方的Python包,用于科学计算。这个库的前身是1995年就开始开发的一个用于数组运算的库。经过了长时间的发展,基本上成了绝大部分Python科学计算的基础包,当然也包括所有提供Python接口的深度学习框架。 基本类型(array) array,也就是数组,是numpy中最基础的数据结构,最关键的属性是维度和元素类型,在numpy中,可以非常方便地创建各种不同类型的多维数组,并且执行一些基本
SeanCheney
2018/04/24
2.7K0
Numpy和MatplotlibPython科学计算——Numpy线性代数模块(linalg)随机模块(random)Python的可视化包 – Matplotlib2D图表3D图表图像显示
SETTLE约束算法的批量化处理
在上一篇文章中,我们介绍了在分子动力学模拟中SETTLE约束算法的实现与应用,其中更多的是针对于单个的水分子。但由于相关代码是通过jax这一框架来实现的,因此对于多分子的体系,可以采用jax所支持的vmap来实现,简单快捷。同时为了模块化的编程,本文中的代码相对于上一篇文章做了函数封装,也更符合jax这种函数化编程的风格。
DechinPhy
2022/05/09
2960
SETTLE约束算法的批量化处理
纯跟踪横向控制和算法仿真实现
Pure Pursuit是一种几何跟踪控制算法,也被称为纯跟踪控制算法。他的思想就是基于当前车辆的后轮中心的位置,在参考路径上寻找一个预瞄点,假设车辆可按照一定转弯半径下行驶到该目标点,然后根据车辆当前位置到预瞄点距离、转弯半径和预瞄点与车头朝向夹角的几何关系来计算车辆的前轮转角,即控制车辆的横向跟踪误差。
艰默
2024/01/17
6130
纯跟踪横向控制和算法仿真实现
线性判别分析之python代码分析
前几天主要更新了一下机器学习的相关理论,主要介绍了感知机,SVM以及线性判别分析。现在用代码来实现一下其中的模型,一方面对存粹理论的理解,另一方面也提升一下代码的能力。本文就先从线性判别分析开始讲起,不熟悉的可以先移步至线性判别分析(Linear Discriminant Analysis, LDA) - ZhiboZhao - 博客园 (cnblogs.com)对基础知识做一个大概的了解。在代码分析过程中,本文重点从应用入手,只讲API中最常用的参数,能够完成任务即可。 本文代码参考链接:https://github.com/han1057578619/MachineLearning_Zhouzhihua_ProblemSets
呆呆
2021/07/05
1K0
分子动力学模拟之SETTLE约束算法
在上一篇文章中,我们讨论了在分子动力学里面使用LINCS约束算法及其在具备自动微分能力的Jax框架下的代码实现。约束算法,在分子动力学模拟的过程中时常会使用到,用于固定一些既定的成键关系。例如LINCS算法一般用于固定分子体系中的键长关系,而本文将要提到的SETTLE算法,常用于固定一个构成三角形的体系,最常见的就是水分子体系。对于一个水分子而言,O-H键的键长在模拟的过程中可以固定,H-H的长度,或者我们更常见的作为一个H-O-H的夹角出现的参量,也需要固定。纯粹从计算量来考虑的话,RATTLE约束算法需要迭代计算,LINCS算法需要求矩阵逆(虽然已经给出了截断优化的算法),而SETTLE只涉及到坐标变换,显然SETTLE在约束大规模的水盒子时,性能会更加优秀。
DechinPhy
2022/05/09
9160
分子动力学模拟之SETTLE约束算法
车辆运动学方程推导和代码实现
自行车模型(Bicycle Model)是车辆数字化模型中最常见的一种运动学模型。其除了可以反映车辆的一些基础特性外,更重要的是简单易用。通常情况下我们会把车辆模型简化为二自由度的自行车模型。
艰默
2024/01/04
6440
车辆运动学方程推导和代码实现
Stanley横向控制与算法仿真实现
Stanley横向控制就是我们常说的前轮反馈控制(Front wheel feedback),是一种基于横向跟踪误差的非线性反馈控制算法,其核心思想是根据车辆位姿与给定路径的相对几何关系来控制车辆方向盘转角。具体来说,Stanley横向控制算法将车辆的横向跟踪误差和航向跟踪误差作为反馈信号,通过非线性比例函数计算出前轮转向角,以减小横向跟踪误差并提高车辆的横向跟踪性能。
艰默
2024/01/17
4820
Stanley横向控制与算法仿真实现
LDA有标签数据降维
之前无标签数据降维PCA,那么像下图带有标签数据,如果用PCA降维将会投影到v轴上,这个投影方差最大,数据将变成不可分状态,LDA将把数据投影加上已有分类这个变量,将数据投影到u轴上 假设原数据分成n
用户1733462
2018/06/01
1.1K0
KITTI数据集应用指南1:坐标转换
KITTI数据集是自动驾驶领域最知名的数据集之一。可以用来从事立体图像、光流估计、三维检测、三维跟踪等方面的研究。
点云乐课堂
2020/05/18
2.3K0
基于OpenCV的位姿估计
单应性是一种平面关系,可将点从一个平面转换为另一个平面。它是一个3乘3的矩阵,转换3维矢量表示平面上的2D点。这些向量称为同质坐标,下面将进行讨论。下图说明了这种关系。这四个点在红色平面和图像平面之间相对应。单应性存储相机的位置和方向,这可以通过分解单应性矩阵来检索。
小白学视觉
2020/11/05
1.8K0
基于OpenCV的位姿估计
【数值计算方法(黄明游)】矩阵特征值与特征向量的计算(五):Householder方法【理论到程序】
  Jacobi 旋转法的每一次迭代中,需要选择一个非对角元素最大的位置,然后构造相应的旋转矩阵,进行相似变换,使得矩阵逐渐对角化。
Qomolangma
2024/07/30
1690
【数值计算方法(黄明游)】矩阵特征值与特征向量的计算(五):Householder方法【理论到程序】
后轮位置反馈控制与算法仿真实现
后轮反馈控制(Rear wheel feedback)算法是利用后轮中心的跟踪偏差来进行转向控制量计算的方法,属于Frenet坐标系的一个应用。通过选择合适的李雅普诺夫函数设计控制率,利用后轮中心的跟踪偏差来进行转向控制量计算的方法。
艰默
2024/03/04
2760
后轮位置反馈控制与算法仿真实现
推荐阅读
相关推荐
相机矩阵
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验