相机坐标系到图像坐标系

相机坐标系到图像坐标系是计算机视觉中的重要概念。相机坐标系指的是描述相机位置和姿态的坐标系,而图像坐标系指的是相机拍摄到的图像上的坐标系。在许多计算机视觉应用中,需要将3D点投影到2D图像上,因此需要了解相机坐标系到图像坐标系的转换。

一、坐标系的介绍

在计算机视觉中,我们通常使用右手坐标系。右手坐标系的三个坐标轴用手指表示,x轴用大拇指,y轴用食指,z轴用中指。当大拇指、食指和中指方向分别为x、y、z轴正方向时,拇指和食指的方向的螺旋转向就是z轴正方向。

相机坐标系是一个右手坐标系。与相机平行且过原点的为z轴,垂直于相机平面的为y轴,与z轴和y轴方向成直角的为x轴。

图像坐标系是一个左手坐标系,其中x轴从左到右,y轴从上至下,原点在左上角。

二、相机内参和外参

相机内参是相机固有的属性,包括相机的焦距、主点等参数。用矩阵K描述相机内参:

K = [ f_x   0    c_x ]
    [  0   f_y   c_y ]
    [  0    0     1  ]

其中f_x、f_y是相机的焦距,c_x、c_y是相机的主点。

相机外参指的是相机在3D空间中的位置和朝向。用矩阵R、t描述相机外参:

[R t] = [ r_1 r_2 r_3 t ]
       [  0  0   0  1 ]

其中r_1、r_2、r_3分别是相机的朝向向量,t是相机的位置向量。

三、相机坐标系到图像坐标系的转换

将3D点P通过K、R、t矩阵投影到2D图像上的过程可以表示为:

p = K * [R t] * P

其中,p表示图像上的点,P表示3D空间中的点,*表示矩阵乘法。

将p的齐次坐标归一化后可得到图像坐标系下的坐标:

[x, y, w] = p
u = x / w
v = y / w

其中,u、v分别是图像坐标系下的坐标,w是一个常量,通常为1。

四、代码示例

1. 相机内参、外参定义

import numpy as np

# 相机内参
fx = 500  # 焦距
fy = 500
cx = 320  # 主点
cy = 240  
K = np.array([[fx, 0, cx], [0, fy, cy], [0, 0, 1]])

# 相机外参
R = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]])  # 旋转矩阵
t = np.array([0, 0, 0])  # 平移向量

2. 将3D点P投影到2D图像中

# 3D点P
P = np.array([1, 2, 3])

# 投影到2D图像
P_homogeneous = np.hstack((P, 1))
p_homogeneous = K @ np.hstack((R, t.reshape(3,1))) @ P_homogeneous.reshape(4,1)
p = p_homogeneous[:2] / p_homogeneous[2]

print("P: ", P)
print("p: ", p)

3. 将多个3D点P投影到2D图像中

# 多个3D点P
P_list = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# 投影到2D图像
P_homogeneous = np.hstack((P_list, np.ones((P_list.shape[0], 1))))
p_homogeneous = K @ np.hstack((R, t.reshape(3,1))) @ P_homogeneous.T
p = p_homogeneous[:2] / p_homogeneous[2]

print("P_list: ", P_list)
print("p: ", p.T)

原创文章,作者:EFANF,如若转载,请注明出处:https://www.506064.com/n/331861.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
EFANFEFANF
上一篇 2025-01-20 14:10
下一篇 2025-01-20 14:10

相关推荐

  • 如何在Java中拼接OBJ格式的文件并生成完整的图像

    OBJ格式是一种用于表示3D对象的标准格式,通常由一组顶点、面和纹理映射坐标组成。在本文中,我们将讨论如何将多个OBJ文件拼接在一起,生成一个完整的3D模型。 一、读取OBJ文件 …

    编程 2025-04-29
  • 如何实现图像粘贴到蒙版

    本文将从多个方面介绍图像粘贴到蒙版的实现方法。 一、创建蒙版 首先,在HTML中创建一个蒙版元素,用于接收要粘贴的图片。 <div id=”mask” style=”widt…

    编程 2025-04-29
  • Python图像黑白反转用法介绍

    本文将从多个方面详细阐述Python图像黑白反转的方法和技巧。 一、Pillow模块介绍 Pillow是Python的一个图像处理模块,可以进行图片的裁剪、旋转、缩放等操作。使用P…

    编程 2025-04-28
  • Matlab二值图像全面解析

    本文将全面介绍Matlab二值图像的相关知识,包括二值图像的基本原理、如何对二值图像进行处理、如何从二值图像中提取信息等等。通过本文的学习,你将能够掌握Matlab二值图像的基本操…

    编程 2025-04-28
  • Python实现图像转化为灰度图像

    本文将从多个方面详细阐述如何使用Python将图像转化为灰度图像,包括图像的概念、灰度图像的概念、Python库的使用以及完整的Python代码实现。 一、图像与灰度图像 图像是指…

    编程 2025-04-28
  • 图像与信号处理期刊级别

    本文将从多个方面介绍图像与信号处理期刊级别的相关知识,包括图像压缩、人脸识别、关键点匹配等等。 一、图像压缩 图像在传输和存储中占据了大量的空间,因此图像压缩成为了很重要的技术。常…

    编程 2025-04-28
  • Python 文件内图像重命名

    Python作为一门功能强大的编程语言,可以实现很多实用的操作。在基本编程操作中,经常会遇到需要对文件进行操作,而文件中的图像也需要进行重命名。本文将从多个方面详细介绍如何使用Py…

    编程 2025-04-27
  • 双目相机及其应用

    一、双目相机的基本概念 双目相机由两个摄像头构成,模拟人类两只眼睛观察世界的方式。双目相机可获得丰富的深度信息,适用于三维视觉、立体测量、目标检测等领域。 双目相机的核心技术是立体…

    编程 2025-04-25
  • 火星坐标系与wgs84关系

    一、火星坐标系简介 火星坐标系(Mars Geodetic Datum)是指在地球外星球(例如火星)上建立的以该星球自转轴为Z轴、过赤道与某子午线相交于X、Y轴的右手直角坐标系。而…

    编程 2025-04-24
  • Android相机应用的开发

    一、基本介绍 Android相机应用是移动设备拍摄和录制视频的主要途径,它可以让用户使用相机来拍摄照片、录制视频、使手机成为一个扫描仪,扫描条形码等。 Android中使用相机应用…

    编程 2025-04-24

发表回复

登录后才能评论