跳到主要内容
Estel Space

CVRSSP

工业视觉系统

一套十相机视觉系统:识别钢板,以毫米为单位测量它,并绘制出它的轮廓。

  • C++
  • OpenCV
  • MFC
  • 图像处理
CVRSSP 软件界面:十路相机画面与测量结果
时间
2026
角色
设计、实现与测试
背景
武汉大学 · 程序设计实践
平台
Windows · C++ · MFC · OpenCV 4.10

背景

钢板的几何尺寸贯穿轧制、剪切、仓储与质检的每个环节。人工测量需要停机或接触钢板。机器视觉可以非接触地测量——前提是它能应对真实的图像。CVRSSP 仿真了这一在线测量过程:读入生产线上十台相机的图像,识别钢板,以毫米为单位测量它,绘制轮廓,并保存记录。

挑战

真实图像是复杂的。在一张样本上有效的方法,换一张就可能失效。

亮度不一

每台相机的亮度与对比度都不同,没有一个固定阈值能适用全部图像。

遮挡

设备在钢板上形成竖直的黑色缺口,把钢板分割成多个区域。

不完整视野

有的相机完全没有拍到钢板,而钢板的端部可能只占几个像素。

像素不是毫米

十个视角必须统一到同一个物理坐标系,长度才有意义。

方案

一条从原始图像到毫米尺寸的一致流程——每个模块对“哪些相机可信”的判断都保持一致。

  1. 01

    自适应分割

    高斯滤波与 Otsu 阈值让每张图像自行确定阈值;小尺度的开运算与闭运算清理掩膜,同时不会填平真实的缺口。

  2. 02

    可靠视角筛选

    根据前景对比度、有效列比例、厚度与中心稳定性评价每台相机的候选区域,只有可靠的视角才参与拼接、测量与绘制。

  3. 03

    遮挡修复

    逐列检测钢板内部的竖直缺口,并通过插值上、下边缘进行修复——只有全部条件都满足时才修复,真实的板头板尾不会被误修。

  4. 04

    完整性判断

    只在首个可靠相机中判断板头、在末个可靠相机中判断板尾。系统提示当前是否为完整钢板,但不影响其他测量。

  5. 05

    从像素到毫米

    每台相机的 3×3 单应矩阵把像素映射到统一的世界坐标系。长度取钢板中心线的全局跨度;宽度取多行结果的中位数,并由其他相机提供备用测量与交叉验证。

  6. 06

    轮廓与记录

    上、下边缘在相机之间对齐,补齐短缺口、平滑尖峰后绘制成曲线;测量结果保存为 UTF-8 CSV。

Cam00 至 Cam09 十路相机的钢板画面
Cam00–Cam09 十个视角。Cam00 横向观察钢板以测量宽度,其余相机沿长度方向排布。
被遮挡分割的钢板的边缘检测与联合识别
当遮挡把钢板分成两块时,两侧区域被联合识别为同一个目标。
可靠视角拼接成的完整钢板图像
修复竖直缺口后,按顺序拼接的可靠视角。
钢板上、下边缘的轮廓曲线
在相机之间对齐后的上、下边缘轮廓。
一次完成测量的完整钢板与结果对话框
一张完整钢板:完整性、长度、宽度与曲率一次给出。

技术

C++

核心应用程序——仅主对话框就约 6700 行代码。

MFC

基于对话框的界面:三个图像显示区、控件与消息响应函数。

OpenCV 4.10

阈值分割、形态学处理、轮廓提取与图像拼接。

单应性标定

十个标定文件把每台相机映射到同一个世界坐标系。

我的工作

  • 需求分析与总体架构设计
  • 完整的图像处理与测量算法流程
  • MFC 界面与消息响应函数
  • 标定参数加载与异常处理
  • 十二项功能测试——覆盖正常、遮挡、不完整与纯背景等情况
  • 四轮迭代:从像素测量到标定后的毫米测量

反思

第一个版本用的是固定阈值和最大轮廓,它在少数图像上能运行,在其余图像上都失败了。我由此明白,工业视觉不是去调好一张样本,而是自适应的方法、稳健的统计,以及彼此一致的判断条件。它也让我清楚自己还不能宣称什么:没有已知尺寸的标准钢板,流程可以被验证,精度却无法被证明。那是下一步要做的事。

下一个项目

脑机接口探索

EEG Edge AI

全部项目