相机坐标系 -> 像素坐标系

news2024/11/24 6:09:09

代码链接:https://github.com/PanJinquan/python-learning-notes/blob/master/modules/utils_3d/camera_tools.py 

def __cam2pixel(cam_coord, f, c):
        """
        相机坐标系 -> 像素坐标系: (f / dx) * (X / Z) = f * (X / Z) / dx
        cx,ppx=260.166; cy,ppy=205.197; fx=367.535; fy=367.535
        将从3D(X,Y,Z)映射到2D像素坐标P(u,v)计算公式为:
        u = X * fx / Z + cx
        v = Y * fy / Z + cy
        D(v,u) = Z / Alpha
        =====================================================
        camera_matrix = [[428.30114, 0.,   316.41648],
                        [   0.,    427.00564, 218.34591],
                        [   0.,      0.,    1.]])

        fx = camera_intrinsic[0, 0]
        fy = camera_intrinsic[1, 1]
        cx = camera_intrinsic[0, 2]
        cy = camera_intrinsic[1, 2]
        =====================================================
        :param cam_coord:
        :param f: [fx,fy]
        :param c: [cx,cy]
        :return:
        """
        # 等价于:(f / dx) * (X / Z) = f * (X / Z) / dx
        # 三角变换, / dx, + center_x
        u = cam_coord[..., 0] / cam_coord[..., 2] * f[0] + c[0]
        v = cam_coord[..., 1] / cam_coord[..., 2] * f[1] + c[1]
        d = cam_coord[..., 2]
        return u, v, d

    @staticmethod
    def convert_cc_to_ic(joint_cam):
        """
        相机坐标系 -> 像素坐标系
        :param joint_cam:
        :return:
        """
        # 相机坐标系 -> 像素坐标系,并 get relative depth
        # Subtract center depth
        # 选择 Pelvis骨盆 所在位置作为相机中心,后面用之求relative depth
        root_idx = 0
        center_cam = joint_cam[root_idx]  # (x,y,z) mm
        joint_num = len(joint_cam)
        f = camera_intrinsic["f"]
        c = camera_intrinsic["c"]
        # joint image_dict,像素坐标系,Depth 为相对深度 mm
        joint_img = np.zeros((joint_num, 3))
        joint_img[:, 0], joint_img[:, 1], joint_img[:, 2] = CameraTools.__cam2pixel(joint_cam, f, c)  # x,y
        joint_img[:, 2] = joint_img[:, 2] - center_cam[2]  # z
        return joint_img

__cam2pixel函数并没有处理相机坐标系中cam_coord[…, 2]的值,直接返回当作深度值。这是因为这个函数只是用来将相机坐标系中的点转换到像素坐标系中的点的,不需要对深度值做任何变换。深度值的变换是在convert_cc_to_ic函数中进行的,这个函数会将所有点的深度值减去根节点(Pelvis骨盆)的深度值,得到相对深度值。这样做的目的是为了消除相机位置和姿态对深度值的影响,只保留点之间的相对距离。 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分库分表---理论

目录 一、垂直切分 1、垂直分库 2、垂直分表 3、垂直切分优缺点 二、水平切分 1、水平分库 2、水平分表 3、水平切分优缺点 三、数据分片规则 1、Hash取模分表 2、数值Range分表 3、一致性Hash算法 四、分库分表带来的问题 1、分布式事务问题 2、跨节点关联查询…

【FAQ】本地录像视频文件如何推送到视频监控平台EasyCVR进行AI视频智能分析?

安防监控平台EasyCVR支持多协议、多类型设备接入,可以实现多现场的前端摄像头等设备统一集中接入与视频汇聚管理,并能进行视频高清监控、录像、云存储与磁盘阵列存储、检索与回放、级联共享等视频功能。视频汇聚平台既具备传统安防监控、视频监控的视频能…

Vue2电商前台项目——完成Search搜索模块业务

Vue2电商前台项目——完成Search搜索模块业务 Vue基础知识点击此处——Vue.js 文章目录 Vue2电商前台项目——完成Search搜索模块业务一、项目开发的步骤二、各种请求数据并展示数据1、写Search模块的接口2、写Vuex中的search仓库3、组件拿到search仓库的数据(1&…

详解HPE MSA 2040存储初始化配置划分卷

哈喽大家好,欢迎来到虚拟化时代君(XNHCYL)。 “ 大家好,我是虚拟化时代君,一位潜心于互联网的技术宅男。这里每天为你分享各种你感兴趣的技术、教程、软件、资源、福利……(每天更新不间断,福…

mock技术在测试中的应用

技术简介 mock技术又叫测试桩、挡板 在软件测试中,对于一些不容易构造、获取的对象,用一个虚拟的对象来代替它,以达到相同的效果,这个虚拟的对象就是mock。 mock技术并不是只有测试领域用,最早是在开发领域应用&…

互联网电视流氓乱收费被市场惩罚,传统品牌合力挤压互联网电视

市调机构洛图科技(RUNTO)公布的6月份数据显示,传统电视品牌强势反弹,海信、TCL、创维的销量分别为60万台、58万台、57万台,名次分别为第一名、第三名、第四名,而曾连续数年位居国内电视行业第一名的某互联网…

精品基于NET实现的汽配网上商城系统

《[含文档PPT源码等]精品基于NET实现的汽配网上商城系统》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程等 软件开发环境及开发工具: 开发软件:VS 2017 (版本2017以上即可,不能低于2017) 数…

第十二章总结

一.集合类概述 java.util包中提供了一些集合类,这些集合类又被称为容器。 集合类与数组的不同之处: 数组的长度是固定的,集合的长度是可变的:数组用来存放基本类型的数据,集合用来存放对象的引用。 常…

windows10系统下Python3.11中安装Numpy库教程

Python3.11中安装Numpy库目录 项目场景:问题描述解决方案:①下载Numpy文件②把NumPy文件放到Python安装的Scripts文件夹里。③安装numpy④安装验证 项目场景: numpy是开源的数值计算扩展,用于数据分析、机器学习、科学计算的重要…

(第十一天)初识SpringMVC SSM框架的学习与应用(Spring + Spring MVC + MyBatis)-Java EE企业级应用开发学习记录

SSM框架的学习与应用(Spring Spring MVC MyBatis)-Java EE企业级应用开发学习记录(第十一天)初识SpringMVC 今天我们要来学习一下SSM框架的最后一个框架SpringMVC 一、初认SpringMVC 基本概念: ​ Spring MVC(Model-View-Co…

Qt应用开发(基础篇)——菜单 QMenu

一、前言 QMenu类继承于QWidget,它提供了一个菜单样式的小部件,用于菜单栏、上下文菜单和一些弹出式菜单。 QMenu菜单的选项是可选的,它可以是一个下拉的菜单,也可以是独立的上下文菜单。下拉菜单通常作用于当用户单击相应的项目或…

Unity——模拟AI视觉

人类的视觉系统有以下几个特点: 距离有限。近处看得清,远处看不清容易被遮挡。不能穿过任何不透明的障碍物视野范围大约为90度。实现正前方信息丰富,具有色彩和细节;实现外侧的部分只有轮廓和运动信息注意力有限。当关注某个具体的…

深入浅出学Verilog--数据类型

1、数值类型 在Verilog可以用4种数值来描述其构建的电路的电平逻辑,除了event类型和real类型外,几乎所有的数据类型都可以用这4种数值来表示。 0:代表逻辑0,或者条件“假”1:代表逻辑1,或者条件“真”x或X…

ubuntu基本配置

记录一下每次重新安装系统之后都要进程的操作 更新源 更新源的教程 sudo bash -c "cat << EOF > /etc/apt/sources.list && apt update deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse deb-src http://mirrors.a…

《Envoy 代理:云原生时代的流量管理》

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f405;&#x1f43e;猫头虎建议程序员必备技术栈一览表&#x1f4d6;&#xff1a; &#x1f6e0;️ 全栈技术 Full Stack: &#x1f4da…

持安科技孙维伯:零信任理念下的实战攻防:ISC2023数字小镇演讲

近日&#xff0c;在ISC 2023第十一届互联网安全大会上&#xff0c;持安科技联合创始人孙维伯作为零信任办公安全赛道代表&#xff0c;亮相数字小镇New50&#xff0c;并发表《全方位防御&#xff1a;零信任理念下的实战攻防》主题演讲。 以下是本次演讲实录&#xff1a; 这几年…

第9章_freeRTOS入门与工程实践之任务管理

本教程基于韦东山百问网出的 DShanMCU-F103开发板 进行编写&#xff0c;需要的同学可以在这里获取&#xff1a; https://item.taobao.com/item.htm?id724601559592 配套资料获取&#xff1a;https://rtos.100ask.net/zh/freeRTOS/DShanMCU-F103 freeRTOS系列教程之freeRTOS入…

考虑负荷满意度的微电网运行多目标优化方法研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

基本Dos命令

1.打开cmd的方式 &#xff08;1&#xff09;winR&#xff0c;输入cmd即可 &#xff08;2&#xff09;在任意文件夹下面&#xff0c;按住shift键后点击鼠标右键&#xff0c;即可在此文件夹目录下打开命令行窗口。 &#xff08;3&#xff09;资源管理器的地址栏前面加上 cmd…

云原生Kubernetes:K8S实用插件和工具

目录 一、理论 1.Kubectl插件 2.kubens 3.krew 二、实验 1.kubectl插件 2.kubens 3.krew 一、理论 1.kubectl插件 &#xff08;1&#xff09;概念 kubectl插件其实就是以kubectl-为前缀的任意可执行文件&#xff0c;比如执行: ln -s /bin/echo /usr/local/bin/ku…