惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

IT之家
IT之家
C
CXSECURITY Database RSS Feed - CXSecurity.com
V
Visual Studio Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
小众软件
小众软件
L
LangChain Blog
Cyberwarzone
Cyberwarzone
美团技术团队
The Register - Security
The Register - Security
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Tor Project blog
V
V2EX
Security Archives - TechRepublic
Security Archives - TechRepublic
Hacker News: Ask HN
Hacker News: Ask HN
L
LINUX DO - 最新话题
Recent Announcements
Recent Announcements
H
Hackread – Cybersecurity News, Data Breaches, AI and More
酷 壳 – CoolShell
酷 壳 – CoolShell
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
aimingoo的专栏
aimingoo的专栏
人人都是产品经理
人人都是产品经理
F
Full Disclosure
V2EX - 技术
V2EX - 技术
The Cloudflare Blog
博客园 - 叶小钗
T
Threat Research - Cisco Blogs
阮一峰的网络日志
阮一峰的网络日志
G
GRAHAM CLULEY
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Latest news
Latest news
S
Security @ Cisco Blogs
Spread Privacy
Spread Privacy
Project Zero
Project Zero
K
Kaspersky official blog
MyScale Blog
MyScale Blog
Attack and Defense Labs
Attack and Defense Labs
云风的 BLOG
云风的 BLOG
博客园 - 【当耐特】
Hacker News - Newest:
Hacker News - Newest: "LLM"
大猫的无限游戏
大猫的无限游戏
P
Privacy International News Feed
Google DeepMind News
Google DeepMind News
WordPress大学
WordPress大学
C
Cybersecurity and Infrastructure Security Agency CISA
Webroot Blog
Webroot Blog
罗磊的独立博客
Vercel News
Vercel News
N
News and Events Feed by Topic
A
Arctic Wolf
C
CERT Recently Published Vulnerability Notes

博客园 - Fitz

测绘中2个角度相减对于跨360问题的算法总结 windows server2012 安装IIS6服务,编译器错误消息: CS0016: 未能写入输出文件“c:\*\App_Code.*.dll”--“拒绝访问。 ” - Fitz ollama 安装好之后,是不是还需要关闭一些配置? 赫尔默特变化 A=0的情况 libaom 在ubuntu 上用鸿蒙OHOS编译 如何将带有线网卡和无线网卡的台式机作为网关/路由器 相机标定 像元大小(例如 1.4 µm × 1.4 µm)具体的含义和用途 物理焦距、像素焦距、像元与相机内参(fx, fy)的意义与作用 HarmonyOS Next Native C++ 开发入门 Ubuntu中用HarmonyOS Next的SDK编译libsodium,并在DevEco Studio中加载运行.a库 windows 编译rustdesk The authenticity of host '[ssh.github.com]:443([*]:443)' can't be established. ED25519 key fingerprint is matlab 云台控制 根据图像中目标位置,控制望远镜/摄像头转向目标方向 无深度方向估计 Ubuntu 安装conda 拍摄目标:采集 1000 张多样化的图片,覆盖目标的各种环境、角度、光照、尺寸和位置,提高模型的泛化能力。 android APK的MD5值获取有效办法 3D 汽车模拟器 Three.js
如何使用像素坐标和相机内参来计算夹角
Fitz · 2025-09-09 · via 博客园 - Fitz

好的,让我们详细讲解一下这个过程,并进一步澄清公式中的关键点。

1. 相机模型概述

首先,您提到的是理想的针孔相机模型,它的假设是:

  • 相机没有任何畸变(如桶形畸变、枕形畸变等)。

  • 相机通过针孔投影,即通过一个小孔将外部世界投射到图像平面。

在这个模型中,相机的坐标系与图像的坐标系之间是通过相机内参来联系的。

2. 内参矩阵

内参矩阵 KK 用于将3D世界坐标投影到2D图像坐标上。它的形式如下:

K=[fx0cx0fycy001]K = \begin{bmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{bmatrix}

  • fxf_x 和 fyf_y:相机的焦距,通常以像素为单位。fxf_x 和 fyf_y 可能不相等,因为相机的焦距在水平方向和垂直方向上可能不同。

  • cxc_x 和 cyc_y:相机的主点(也称为光轴与图像平面的交点)。它通常接近图像的中心点。

3. 公式推导

现在假设我们已经知道相机的内参和目标点的像素坐标 (u,v)(u, v),我们就可以通过以下公式计算目标点相对于相机光轴的夹角:

θx=arctan⁡(u−cxfx)\theta_x = \arctan\left(\frac{u - c_x}{f_x}\right) θy=arctan⁡(v−cyfy)\theta_y = \arctan\left(\frac{v - c_y}{f_y}\right)

变量解释:

  • (u,v)(u, v) 是目标点在图像上的像素坐标。

  • (cx,cy)(c_x, c_y) 是相机的主点坐标,通常接近图像的中心。

  • (fx,fy)(f_x, f_y) 是相机的焦距,以像素为单位。

  • θx\theta_x 和 θy\theta_y 分别是目标点在水平方向(X轴)和垂直方向(Y轴)上的夹角。

这些夹角是目标点与相机光轴(Z轴)之间的角度,单位是弧度。

4. 计算夹角的物理意义

这些角度 θx\theta_x 和 θy\theta_y 描述了目标点与相机光轴之间的关系,具体而言:

  • θx\theta_x 是目标点在水平方向上与光轴的夹角,反映了目标点在相机视野中水平方向的偏移。

  • θy\theta_y 是目标点在垂直方向上与光轴的夹角,反映了目标点在相机视野中垂直方向的偏移。

这两个角度有助于我们理解目标点在相机坐标系中的位置,但这些角度并不是目标点相对于相机的绝对方位角。

5. 从相机坐标系到世界坐标系

计算出的 θx\theta_x 和 θy\theta_y 是相对于相机坐标系中的光轴(Z轴)的夹角。如果您需要将这些角度转换为世界坐标系中的方位角(例如,水平偏角 yaw\text{yaw} 和垂直偏角 pitch\text{pitch}),您需要使用相机的旋转矩阵和位置来进行转换。

6. 注意事项

  • 畸变校正:在实际使用中,相机镜头可能会产生畸变(如桶形畸变或枕形畸变)。如果没有进行畸变校正,像素坐标中的失真将导致计算的夹角出现偏差。因此,确保图像已进行畸变校正非常重要。如果您没有进行畸变校正,您可以使用相机标定方法来校正。

  • 图像坐标系的原点:假设图像坐标的原点在左上角(像素坐标系的标准)。在这种情况下,uu 和 vv 分别是目标点的水平和垂直像素坐标,而 cxc_x 和 cyc_y 是图像的中心。

  • 焦距单位:确保焦距 fxf_x 和 fyf_y 的单位与像素坐标一致。通常,焦距是以像素为单位表示的,但如果使用的是物理单位(如毫米),则需要进行适当的换算。

7. 举个例子

假设:

  • 相机的焦距 fx=1000f_x = 1000 像素,fy=1000f_y = 1000 像素。

  • 相机的主点坐标 cx=640c_x = 640,cy=360c_y = 360(假设图像分辨率为 1280x720)。

  • 目标点的像素坐标为 (u,v)=(800,400)(u, v) = (800, 400)。

则:

θx=arctan⁡(800−6401000)=arctan⁡(0.16)≈0.1584 弧度\theta_x = \arctan\left(\frac{800 - 640}{1000}\right) = \arctan(0.16) \approx 0.1584 \text{ 弧度} θy=arctan⁡(400−3601000)=arctan⁡(0.04)≈0.0399 弧度\theta_y = \arctan\left(\frac{400 - 360}{1000}\right) = \arctan(0.04) \approx 0.0399 \text{ 弧度}

这些角度描述了目标点在水平方向和垂直方向上的偏移。


总结:

  • 公式是正确的,并且基于理想的针孔相机模型。

  • 需要注意畸变校正,以及相机坐标系与世界坐标系的转换。

  • 计算得到的角度描述了目标点相对于相机光轴的方向,而不是绝对方位。如果需要,可以通过旋转矩阵将这些角度转换到世界坐标系中。

如果您有进一步的具体问题或需要代码实现,请随时告诉我!