1.一种基于手机视频的物体长度测量方法,其特征在于,具体按照如下步骤实施:步骤1,通过手机相机采集视频数据,并对视频数据进行预处理;
步骤2,基于视觉坐标系统之间的转换关系来求解手机相机的内参数;
步骤3,在计算机中保存一张包含目标物体和参照物的参考图像,对步骤1中手机相机采集的视频数据进行特征点提取,之后将视频的每一帧与参考图像进行特征点匹配得到匹配点对;
步骤3.1,在计算机中保存一张包含目标物体和参照物的参考图像,对步骤1中手机相机采集的视频数据和保存的参考图像采用SURF算子进行特征点提取;
步骤3.2,将步骤3.1中特征点提取之后的视频的每一帧与参考图像采用KNN算法完成初始特征匹配,得到匹配点对;
步骤3.2.1,步骤3.1得到的每个特征点利用K近邻查找法找到k个与其邻近的点,k=2;
步骤3.2.2,设置阈值,若最近邻点和次近邻点的距离的比小于阈值,则将最近邻的点作为匹配点,最终得到步骤1中手机相机采集的视频数据和步骤3.1中保存的参考图像的匹配点对;
步骤3.3,根据步骤3.2得到的匹配点对连接线长度和斜率相等的几何特征构建最佳几何约束,完成初始匹配优化;
步骤3.3.1,在计算机中初始化存储步骤3.2得到的匹配点对连接线的集合,设连接线的长度的集合为map_d,连接线的斜率集合为map_k;
步骤3.3.2,统计每对匹配点对连接线的长度di,斜率ki,将长度di作为map_d的键key,map_d的value为匹配线是该长度的条数,map_k的键key为每条匹配线的斜率ki,map_k的value为匹配线是该斜率的条数,其中,每对匹配点中的两个点p1i(xi,yi)和p2j(xj,yj)的距离di的计算公式如下:两点p1i(xi,yi)和p2j(xj,yj)确定的直线斜率ki的计算公式如下:步骤3.3.3,求map_d中value最大的key作为长度的基准,设为D,求map_k中value最大的key作为斜率的基准,设为K,当D‑m≤di≤D+m或者K‑n≤ki≤K+n时,保留该匹配点对连接线,否则删除,其中,m为匹配线长度的误差,n为匹配线斜率的误差,m=15,n=0.03;
步骤3.4,用RANSAC算法对步骤3.3的优化结果进行二次优化,获得最终匹配结果;
步骤3.4.1,初始化投影误差的阈值λ,内点集合I,最优内点集合I_best,迭代次数k;
步骤3.4.2,从经过步骤3.3.3得到的剩余连接线对应的匹配点对中随机抽取4个不共线的样本数据;
步骤3.4.3,根据样本数据计算变换矩阵,记作M,具体为:根据公式:
其中,(x,y)和(x',y')是步骤3.4.2中样本数据中一对匹配点坐标,s为尺度参数,计算变换矩阵 并记作M;
步骤3.4.4,计算步骤3.3.3得到的剩余匹配点集中所有数据与M的投影误差δi,计算投影误差δi的公式如下:如果δi<λ,将该数据加入到内点集合I中;
步骤3.4.5,重复步骤3.4.2‑3.4.4,找到存在最大元素个数的内点集合,并把该内点集合存入I_best,同时更新迭代次数k;
步骤3.4.6,若迭代次数k大于最大迭代次数,则最终I_best中的匹配点对即为优化后的匹配点对;
步骤4,在获取到经步骤3产生的匹配点对的前提下,计算出参考图像和视频帧的单应性矩阵,根据单应性矩阵更新参照物顶点在每一帧图像中的坐标并估计参照物的边框,通过参照物的边框推导出相机位姿,根据相机位姿得到相机到参照物表面的距离;
步骤4.1,根据步骤3获得的特征匹配点对,计算出参考图像和视频帧的单应性矩阵;
步骤4.2,根据步骤4.1得到的单应性矩阵更新参照物顶点在每一帧图像中的坐标并估计参照物的边框;
步骤4.3,根据参照物的边框推导出相机位姿,根据相机位姿得到相机到参照物表面的距离;
步骤5,获取到视频初始帧中的目标物体像素大小,结合相机焦距、步骤3中参照物与相机间距离和步骤5获取的物体像素大小计算出目标物体的真实长度;
步骤5.1,获取到视频初始帧中的目标物体像素大小,具体为:步骤5.1.1,读取包含参照物和待测物体的视频的第一帧;
步骤5.1.2,根据MEDIANFLOW追踪器手动选择包含目标物体的矩形窗口,返回数组{x,y,w,h},其中,x为窗口最小的x值,y为窗口最小的y值,w为窗口的宽,h为窗口的高;
步骤5.1.3,用第一帧图像和步骤5.1.2中矩形窗口初始化跟踪器;
步骤5.1.4,读取下一帧,重复步骤5.1.2‑5.1.4,更新追踪器,返回新窗口数组{xi,yi,wi,hi},直到视频没有下一帧;
步骤5.1.5,如果追踪器成功追踪到目标物体,更新新窗口的左上角坐标p1(xi,yi)和右上角坐标p2(xi+wi,yi+hi);
步骤5.1.6,根据p1、p2的坐标绘制矩形框,保存并打印第i帧图像窗口的宽wi和高hi;
步骤5.2,根据小孔成像模型中的相似三角形关系,结合相机焦距、步骤4中参照物与相机间距离和步骤5.1获取的物体像素大小计算出目标物体的真实长度,具体为:步骤5.2.1,据小孔成像模型中的物和像的相似三角形关系,设L为目标物体的长度,h为目标物体的像素长度,f为相机焦距,D为相机到物体的距离,则:得到:
即得到了目标物体的长度L。
2.根据权利要求1所述的一种基于手机视频的物体长度测量方法,其特征在于,所述步骤1中采集视频时,在手机移动过程中采集视频数据且手机在空间中水平匀速运动;
所述步骤1中对视频进行预处理具体为:
对采集的视频数据进行双边滤波去噪,然后采用Canny算子来获取视频各帧的边缘信息。
3.根据权利要求2所述的一种基于手机视频的物体长度测量方法,其特征在于,所述步骤2具体为:步骤2.1,将6×8的棋盘格图像布满整个电脑屏幕,将电脑屏幕作为标定板,其中,每个小格的长度为37mm;
步骤2.2,使用手机相机在电脑屏幕的上、下、左、右、左上、左下、右上、右下、正前9个方位拍摄20张棋盘格图像;
步骤2.3,将步骤2.2中拍摄的20张棋盘格图像保存到指定目录下;
步骤2.4,对步骤2.3得到的20张棋盘格图像进行降采样,调用findChessboardCorners()函数进行初始化角点提取;
步骤2.5,在步骤2.4初步提取角点之上进一步使用cornerSubPix()函数提取亚像素信息,降低相机标定偏差,再调用drawChessboardCorners()函数将角点用不同颜色绘制到棋盘格图像上并保存图像;
步骤2.6,初始化标定板上的三维坐标,使用calibrateCamera函数()进行相机标定,得到相机参数;
步骤2.7,根据步骤2.6得到的相机参数对角点进行重新投影计算,得到角点在步骤2.3保存的棋盘格图像上新的投影点坐标,计算投影坐标和步骤2.5中亚像素提取之后的角点坐标之间的偏差对获得的相机参数进行评估,并删除偏差大于设定的阈值的图像;
步骤2.8,重新按照步骤2.4‑2.6计算相机参数,之后返回步骤2.7对相机参数进行重新评估,直到没有图像再被删除为止;
步骤2.9,将标定结果写入到txt文件中。
4.根据权利要求1所述的一种基于手机视频的物体长度测量方法,其特征在于,所述步骤4.1具体为:步骤4.1.1,设参考图像中的某个像点为p1(x1,y1),视频中某一帧图像的像点p2(x2,y2)是p1(x1,y1)的匹配点,单应性矩阵为H通过下式建立两个像点间的关系:步骤4.1.2,将矩阵乘法展开,可得下式:
步骤4.1.3,将步骤4.1.2中公式(6)转化为两个公式,如下所示:将上面公式(7)变换为Ax=0的形式,如下所示:
步骤4.1.4,将步骤3.1.3中公式(8)改写为向量积的形式,由于单应性矩阵是齐次的,T令h=(H11,H12,H13,H21,H22,H23,H31,H32,1) ,因此公式(8)改写为:其中,
T T
ax=(x1,y1,1,0,0,0,‑x2x1,‑x2y1,‑x2) ay=(0,0,0,x1,y1,1,‑x1y2,‑y1y2,‑y2),设有n对匹配点对,则得到Ah=0, 求出h,再根据h=T
(H11,H12,H13,H21,H22,H23,H31,H32,1) 得到单应性矩阵H。
5.根据权利要求4所述的一种基于手机视频的物体长度测量方法,其特征在于,所述步骤4.2具体为:步骤4.2.1,获取步骤3.4.6得到的参考图像和第i帧图像对应的匹配点对,分别保存在集合src_pts和集合dst_pts中;
步骤4.2.2,根据匹配点按照步骤4.1的方法得到其对应的单应矩阵Mi;
步骤4.2.3,计算参考图像中参照物的顶点坐标,即参照物的左上角顶点、右上角顶点、右下角顶点、左下角顶点,并保存到集合pts中;
步骤4.2.4,利用步骤4.1.1中公式(5)通过步骤3.4.3得到的单应矩阵Mi计算集合pts中参照物的顶点在视频第i帧图像中的坐标,记为ai、bi、ci、di,分别是视频第i帧图像中参照物的左上角顶点、右上角顶点、右下角顶点、左下角顶点,并保存在集合dst中;
步骤4.2.5,依次连接ai、bi、ci、di得到第i帧图的边框图像,并将完成边框绘制的第i帧图像添加到集合found_list中;
步骤4.2.6,重复步骤4.2.1‑4.2.5得到所有匹配点对对应的边框图像,将集合found_list中的图像合成完整的视频,保存视频,得到参照物的边框。
6.根据权利要求5所述的一种基于手机视频的物体长度测量方法,其特征在于,所述步骤4.3具体为:步骤4.3.1,相机线性模型表示为:
Pc=RPw+t (10)
其中,Pc、Pw分别指同一空间点在相机坐标系和世界坐标系下的坐标,t为平移向量,R为旋转矩阵;
相机的内参矩阵K表示为:
其中,f为相机焦距,α为像素比例因子;
步骤4.3.2,将世界坐标系Ow‑XwYwZw建立在平面上,则PA、PB、PC、PD四个点在Ow‑XwYwZw中的坐标为PA(xA,yA,0)、PB(xB,yB,0)、PC(xC,yC,0)和PD(xD,yD,0),则相机坐标系中的对应的点PA'、PB'、PC'、PD'表示为:Pi'=RPi+t=(r1 r2 r3)Pi+t (12)其中,Pi'为相机坐标系下的对应的点,i为A或B或C或D,Pi为世界坐标系下的点,r1,r2,r3分别为旋转矩阵R的3个列向量,t为平移向量;
步骤4.3.3,用相机坐标系中的点表示图像坐标系中的点,如下:其中si为常数因子,(ui,vi)为点Pi'在图像坐标系中的坐标,由公式(11)、公式(12)和公式(13)得下式:其中xi和yi分别为PA、PB、PC、PD四个点在Ow‑XwYwZw中的坐标PA(xA,yA,0)、PB(xB,yB,0)、PC(xC,yC,0)和PD(xD,yD,0)中xA,yA,xB,yB,xC,yC,xD和yD;
步骤4.3.4,利用单应性矩阵描述两幅图像中对应像点的关系,得到:由公式(14)、公式(15)得到:
由公式(16)得到:
T
由于r1r2=0,且|r1|=|r2|=1,可得到:通过公式(18)确定f和α,将f和α代入公式(17)可以求出r1,r2和t,通过r3=r1×r2求出r3,从而得到了旋转矩阵R和平移向量t;
步骤4.3.5,通过旋转矩阵R和平移向量t表示相机位姿camera_position:T
camera_position=‑R×t (19)
从而求出了相机在世界坐标系中的坐标camera_position,其中,camera_position中的z轴坐标即为相机到参照物表面的垂直距离。