从相机空间到像素空间的投影和反投影原理和代码

目录

从相机空间到像素空间的投影

效果

​编辑

公式

​编辑

代码

像素空间到相机空间的反投影


记录一下从相机空间到像素空间的投影(3D-->2D)和像素空间到相机空间的反投影(2D-->3D)。

推荐blog:SLAM入门之视觉里程计(2):相机模型(内参数,外参数) - Brook_icv - 博客园 (cnblogs.com)

从相机空间到像素空间的投影

主要是估计出物体相对相机的位姿之后,把物体投影到2D像素平面看看mask,想看看根据marker的位姿传播的误差大不大。即看看投影误差。

效果

还是存在一些误差

公式

代码

我这里的代码是从物体坐标系--》相机坐标系--》像素坐标系

def project3Dto2D(points_local, center_local, pose, K, height, width):
    relative_points = points_local - center_local             # (0,0,0), 物体在物体坐标系下的点云的坐标
    homogeneous_points = np.ones((4,relative_points.shape[0]))
    homogeneous_points[:3,:] = relative_points.transpose()

    camera_points = np.matmul(pose, homogeneous_points)  # 物体在cam坐标系下的点云的坐标

    image_points = np.matmul(K, camera_points[:3,:]) # 相机坐标系下的点云坐标投影到图像平面

    assert np.min(image_points[2]) > 0

    image_points[0] = image_points[0]/image_points[2] # 将投影后的图像坐标除以深度,得到归一化坐标。
    image_points[1] = image_points[1]/image_points[2]

    pixel_points = np.round(image_points[:2,:]) # 对归一化坐标取整,得到像素坐标。

    mask1 = pixel_points[0,:] > -1            # 根据像素坐标的范围进行剪裁,即将超出图像范围的点云剔除。
    mask2 = pixel_points[1,:] > -1
    mask3 = pixel_points[0,:] < width
    mask4 = pixel_points[1,:] < height

    mask = mask1&mask2&mask3&mask4
    selected_index = np.where(mask)
    pixel_points = np.take(pixel_points, selected_index[0], axis=1)
    depth = np.take(image_points[2,:], selected_index[0])
    
    return pixel_points.astype(int), depth

像素空间到相机空间的反投影

主要是根据yolov8检测的mask(u,v),获取对应的深度值z,根据uvz求解出物体的在相机坐标下的3D坐标(XYZ)

cx, cy, fx, fy = 323, 238, 616, 616
x = (u - cx) / fx
y = (v - cy) / fy
x = x * z
y = y * z

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/476779.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode 684. 冗余连接

心路历程&#xff1a; 最开始的想法是把环给破开就行&#xff0c;思路&#xff1a;建图&#xff0c;遍历找环&#xff0c;然后找到edges里属于环的一个边&#xff1b;每次不选择上一步走过的边&#xff0c;DFS&#xff0c;需要回溯。后来查阅资料发现这道题适合用一个叫并查集…

那些场景需要额外注意线程安全问题

主要学习那些场景需要额外注意线程安全问题&#xff0c;在这里总结了四中场景。 访问共享变量或资源 第一种场景是访问共享变量或共享资源的时候&#xff0c;典型的场景有访问共享对象的属性&#xff0c;访问static静态变量&#xff0c;访问共享的缓存&#xff0c;等等。因为…

旅游小程序的市场与发展趋势

随着科技的发展&#xff0c;移动互联网已经成为我们生活中不可或缺的一部分。在这个时代&#xff0c;小程序已经成为了一种新的趋势&#xff0c;尤其是在旅游行业。那么&#xff0c;旅游小程序有哪些市场&#xff0c;发展趋势又怎么样呢&#xff1f; 一、旅游小程序的市场 1. 用…

WebGIS航线编辑器(无人机航线规划)

无人机航点、航线规划&#xff0c;实现全自动航点飞行作业及飞行航拍。禁飞区、作业区功能保障飞行安全。 GIS引擎加载 const viewer new Cesium.Viewer("cesiumContainer", { imageryProvider: new Cesium.IonImageryProvider({ assetId: 3872 }), }); const im…

基于微信小程序的CMS内容管理系统开发笔记

背景调研 内容管理CMS小程序的帮助运营者创建和管理小程序内容&#xff0c;提供一个直观的操作界面&#xff0c;能够轻松地添加、编辑和发布内容&#xff0c;而无需了解复杂的编程知识。可以进行栏目管理&#xff0c;文章管理&#xff0c;编辑文章内容&#xff0c;包括文字、图…

使用CUDA 为Tegra构建OpenCV

返回&#xff1a;OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;MultiArch与Ubuntu/Debian 的交叉编译 下一篇&#xff1a;在iOS中安装 警告&#xff1a; 本教程可能包含过时的信息。 使用CUDA for Tegra 的OpenCV 本文档是构建支持 CUD…

解读“CFMS中国闪存市场峰会”存储技术看点-2

根据Yole机构分析数据显示&#xff0c;CXL在2024年开始爬坡&#xff0c;在2025年将会大规模上量&#xff0c;也就是代表着CXL的时代从2025年开始正式到来。 服务器目前正面临着内存性能挑战&#xff0c;而CXL部署提供了短期和长期的解决方案。从CXL 1.1开始&#xff0c;AI云服务…

基于python+vue中医学习服务管理系统flask-django-php-nodejs

随着世界经济信息化、全球化的到来和互联网的飞速发展&#xff0c;推动了各行业的改革。若想达到安全&#xff0c;快捷的目的&#xff0c;就需要拥有信息化的组织和管理模式&#xff0c;建立一套合理、动态的、交互友好的、高效的中医学习服务管理系统。当前的信息管理存在工作…

Mysql 怎么产生隐藏主键 和 还要不要学MySQL

开头还是介绍一下群&#xff0c;如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, Oceanbase, Sql Server等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;&#xff08;…

【Django开发】前后端分离美多商城项目第3篇:用户部分,1. 后端接口设计:【附代码文档】

美多商城项目4.0文档完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;美多商城&#xff0c;项目准备1.B2B--企业对企业,2.C2C--个人对个人,3.B2C--企业对个人,4.C2B--个人对企业。项目准备&#xff0c;配置1. 修改settings/dev.py 文件中的路径信息,2. INS…

Amazon SageMaker + Stable Diffusion 搭建文本生成图像模型

如果我们的计算机视觉系统要真正理解视觉世界&#xff0c;它们不仅必须能够识别图像&#xff0c;而且必须能够生成图像。文本到图像的 AI 模型仅根据简单的文字输入就可以生成图像。 近两年&#xff0c;以ChatGPT为代表的AIGC技术崭露头角&#xff0c;逐渐从学术研究的象牙塔迈…

面试笔记——MySQL(优化篇:定位慢查询、SQL执行计划、索引、SQL优化)

定位慢查询 在MySQL应用中&#xff0c;慢查询 通常指的是执行时间超过一定阈值的查询语句。这个阈值通常由管理员或开发人员根据具体情况设置&#xff0c;一般是以毫秒为单位。慢查询可能会影响系统性能和用户体验&#xff0c;因此需要及时识别和优化。 表象&#xff1a; 页面…

探秘开源隐语:架构深度剖析与隐私计算技术之旅

1.隐语架构 隐语&#xff08;SecretFlow&#xff09;作为蚂蚁集团开源的可信隐私计算框架&#xff0c;其架构设计具有多层次的特点&#xff0c;虽然具体分层名称可能会根据实际描述略有差异&#xff0c;但我们可以依据已有的技术和信息对其进行结构化的拆解&#xff1a; 硬件层…

第一单元日考技能

文章目录 第一单元1.请用c程序随机输入20个数&#xff08;每小题10分&#xff09;2.①按要求输出*形状3.计算题  s1*12*23*3...100*100 &#xff08;每问10分&#xff09;4.1. 使用 C 创建一个简单的计算器&#xff0c;可以实现 , -, *, / 。 if switch5.图形打印 第一单元 1…

Lua | 一篇文章讲清Lua语法及热更新

目录 一、环境搭建 二、Lua语法 1.输出print、单行注释、多行注释 2.变量 &#xff08;1&#xff09;nil &#xff08;2&#xff09;number &#xff08;3&#xff09;string &#xff08;3.1&#xff09;字符串长度 &#xff08;3.2&#xff09;字符串拼接 &#xf…

LeetCode每日一题——数组串联

数组串联OJ链接&#xff1a;1929. 数组串联 - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; 思路&#xff1a; 题目说 ans 由两个 nums 数组 串联 形成。那么我们就只需要历遍两次nums数组&#xff0c;将它放在我们的ans数组里。 注意&#xff1a; 题目函数对于我…

Day22:过滤敏感词、开发发布帖子、帖子详情

过滤敏感词 前缀树 - 名称:Trie、字典树、查找树 - 特点:查找效率高&#xff0c;消耗内存大 - 应用:字符串检索、词频统计、字符串排序等在这里插入图片描述 敏感词过滤器的步骤 根节点不包含任何字符&#xff1b;其余每个节点只有一个字符&#xff1b;连接起来一条路就是字…

StarRocks 助力金融营销数字化进化之路

作者&#xff1a;平安银行 数据资产中心数据及 AI 平台团队负责人 廖晓格 平安银行五位一体&#xff0c;做零售金融的领先银行&#xff0c;五位一体是由开放银行、AI 银行、远程银行、线下银行、综合化银行协同构建的数据化、智能化的零售客户经营模式&#xff0c;这套模式以数…

python 爬虫爬取地理空间高程图GDEMV2 30m 中国地形

一.配置Python 爬虫 环境 from selenium import webdriver import time # from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.by import Byfrom selenium.webdriver.common.keys import Keys # from selenium.webdriver.comm…

算法体系-14 第十四 贪心算法(上)

一 、 递归套路解决判断完全二叉树 1.1 描述 1.2 分析 1.3 代码 public static boolean isCBT2(Node head) {return process(head).isCBT;}public static class Info {public boolean isFull;public boolean isCBT;public int height;public Info(boolean full, boolean cbt…
最新文章