针孔相机透视投影
时间: 2025-06-30 15:21:21 浏览: 13
### 针孔相机模型及其透视投影原理
针孔相机模型是一种用于描述图像形成过程的理想化模型。该模型假设光线通过一个小孔进入相机内部,并在成像平面上形成倒立的影像[^1]。这种模型的核心在于其简单性和有效性,能够很好地近似实际相机的工作方式。
#### 数学表示
针孔相机模型中的透视投影可以被定义为三维世界点到二维图像平面之间的映射关系。设 \( P(x, y, z) \) 是三维空间中的一个点,则它在图像平面上的位置可以通过以下公式计算:
\[
u = f_x \frac{x}{z} + c_x,\quad v = f_y \frac{y}{z} + c_y
\]
其中:
- \( (u, v) \) 表示像素坐标,
- \( f_x, f_y \) 分别是沿 x 和 y 方向的焦距(通常以像素为单位),
- \( c_x, c_y \) 是主点位置(即光轴与图像平面相交处的像素坐标),\( z \neq 0 \)[^3]。
上述方程组表明,任何位于三维空间中的物体都会因为距离的不同而发生缩放效应——这是典型的透视效果。
#### 径向畸变修正
尽管针孔相机模型提供了一个良好的基础框架来理解基本的成像机制,但在实践中由于镜头制造工艺等原因会造成一定的变形现象,比如桶形失真或枕形失真等问题。为了校正这些误差,在应用针孔模型时还需要考虑加入额外项来进行补偿处理:
\[
x_{corrected} = x(1+k_1r^2+k_2r^4),\; y_{corrected}=y(1+k_1r^2+k_2r^4)
\]
这里 \( r=\sqrt{(x-c_x)^2+(y-c_y)^2}\),代表从当前点至中心的距离;系数 \( k_1,k_2,...\) 则用来量化不同阶数下的弯曲程度。
#### 应用场景
此理论广泛应用于计算机视觉领域内的多个方面,例如但不限于目标检测跟踪、增强现实技术以及自动驾驶车辆环境感知等等。通过对真实世界的立体重建或者单目测距等功能实现自动化决策支持服务[^2]。
```python
import numpy as np
def project_points(points_3d, K):
"""
Projects 3D points onto a 2D image plane using the pinhole camera model.
Args:
points_3d (numpy.ndarray): Array of shape (N, 3) containing N 3D points.
K (numpy.ndarray): Intrinsics matrix of shape (3, 3).
Returns:
numpy.ndarray: Projected 2D points array of shape (N, 2).
"""
fx, fy = K[0][0], K[1][1]
cx, cy = K[0][2], K[1][2]
projected = []
for point in points_3d:
u = fx * (point[0]/point[2]) + cx
v = fy * (point[1]/point[2]) + cy
projected.append([u,v])
return np.array(projected)
K = np.array([[500., 0., 320.],
[0., 500., 240.],
[0., 0., 1.]])
points_3d = np.array([[1., 2., 10.],[2., 3., 15.]])
print(project_points(points_3d,K))
```
阅读全文
相关推荐
















