# isp **Repository Path**: GalaxyTD_3/isp ## Basic Information - **Project Name**: isp - **Description**: ISPController是一个基于 Qt 的 ISP(Image Signal Processing)调参工具,采用四层架构设计,实现了界面交互、图像显示、参数管理和管道控制等功能。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2025-03-07 - **Last Updated**: 2025-07-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: Qt ## README # ISPController ISPController 是一个基于 Qt 的 ISP(Image Signal Processing)调试工具,专为 FPGA+MCU 的 SoC 板子设计,用于图像调试和参数配置。它集成了 ISP 调试功能和串口通信功能,支持图像加载、参数配置、效果预览以及与嵌入式端的通信。通过模块化设计和自定义通信协议,ISPController 实现了高效的调试和参数配置流程。 --- ## 项目背景 本项目主要用于实验室的 ISP 算法调试。硬件部分基于 FPGA+MCU 的 SoC 板子,硬件算法通过 Verilog 实现并烧录固定。软件通过与嵌入式端通信,配置硬件算法的参数。ISPController 作为上位机软件,集成了图像调试和串口通信功能,支持单张图像调试和参数配置,并通过自定义协议与 FPGA 进行数据交互。 --- ## 项目结构 ### 1. **TuningTab(界面交互层)** - 负责用户界面的交互逻辑。 - 提供参数输入、文件选择、图像显示等功能。 - 与 `ImageViewer` 和 `ParamManager` 交互,传递用户输入和显示结果。 ### 2. **ImageViewer(图像显示层)** - 负责图像的显示和处理。 - 支持 RAW 图像的加载、转换和显示。 - 与 `TuningTab` 交互,接收用户选择的图像并显示处理结果。 ### 3. **ParamManager(参数管理层)** - 负责管理 ISP 调参所需的参数。 - 提供参数的设置、获取和更新功能。 - 与 `TuningTab` 和 `PipelineController` 交互,传递参数信息。 ### 4. **PipelineController(管道控制层)** - 负责控制 ISP 处理管道。 - 调用底层算法处理图像,并返回处理结果。 - 与 `ParamManager` 和 `ImageViewer` 交互,接收参数并返回处理后的图像。 ### 5. **SerialPort(串口通信层)** - 实现与嵌入式端的串口通信功能。 - 支持 FPGA 与上位机的数据传输。 - 设计并实现自定义通信协议,支持 FPGA 与上位机的联调。 --- ## 功能特性 ### **ISP 集成部分** - **图像调试工具**: - 支持 RAW 图像的加载、处理和显示。 - 提供参数配置界面,支持动态调整 ISP 算法参数。 - 实时预览参数调整后的图像效果。 - **模块化设计**: - 支持动态加载和替换算法模块,便于扩展和维护。 ### **串口通信部分** - **串口通信功能**: - 实现与嵌入式端的串口通信,支持 FPGA 与上位机的数据传输。 - 提供串口配置界面,支持波特率、数据位、校验位等参数设置。 - **自定义通信协议**: - 设计并实现了一套轻量级的通信协议,用于 FPGA 与上位机的数据交互。 - 通过 UI 界面选择算法或手动输入参数,自动生成 FPGA 可解析的数据并发送。 --- ## 快速开始 ### 1. 克隆仓库 ```bash git clone https://gitee.com/GalaxyTD_3/isp.git ``` ### 2. 编译项目 - 使用 Qt Creator 打开项目。 - 配置 Qt 环境并编译项目。 ### 3. 运行项目 - 连接 FPGA+MCU 的 SoC 板子,并确保串口通信正常。 - 运行 ISPController,加载图像并配置参数,通过串口将参数发送至嵌入式端。 --- ## 通信协议 ### 协议概述 - 协议用于上位机与 FPGA 之间的数据交互。 - 通过 UI 界面选择算法或手动输入参数,生成 FPGA 可解析的数据格式。 - 数据包结构包括: - **Header**:标识数据包的开始。 - **Command**:指定操作类型(如参数配置、图像调试等)。 - **Data**:包含具体的参数或配置信息。 - **Checksum**:用于数据校验。 ### 示例 以下是一个简单的数据包示例: ``` [Header][Command][Data][Checksum] ``` --- ## 未来计划 - **ISP 算法的动态加载和配置**: - 分阶段集成多个 ISP 算法,初期逐个实现并测试。 - 在集成 3-4 个算法后,抽象出一个通用的算法基类,统一管理算法的加载、配置和执行。 - 提供插件化支持,便于后续算法的动态扩展。 - **线程池优化**: - 引入线程池机制,用于管理 UI 线程和算法线程的并发执行,避免 UI 卡顿。 - 将耗时的算法任务(如图像处理、参数计算)分配到独立的线程中执行,确保主线程(UI 线程)的流畅性。 - 提供线程任务的优先级管理,确保关键任务(如实时图像显示)能够优先执行。 - **串口通信协议**: - 设计并实现一套轻量级的通信协议,用于 FPGA 与上位机之间的数据交互。 - 协议支持一键发送功能,通过 UI 界面选择算法或配置参数后,自动封装数据并发送至 FPGA。 - 数据包结构包括: - **Header**:标识数据包的开始。 - **Command**:指定操作类型(如参数配置、图像调试等)。 - **Data**:包含具体的参数或配置信息。 - **Checksum**:用于数据校验,确保传输的可靠性。 - 提供协议调试工具,便于测试和验证数据包的正确性。 - **性能优化**: - 优化通信协议,提高数据传输效率,减少延迟。 - 改进图像处理算法,提升处理速度和效果。 - **日志功能**: - 增加日志功能,记录关键操作和通信数据,便于调试和问题排查。 --- ## 贡献者 - 胡菁文 ---