Skip to content

Repository files navigation

智能车摄像头逆透视变换 (IPM) 项目

1. 项目概述

本项目是一个为智能车设计的嵌入式C语言项目,其核心功能是实现摄像头的逆透视变换(Inverse Perspective Mapping, IPM)。该功能能够将摄像头在前挡风玻璃处采集到的、带有透视畸变的赛道图像,实时转换为无畸变的俯视图(鸟瞰图)。

这种俯视图对于后续的路径规划、车道线识别、障碍物检测等高级自动驾驶算法至关重要,是智能车视觉处理的“第一步”。

本项目代码基于英飞凌(Infineon)TC26B系列微控制器,并使用了特定于该平台的硬件驱动。

2. 核心功能

本项目的主要实现代码均在 code/perspective.c 文件中。

  • 逆透视矩阵计算:

    • 实现了基于四点对应关系的单应性矩阵(Homography Matrix)求解算法。
    • 通过选取透视图像中的四个点(如赛道边线的四个角点)和它们在俯视图中对应的目标点,可以精确计算出3x3的逆透视变换矩阵。
    • 算法包含了点集归一化(DLT算法)和高斯消元法解线性方程组,以提高计算的稳定性和精度。
  • 图像变换:

    • Image_Transformed 函数利用计算出的逆透视矩阵,通过反向插值的方式,逐点将原始图像转换为俯视图像。
    • 能够处理实时摄像头采集的每一帧图像。
  • 自动化标定流程:

    • 提供了一套通过物理按键触发的自动化标定流程 (Get_inverse_matrix 函数)。
    • 按键1: 触发四点自动检测 (Get_Four_Points)。程序会自动从图像中寻找赛道边线的远、近四个角点,并进行初步的逆透视变换,将结果显示在屏幕上。
    • 按键2: 对变换结果进行微调并保存。该功能会自动分析变换后图像的有效区域,智能调整俯视图的“视距”(up_distance),然后将最终计算出的逆透视矩阵永久写入到单片机的Flash中。
  • 标定参数持久化:

    • Write_MatrixRead_Matrix 函数实现了将标定好的3x3逆透视矩阵写入Flash和从Flash读出的功能。
    • 这意味着标定工作只需进行一次,之后每次设备重启都能自动加载之前的标定参数,无需重复标定。

3. 硬件依赖

根据代码中的函数调用和变量类型推断,本项目依赖以下硬件:

  • 主控MCU: Infineon TC26B
  • 摄像头: MT9V03X 灰度图像传感器
  • 显示屏: IPS200 LCD 显示屏 (用于显示原始图像和变换后的俯视图)
  • 物理按键: 至少两个按键,用于触发标定流程。
  • 非易失性存储: MCU片上Flash,用于存储标定矩阵。

4. 如何使用(相机标定流程)

要获得最佳的逆透视效果,请遵循以下标定步骤:

  1. 准备环境: 将智能车放置在光线良好、具有清晰直车道边界线的标准赛道上。确保摄像头视角正对赛道。

  2. 触发初始标定 (按键1):

    • 按下按键1
    • 程序将自动采集一帧图像,并运行 Get_Four_Points 函数寻找赛道边线的四个角点。
    • 接着,程序会计算出初始的逆透视矩阵,并调用 Perspective_Transform 将原始图像转换为俯视图。
    • 此时,您应该可以在显示屏上看到变换后的俯视图效果。
  3. 微调并保存 (按键2):

    • 按下按键2
    • 程序会自动分析上一步生成的俯视图,并对up_distance参数进行微调,以优化视野。
    • 调整后,程序会重新计算并应用新的逆透视矩阵。
    • 最关键的是,最终的逆透视矩阵将被调用 Write_Matrix 函数保存到Flash中
    • 同时,程序会调用 ImagePerspective_Init 函数,使新的矩阵立即生效。

标定完成后,系统每次启动都会自动从Flash加载该矩阵,后续的视觉算法将直接使用这个精确的俯视图进行处理。

About

No description, website, or topics provided.

Resources

Stars

15 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages