|
|
@@ -0,0 +1,134 @@
|
|
|
+# VisionForm 程序架构图
|
|
|
+
|
|
|
+## 系统架构概览
|
|
|
+
|
|
|
+```
|
|
|
+┌───────────────────────────────────────────────────────────────────────────────┐
|
|
|
+│ VisionForm │
|
|
|
+└───────────────────────────────────────────────────────────────────────────────┘
|
|
|
+ │
|
|
|
+┌─────────────────┬──────────────────┐ ┌─────────────────────┐
|
|
|
+│ │ │ │ │
|
|
|
+▼ ▼ ▼ ▼ ▼
|
|
|
+MainWindow Process │ 对话框类
|
|
|
+│ │ │ ┌───────────────────────────┐
|
|
|
+│ │ │ │- CommunicationDialog │
|
|
|
+└─────────────┬───┘ │ │- CameraDialog │
|
|
|
+ │ │ │- TriggerDialog │
|
|
|
+┌─────────────┼──────────────────────┼─────────│- CameraTypeDialog │
|
|
|
+│ │ │ │- AlgorithmProcessDialog │
|
|
|
+▼ ▼ ▼ └───────────────────────────┘
|
|
|
+算法处理 相机管理 │
|
|
|
+┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
|
|
|
+│Algorithm │ │Hikvision │ │ImageAcq- │ │FileSystem │
|
|
|
+│Process │ │Camera │ │uisition │ │ │
|
|
|
+└──────┬────┘ └──────┬──────┘ └──────┬──────┘ └─────────────┘
|
|
|
+ │ │ │
|
|
|
+ ▼ ▼ │
|
|
|
+┌─────────────┐ ┌─────────────┐ │
|
|
|
+│Algorithm │ │GigECamera │ │
|
|
|
+│Factory │ └─────────────┘ │
|
|
|
+└──────┬────┘ │
|
|
|
+ │ │
|
|
|
+ ▼ │
|
|
|
+┌─────────────┐ ┌─────────────┐ │
|
|
|
+│Algorithm │ │BaslerCamera │ │
|
|
|
+│Base │ └─────────────┘ │
|
|
|
+└──────┬────┘ │
|
|
|
+ │ │
|
|
|
+ ▼ │
|
|
|
+┌─────────────┐ ┌─────────────┐ │
|
|
|
+│具体算法类 │ │CameraLink │ │
|
|
|
+│- Grayscale │ │Camera │ │
|
|
|
+│- CannyEdge │ └─────────────┘ │
|
|
|
+│- GaussianBlur│ │
|
|
|
+│- MedianBlur │ ┌─────────────┐ │
|
|
|
+│- Dilate │ │ImageSource │ │
|
|
|
+│- Erode │ └─────────────┘ │
|
|
|
+│- Thresholding│ │
|
|
|
+│- HistogramEqualization│ │
|
|
|
+│- FindContours│ │
|
|
|
+└─────────────┘ │
|
|
|
+```
|
|
|
+
|
|
|
+## 核心组件关系
|
|
|
+
|
|
|
+### 1. 主窗口 (MainWindow)
|
|
|
+- **职责**:用户界面,协调各组件
|
|
|
+- **依赖**:Process, AlgorithmProcess, 各种对话框
|
|
|
+- **主要功能**:
|
|
|
+ - 图像显示
|
|
|
+ - 算法配置
|
|
|
+ - 流程控制
|
|
|
+ - 结果展示
|
|
|
+ - 添加图像源(文件/相机)
|
|
|
+
|
|
|
+### 2. 流程系统 (Process)
|
|
|
+- **职责**:管理完整的视觉处理流程
|
|
|
+- **组成**:
|
|
|
+ - 相机组件:支持不同类型的相机(Hikvision、Basler等)
|
|
|
+ - ImageAcquisition:图像采集和处理
|
|
|
+ - AlgorithmProcess:算法处理
|
|
|
+ - FileSystem:文件操作
|
|
|
+- **执行流程**:
|
|
|
+ 1. 连接相机
|
|
|
+ 2. 捕获图像
|
|
|
+ 3. 图像预处理
|
|
|
+ 4. 算法处理
|
|
|
+ 5. 结果保存
|
|
|
+- **建造者模式**:
|
|
|
+ - 内部Builder类:`Process::Builder`
|
|
|
+ - 链式调用:`Process::Builder().setCamera().setImageAcquisition().setAlgorithmProcess().setFileSystem().build()`
|
|
|
+ - 构造器私有化,只能通过Builder创建
|
|
|
+ - 确保对象完整性和一致性
|
|
|
+
|
|
|
+### 3. 算法系统
|
|
|
+- **AlgorithmProcess**:算法流程管理
|
|
|
+- **AlgorithmFactory**:算法工厂,创建算法实例
|
|
|
+- **AlgorithmBase**:算法基类
|
|
|
+- **具体算法**:
|
|
|
+ - Grayscale:灰度转换
|
|
|
+ - CannyEdge:边缘检测(带运行参数存储)
|
|
|
+ - GaussianBlur:高斯模糊
|
|
|
+ - MedianBlur:中值模糊
|
|
|
+ - Dilate:膨胀
|
|
|
+ - Erode:腐蚀
|
|
|
+ - Thresholding:阈值处理
|
|
|
+ - HistogramEqualization:直方图均衡化
|
|
|
+ - FindContours:轮廓检测
|
|
|
+- **运行参数存储**:
|
|
|
+ - 每个算法类都有`runtimeParams`成员
|
|
|
+ - 存储输入/输出图像尺寸、通道数
|
|
|
+ - 存储算法特有的运行结果(如边缘数量、轮廓数量等)
|
|
|
+ - CannyEdge额外存储输入/输出图像副本
|
|
|
+
|
|
|
+### 4. 相机系统
|
|
|
+- **HikvisionCamera**:海康相机实现
|
|
|
+- **GigECamera**:GigE相机基类
|
|
|
+- **BaslerCamera**:Basler相机实现
|
|
|
+- **CameraLinkCamera**:CameraLink相机实现
|
|
|
+- **ImageSource**:图像源抽象
|
|
|
+
|
|
|
+### 5. 工具类
|
|
|
+- **FileSystem**:文件操作工具
|
|
|
+- **ImageAcquisition**:图像采集和预处理
|
|
|
+
|
|
|
+## 数据流
|
|
|
+
|
|
|
+```
|
|
|
+相机 → ImageAcquisition → 图像预处理 → AlgorithmProcess → 算法处理 → FileSystem → 结果保存
|
|
|
+```
|
|
|
+
|
|
|
+## 扩展点
|
|
|
+
|
|
|
+1. **新算法**:继承AlgorithmBase,在AlgorithmFactory中注册
|
|
|
+2. **新相机**:继承相应的相机基类
|
|
|
+3. **新流程配置**:通过建造者模式创建
|
|
|
+
|
|
|
+## 技术栈
|
|
|
+
|
|
|
+- **C++**:核心逻辑
|
|
|
+- **Qt**:用户界面
|
|
|
+- **OpenCV**:图像处理
|
|
|
+- **建造者模式**:对象构建(内嵌Builder类)
|
|
|
+- **工厂模式**:算法创建
|