👨🎓个人主页
💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
📋📋📋本文目录如下:🎁🎁🎁
目录
💥1 概述
基于双目视觉的物体体积测量算法研究
本文运用基于双目立体视觉的技术,提出一种快速非接触测量目标物体的体积方法。此方法将适用于多种场景下的目标体积测量,具有测量精度较高、测量成本低和灵活等优点。
一、双目视觉基本原理与工作流程
双目视觉通过模拟人类双眼视差原理,利用双相机从不同视角捕获图像,结合三角测量法获取深度信息,最终实现三维重建。其核心流程包含以下步骤:
- 图像获取:使用平行式或汇聚式双目相机系统采集物体图像。平行式光轴系统(基线平行)简化立体匹配,而汇聚式系统(光轴成角度)扩展视场但增加复杂度。
- 相机标定:通过标定工具(如MATLAB/OpenCV)获取相机内参(焦距、畸变系数)和外参(旋转矩阵RR、平移向量tt),为后续深度计算提供几何约束。
- 图像校正:基于极线约束进行畸变校正和立体矫正,使左右图像特征点位于同一水平线,降低匹配难度。
- 立体匹配:核心环节,通过算法计算左右图像的视差图。常用方法包括:
- 局部匹配(如BM算法):基于像素块相似性快速匹配,但易受纹理稀疏区域干扰。
- 全局匹配(如SGBM算法):引入能量函数优化全局视差,精度高但计算量大。
- 深度学习匹配:利用CNN或Transformer提取特征,解决传统算法在弱纹理场景的局限性。
- 三维重建与体积计算:将视差图转换为深度图,生成点云后通过表面重建(如Delaunay三角剖分)或体素化方法计算物体体积。
二、三维重建算法类型与性能对比
算法类型 | 代表算法 | 优点 | 缺点 | 适用场景 |
---|---|---|---|---|
局部匹配 | BM、ORB | 速度快(30-60 fps) | 精度低(误差>5%) | 实时性要求高的场景 |
全局匹配 | SGBM、GraphCut | 精度高(误差<1%) | 计算复杂(耗时>1秒) | 高精度静态测量 |
半全局匹配 | SGBM_WLS | 速度与精度平衡 | 需滤波优化 | 工业检测、动态物体 |
深度学习 | MC-CNN、PSMNet | 鲁棒性强(弱纹理适应) | 依赖大量标注数据 | 复杂环境下的医疗测量 |
混合方法 | SURF+ICP | 结合特征与区域匹配优势 | 实现复杂度高 | 高反光表面测量 |
三、物体体积测量的关键技术点
- 立体匹配优化:
- 特征点改进:采用局部信息熵筛选高熵区域,结合改进LBP描述子提升匹配正确率(实验显示匹配正确率提高37.51%)。
- 亚像素优化:通过梯度漂移法迭代修正特征点坐标,使测量误差降至0.365%。
- 深度图生成:
- 视差-深度转换:公式Z=f⋅bd(f为焦距,b为基线,d为视差),基线长度与深度分辨率正相关。
- 空洞填充:采用中值滤波与最邻近插值修复视差图中的无效区域,确保点云完整性。
- 体积计算算法:
- 切片积分法:沿深度方向分割切片,积分计算总体积(适用于规则物体)。
- 泊松重建:从点云生成封闭曲面,计算体素体积(适合不规则物体如海参)。
四、误差来源与优化方法
误差类型 | 来源分析 | 优化策略 |
---|---|---|
标定误差 | 镜头畸变未完全校正 | 采用改进GA-SA-BP神经网络优化标定参数,标定误差降低48% |
匹配误差 | 遮挡或弱纹理区域误匹配 | 引入WLS滤波(SGBM_WLS算法)抑制噪声,或使用GAN生成视差图补充缺失区域 |
硬件误差 | 相机分辨率限制(如1600×1200) | 升级高分辨率相机(如2500×2000),或采用TOF传感器融合提升深度精度 |
环境干扰 | 光照变化或反光表面 | 添加偏振滤光片,或设计自适应曝光算法 |
五、典型硬件配置要求
组件 | 参数要求 | 示例配置 |
---|---|---|
双目相机 | 分辨率≥1280×720,帧率≥30fps,基线长度120-400mm(依测量距离调整) | 海康威视MV-CE060-10UC(1600×1200@30fps) |
处理器 | GPU支持CUDA加速(如NVIDIA Quadro系列),内存≥8GB | NVIDIA GTX 750 + Intel Core i5-4590 |
开发平台 | 支持OpenCV、MATLAB或深度学习框架(如PyTorch) | 嵌入式系统V3S(全志芯片)实现实时处理 |
辅助设备 | 标定板(棋盘/原点标定块)、可控光源、三脚架(高度可调400-1100mm) | 筑梦科技ZM-DCVS系列标配 |
六、实际应用案例
- 工业检测:
- 不规则堆料测量:采用SGBM算法生成视差图,结合OTSU分割与切片法计算体积,误差<5%。
- 玻璃料滴体积监测:通过特征轮廓提取与空间校正,实现非接触式实时测量。
- 医疗领域:
- 肿瘤体积计算:基于YOLOv8-MSA检测肿瘤区域,泊松重建后体素化测量,精度达毫米级。
- 手术导航:双目系统配合机器人实时生成器官三维模型,误差RMS 0.049 mm。
- 物流仓储:
- DWS自动测体积:双目相机+电子秤实现包裹尺寸/重量同步测量,误差<1%(上海斗力机电方案)。
七、未来研究方向
- 算法融合:结合深度学习的匹配精度与传统算法的实时性(如Transformer+BM混合架构)。
- 多模态传感:融合LiDAR或结构光补偿双目视觉在强反光/透明物体中的局限。
- 嵌入式优化:基于ARM芯片开发低功耗体积测量系统(如EBV1系统支持140cm内测量)。
📚2 运行结果
主函数部分代码:
%%
% 清理空间
clc;
clear;
close all;
%% 导入立体标定参数
load stereoParams.mat
% 立体参数的可视化
% figure;
% showExtrinsics(stereoParams);
%% 导入数据
frameLeft = imread('images/left007.bmp');
frameRight = imread('images/right007.bmp');
[frameLeftRect, frameRightRect] = rectifyStereoImages(frameLeft, frameRight, stereoParams);
figure;
imshow(stereoAnaglyph(frameLeftRect, frameRightRect));
title('Rectified Frames');
%% 视差计算
frameLeftGray = rgb2gray(frameLeftRect);
frameRightGray = rgb2gray(frameRightRect);
DisparityRange = [0, 160];
disparityMap = disparity(frameLeftGray, frameRightGray, 'Method','SemiGlobal','DisparityRange',DisparityRange,'BlockSize',5,'ContrastThreshold', 0.5,'UniquenessThreshold',0);
figure;
imshow(disparityMap, DisparityRange);
title('Disparity Map');
colormap jet
colorbar
%% 三维重建
points3D = reconstructScene(disparityMap, stereoParams);
% 单位为mm
points3D = points3D(:, 400:1000, :);
ptCloud = pointCloud(points3D);
figure;
pcshow(ptCloud);
% title('Original Data');
%% 空间位置变换
% 将有序点云变化为无序点云
ptCloudA= removeInvalidPoints(ptCloud);
% 坐标转换
Temp(:, 1) = ptCloudA.Location(:, 1);
Temp(:, 2) = ptCloudA.Location(:, 2);
Temp(:, 3) = -ptCloudA.Location(:, 3) + 400;
% 去除位置不合理的点
[i, j]=find(Temp(:, 3) < 0 | Temp(:, 3) > 500);
Temp(i, :) = [];
ptCloudB = pointCloud(Temp);
figure;
pcshow(ptCloudB);
title('Transform Data');
%% 去噪
% Threshold为离群值阈值,阈值为与选定点到邻居点的距离值的一个标准差,大于指定的阈值,则认为该点是异常值。
ptCloudC = pcdenoise(ptCloudB, 'NumNeighbors', 100, 'Threshold', 1); %1~6此实验Threshold=1,第7次Threshold=10
figure;
pcshow(ptCloudC);
% title('Denoised Data');
%% 点云分割
% maxDistance:从一个内点到平面标量值的最大距离
maxDistance = 10;
referenceVector = [0, 0, 1];
% 拟合平面的法线向量和参考方向之间的最大绝对角距离,以度为单位指定为标量值。
maxAngularDistance = 5;
[model, inlierIndices, outlierIndices] = pcfitplane(ptCloudC, maxDistance, referenceVector, maxAngularDistance);
ptCloudPlane = select(ptCloudC, inlierIndices);
ptCloudD = select(ptCloudC, outlierIndices);
figure;
pcshow(ptCloudC);
% title('Splitting1 Data');
hold on
plot(model);
figure;
pcshow(ptCloudD);
% title('Part1 Data');
figure;
pcshow(ptCloudPlane);
title('Part2 Data');
%% 空间位置校正
ptCloudE = pcTransform(ptCloudD, model);
figure;
pcshow(ptCloudE);
title('Transform');
🎉3 参考文献
[1]隋婧,金伟其.双目立体视觉技术的实现及其进展[J].电子技术应用,2004(10):4-6+12.
部分理论引用网络文献,若有侵权联系博主删除。