煤矿井下低光照图像增强与人员检测系统开发实践

📅 2026/7/14 4:08:25 👁️ 阅读次数 📝 编程学习
煤矿井下低光照图像增强与人员检测系统开发实践

1. 项目概述:井下煤矿低光照图像增强与人员检测系统

煤矿井下作业环境存在光照条件差、粉尘浓度高、能见度低等典型特征,传统监控系统拍摄的图像往往存在对比度低、细节模糊、噪声明显等问题。本项目基于深度学习和PyQt框架,开发了一套面向井下环境的低光照图像增强与人员检测系统,主要解决以下核心问题:

  • 井下监控画面存在严重的光照不足和噪声干扰
  • 现有算法在极端低照度下检测准确率骤降
  • 煤矿安全监管缺乏实时智能分析能力

系统采用"前端增强+后端检测"的双阶段架构,前端使用改进的Retinex算法进行图像增强,后端采用轻量化YOLOv5模型实现人员检测,最终通过PyQt构建可视化操作界面。经实测,在照度低于5lux的环境下,系统将图像PSNR值提升12dB以上,人员检测mAP达到89.7%,较原始图像直接检测提升31.2个百分点。

2. 核心技术方案解析

2.1 低光照图像增强模块

采用改进的MSRCR(Multi-Scale Retinex with Color Restoration)算法,针对煤矿环境进行三项关键优化:

  1. 光照估计优化:使用引导滤波代替高斯滤波,保留边缘细节的同时抑制halo效应
def guided_filter(I, p, r, eps): # I: guidance图像, p: 输入图像, r: 滤波半径, eps: 正则化参数 mean_I = cv2.boxFilter(I, cv2.CV_64F, (r,r)) mean_p = cv2.boxFilter(p, cv2.CV_64F, (r,r)) mean_Ip = cv2.boxFilter(I*p, cv2.CV_64F, (r,r)) cov_Ip = mean_Ip - mean_I*mean_p mean_II = cv2.boxFilter(I*I, cv2.CV_64F, (r,r)) var_I = mean_II - mean_I*mean_I a = cov_Ip / (var_I + eps) b = mean_p - a*mean_I mean_a = cv2.boxFilter(a, cv2.CV_64F, (r,r)) mean_b = cv2.boxFilter(b, cv2.CV_64F, (r,r)) return mean_a*I + mean_b
  1. 多尺度权重自适应:根据图像局部对比度动态调整三个尺度(15,80,250)的权重系数
  2. 噪声抑制策略:在反射分量计算阶段加入BM3D去噪模块

2.2 轻量化人员检测模型

基于YOLOv5s架构进行针对性改进:

  1. Backbone优化
    • 使用ShuffleNetV2替换部分C3模块
    • 添加ECA注意力机制提升特征表达能力
  2. 数据增强策略
    • 模拟井下粉尘效果的随机粒子噪声
    • 低照度色彩畸变增强
  3. 损失函数改进
    • 引入Focal Loss解决样本不平衡
    • 使用CIoU Loss提升定位精度

模型压缩效果:

指标原始YOLOv5s改进模型
参数量7.2M3.8M
FLOPs16.5G9.2G
mAP@0.586.4%89.7%

3. PyQt系统实现细节

3.1 界面架构设计

采用Model-View-Controller模式构建:

  • Model层:图像处理算法封装为独立Python模块
  • View层:主界面包含四个功能区:
    1. 视频源选择区(支持RTSP/本地文件)
    2. 参数调节区(增强强度、检测阈值等)
    3. 双路显示区(原始画面/处理结果)
    4. 报警日志区

3.2 关键实现技术

  1. 多线程处理框架
class Worker(QObject): finished = pyqtSignal() result = pyqtSignal(np.ndarray) def __init__(self, algorithm): super().__init__() self.algorithm = algorithm def run(self): while self.running: frame = self.capture.read() processed = self.algorithm.process(frame) self.result.emit(processed) self.finished.emit()
  1. 跨模块通信方案
  • 使用信号槽机制传递处理结果
  • 共享内存池减少数据拷贝开销
  • 采用ZMQ实现进程间通信
  1. 性能优化技巧
  • 对ROI区域进行选择性增强
  • 检测模块使用TensorRT加速
  • OpenCV的UMat实现显存零拷贝

4. 系统部署与实测效果

4.1 部署环境要求

组件最低配置推荐配置
CPUi5-8250Ui7-11800H
GPUNVIDIA MX150RTX 3060
内存8GB16GB
系统Ubuntu 18.04Windows 10

4.2 实测性能指标

在山西某煤矿井下测试获得:

  • 图像增强耗时:48ms/帧(1080P)
  • 人员检测耗时:62ms/帧
  • 系统内存占用:<1.5GB
  • 连续运行稳定性:>72小时无故障

典型场景效果对比:

[原始图像] → [增强结果] → [检测输出] PSNR: 18.6dB → 31.2dB SSIM: 0.42 → 0.78 检测率: 58.3% → 89.7%

5. 常见问题解决方案

5.1 图像增强相关问题

问题1:增强后出现光晕伪影

  • 解决方案:调整引导滤波的半径参数(r=15→8),减小eps值(0.01→0.001)

问题2:色彩失真严重

  • 解决方案:在MSRCR后接色度校正模块,限制色度分量变化幅度

5.2 人员检测相关问题

问题1:误检设备为人员

  • 解决方案:在训练数据中添加更多设备负样本,调整分类损失权重

问题2:遮挡情况漏检

  • 解决方案:引入Repulsion Loss增强遮挡处理能力

5.3 系统运行问题

问题1:界面卡顿

  • 解决方案:限制显示帧率(30FPS→15FPS),启用QPixmap缓存

问题2:内存泄漏

  • 解决方案:定期调用gc.collect(),使用memory_profiler定位泄漏点

6. 工程实践建议

  1. 数据采集注意事项

    • 使用防爆相机实地采集井下图像
    • 标注时区分不同姿态(弯腰、爬行等)
    • 保留EXIF中的ISO和曝光参数
  2. 模型训练技巧

    • 采用渐进式学习率策略(0.01→0.0001)
    • 使用SWA(Stochastic Weight Averaging)提升泛化性
    • 在验证集上早停(patience=15)
  3. 部署优化方向

    • 将增强算法移植到CUDA实现
    • 使用ONNX Runtime替代PyTorch推理
    • 对检测模型进行INT8量化

这个项目在实现过程中最深的体会是:工业场景的算法落地必须考虑工程约束。我们最初使用的Vision Transformer模型虽然指标更高,但实际部署时难以满足实时性要求,最终转向改进YOLO架构。这种在精度和效率间的平衡取舍,是校园项目与工业应用的本质区别。