一种基于单目相机的圆柱体/长方体体积测量方法
单目相机通常无法进行尺寸测量,要么使用远心镜头,通过近似正投影的方式来获取轮廓,进行一维测量。而本文提出了一种基于单目相机的旋转体体积测量方法,使用普通相机镜头就可以实现。

概述

单目相机通常无法进行尺寸测量,要么使用远心镜头,通过近似正投影的方式来获取轮廓,进行一维测量。

而本文提出了一种基于单目相机的旋转体体积测量方法,使用普通相机镜头就可以实现。整个测量过程如下:

  • 对单目相机进行标定
  • 将旋转体放置在平面上(平面形式包括但不限于标定板、Aruco 编码块等,平面上必须要有可以提前识别出二维坐标和三维坐标的图案)
  • 相机从侧面拍摄旋转体,要求可以拍到上顶面(全部可见)、和下底面(部分可见)
  • 算法调用,输出体积(圆柱体输出半径和高度,长方体输出长宽高)

原理

以圆柱体为例:

image20260211213112522.png

如上图所示,圆柱体立于平面1上,平面1上放置一个 aruco 编码块,相机侧拍圆柱体,可看到圆柱顶面完整轮廓以及底面部分轮廓。

步骤1:相机标定。通过相机标定获得相机内参 KKK

步骤2:平面1到相机的 RTRTRT 求解。 平面1上的 aruco 编码块四个角点可检测到,同时其边长已知。假设为 www ,那么四个角点的三维坐标可以表示为$ (0,0,0)$ 、(0,w,0)(0,w,0)(0,w,0)(w,w,0)(w,w,0)(w,w,0)(w,0,0)(w,0,0)(w,0,0) 。于是可以通过 PNP 计算出平面1到相机的 [R1,T1][R_1,T_1][R1,T1]

**步骤3:提取椭圆轮廓。**提取图像中轮廓,并筛选得到底面轮廓 s1s_1s1 和顶面轮廓 s2s_2s2

步骤4:底面轮廓三维重建和拟合圆。 在 aruco 所建立的世界坐标系下,底面轮廓 S1S_1S1 的三维坐标 Z=0Z=0Z=0,再结合步骤1中得到的相机内参 KKK、步骤2 中的 [R1,T1][R_1,T_1][R1,T1] 可以重建出底面轮廓 S1S_1S1 ,同时可以拟合圆得到直径 D1D_1D1

步骤5:母线反投影。 在底面轮廓 S1S_1S1 拟合出的圆上,均匀选取 6 个点,记作 A1,⋯,A6A_1,\cdots,A_6A1,,A6 。由于圆柱体母线垂直于 Z=0Z=0Z=0 平面,那么将 A1,⋯,A6A_1,\cdots, A_6A1,,A6 这几个点的 ZZZ 坐标适当增大到某个值 Z0Z_0Z0 ,得到 T1,⋯,T6T_1,\cdots,T_6T1,,T6 。此时将 A1,⋯,A6A_1,\cdots,A_6A1,,A6T1,⋯,T6T_1,\cdots,T_6T1,,T6 利用相机内参 KKK 计算其对应的二维投影点(图像上)a1,⋯,t6a_1, \cdots,t_6a1,,t6 。那么此时母线 AiTi(i=1,2,⋯,6)A_iT_i(i=1,2,\cdots,6)AiTi(i=1,2,,6) 投影图像上得到的直线为 aitia_it_iaiti

步骤6:顶面轮廓二维点和三维点计算。 图像上母线 aitia_it_iaiti 与顶面轮廓相交于 bib_ibi ,那么同理在空间上,母线 AiTiA_iT_iAiTi 与顶面轮廓相交于 BiB_iBi,于是根据母线垂直于 Z=0Z=0Z=0 平面可知,AiA_iAiBiB_iBi 的横纵坐标都应该相等。因此 6 条母线可以得到顶面轮廓上的 6 对 二维和三维点 bi,Bi(i=1,⋯,6)b_i,B_i(i=1,\cdots,6)bi,Bi(i=1,,6)

步骤7:平面2到相机的 RTRTRT 求解。 步骤6 得到的三维坐标 BiB_iBi 可以认为其直接落在平面2上,令世界坐标系在平面2上,所有bib_ibiZZZ 坐标都为 0,而通过步骤6母线传递的横纵坐标仍然可保持不变。那么同步骤2类似,可利用二维和三维点 bi,Bi(i=1,⋯,6)b_i,B_i(i=1,\cdots,6)bi,Bi(i=1,,6) 通过 PNP 计算出平面2到相机的 [R2,T2][R_2,T_2][R2,T2]

步骤8:顶面轮廓三维重建和拟合圆。 顶面轮廓 S2S_2S2 的三维坐标 Z=0Z=0Z=0,再结合步骤1中得到的相机内参 KKK、步骤6 中的 [R2,T2][R_2,T_2][R2,T2] 可以重建出底面轮廓 S2S_2S2 ,同时可以拟合圆得到直径 D2D_2D2

步骤9:圆柱直径计算。 由于底面只有部分轮廓,拟合圆直径可能存在偏差,而顶面轮廓重建经历了前面若干步骤传递了一些误差,因此为了平衡误差,最终圆柱的直径 D=D1+D22D = \dfrac{D_1+D_2}{2}D=2D1+D2

步骤10:圆柱高度计算。 平面1和平面2到相机的 RTRTRT 都已知,那么相机光心到平面1和平面2的距离都可以计算出来。将光心转换到平面1和平面2所在的世界坐标系下,其 ZZZ 值即为高度,分别记作 H1H_1H1H2H_2H2 ,那么根据这两个面平面,圆柱高度可表示为 H=∣H1−H2∣H= |H1-H2 |H=H1H2

这套流程中最巧妙的地方在于利用母线将底面的坐标传递到了顶面,建立起了顶面二维点和三维点之间的映射关系;同时高度的计算因为相机位置始终没变,所以直接计算两个面到相机光心的距离之差就可以得到高度。尽管上述流程讲述的是圆柱体,但实际上长方体、或者其他通过底面拉伸得到的旋转体都可以这样求其体积。

成果

image20260211212340453.png

该方法可用于药片体积测量,或者快递点长方形打包盒体积测量。

版权声明:本文为V社区用户原创内容,转载时必须标注文章的来源(V社区),文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:v-club@hikrobotics.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
上一篇

标定板在线生成器

下一篇
已经是最后一篇啦~
评论请先登录 登录
全部评论 0
Lv.0
0
关注
0
粉丝
0
创作
0
获赞
相关阅读
  • VM的使用技巧篇三之脚本存CSV
    2026-01-14 浏览 0
  • 文章专题-【开发有道系列】惊艳上线
    2026-01-26 浏览 0
  • 工业缺陷检测,你只需要多模态大模型,零训练,直接检测
    2026-02-02 浏览 0
  • V社区四周年寻宝挑战圆满收官!题目答案全解析
    2026-01-20 浏览 0
  • 海康机器人推出全新自助语音服务,让您的问题解决更高效
    2026-02-05 浏览 0

请升级浏览器版本

您正在使用的浏览器版本过低,请升级最新版本以获得更好的体验。

推荐使用以下浏览器