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

如上图所示,圆柱体立于平面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,⋯,A6 与 T1,⋯,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_iAi 和 BiB_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_ibi 的 ZZZ 坐标都为 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_1H1 和 H2H_2H2 ,那么根据这两个面平面,圆柱高度可表示为 H=∣H1−H2∣H= |H1-H2 |H=∣H1−H2∣ 。
这套流程中最巧妙的地方在于利用母线将底面的坐标传递到了顶面,建立起了顶面二维点和三维点之间的映射关系;同时高度的计算因为相机位置始终没变,所以直接计算两个面到相机光心的距离之差就可以得到高度。尽管上述流程讲述的是圆柱体,但实际上长方体、或者其他通过底面拉伸得到的旋转体都可以这样求其体积。

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