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

news/2025/1/12 19:47:36/

代码链接: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) / dxcx,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 + cxv = Y * fy / Z + cyD(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_xu = 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@staticmethoddef convert_cc_to_ic(joint_cam):"""相机坐标系 -> 像素坐标系:param joint_cam::return:"""# 相机坐标系 -> 像素坐标系,并 get relative depth# Subtract center depth# 选择 Pelvis骨盆 所在位置作为相机中心,后面用之求relative depthroot_idx = 0center_cam = joint_cam[root_idx]  # (x,y,z) mmjoint_num = len(joint_cam)f = camera_intrinsic["f"]c = camera_intrinsic["c"]# joint image_dict,像素坐标系,Depth 为相对深度 mmjoint_img = np.zeros((joint_num, 3))joint_img[:, 0], joint_img[:, 1], joint_img[:, 2] = CameraTools.__cam2pixel(joint_cam, f, c)  # x,yjoint_img[:, 2] = joint_img[:, 2] - center_cam[2]  # zreturn joint_img

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


http://www.ppmy.cn/news/1107812.html

相关文章

redis 常用数据结构2

目录 list LPUSH LRANGE LPUSHX RPUSH RPUSHX LPOP RPOP LINDEX LINSERT LLEN LREM LTRIM LSET BLPOP / BRPOP 编码方式 set SADD SMEMBERS SISMEMBER SPOP SCARD SRANDMEMBER SMOVE SREM SINTER SINTERSTORE SUNION SUNIONSTORE SDIFF SDIFFSTO…

leetcode分类刷题:队列(Queue)(三、优先队列用于归并排序)

1、当TopK问题出现在多个有序序列中时,就要用到归并排序的思想了 2、将优先队列初始化为添加多个有序序列的首元素的形式,再循环K次优先队列的出队和出队元素对应序列下个元素的入队,就能得到TopK的元素了 3、这些题目好像没有TopK 大用小顶堆…

电脑静态ip地址在哪里找

在计算机网络中,每台设备都需要一个唯一的IP地址来进行通信。大多数情况下,计算机会自动获取一个动态IP地址,但有时我们可能需要设置静态IP地址。然而,对于不太熟悉网络设置的人来说,找到电脑的静态IP地址可能会有些困…

科技资讯|苹果虚拟纸可在Vision Pro中为广告、书籍等提供MR内容和动画

近日,美国专利商标局正式授予苹果一项与虚拟纸张相关的专利。这是与虚拟纸张这项发明相关的第二项专利,鉴于苹果 Vision Pro 将于明年上市,那么我们离苹果实现虚拟纸张的发明又近了一步。 虚拟纸张将能够包含 2D、3D 和动画等 MR内容&#…

AI伦理与未来社会:探讨人工智能的道德挑战与机会

引言 引出AI伦理和社会影响的主题,强调AI的快速发展和广泛应用。 概述博客的主要内容:探讨AI的伦理挑战以及它对社会的影响。 第一部分:AI的伦理挑战 算法偏见: 解释什么是算法偏见,以及它为何在AI中成为一个重要问题。…

(二十七)大数据实战——hbase高可用集群安装与部署

前言 本节内容我们主要介绍HBase高可用集群的安装部署。HBase是一个开源的分布式非关系型数据库管理系统(NoSQL),它运行在Apache Hadoop之上。它基于Google的Bigtable论文设计,并且具有高扩展性、高可靠性和高性能的特点。HBase通…

基于开源模型搭建实时人脸识别系统(五):人脸跟踪

继续填坑,之前已经讲了人脸检测,人脸识别实战之基于开源模型搭建实时人脸识别系统(二):人脸检测概览与模型选型_开源人脸识别模型_CodingInCV的博客-CSDN博客,人脸检测是定位出画面中人脸的位置&#xff0c…

2022年全国研究生数学建模竞赛华为杯C题汽车制造涂装-总装缓存调序区调度优化问题求解全过程文档及程序

2022年全国研究生数学建模竞赛华为杯 C题 汽车制造涂装-总装缓存调序区调度优化问题 原题再现: 背景介绍   汽车制造厂主要由焊装车间、涂装车间、总装车间构成,每个车间有不同的生产偏好,如:焊装车间由于车身夹具的限制偏向最…