一种双目左右图对齐校正进行活体检测的方法与流程

文档序号:35965786发布日期:2023-11-09 05:14阅读:56来源:国知局
一种双目左右图对齐校正进行活体检测的方法与流程

本发明涉及图像处理,特别涉及一种双目左右图对齐校正进行活体检测的方法。


背景技术:

1、随着科技的发展,现有技术在人脸活体识别系统中,由于市面大多数双目摄像头都会采用不同的模组,以及两个摄像头自身存在的差异,不可避免会在成像参数和组装精度上有所不同。因此需要进行双目左右图对齐,来矫正消除摄像头成像后所存在的畸变。

2、现有的双目对齐方法是分别对每个摄像头进行单目标定,获取每个摄像头的内参、畸变矩阵,通过双目标定,获得重投影矩阵及旋转平移矩阵,然后消除畸变,使左右图在行方向上对齐,实现双目左右图对齐。

3、然而,目前常规的双目对齐方法都是通过双目标定实现的,这种方法需要拍摄20多张不同角度的棋盘格图,需要完成每个摄像头的单目标定,并最后对他们进行矫正去除畸变。这个过程中标定繁琐,对拍摄的棋盘格图很严谨,影响标定后的结果。

4、另外,现有技术中的常用术语如下:

5、标定板:带有固定间距图案阵列的平板就是标定板。通过相机拍摄带有固定间距图案阵列平板、经过标定算法的计算,可以得出相机的几何模型,从而得到高精度的测量和重建结果。

6、单目标定:求得每个标定板对应的单应矩阵,再联合优化所有标定板数据得到相机内参矩阵,再得到每个标定板对应的外参。

7、内参矩阵:是将3d相机坐标变换到2d齐次图像坐标,由相机自身来决定的,不会因为外界环境而改变,与相机的焦距f有关。

8、畸变参数:镜头不规整,以及安装时镜头和感光片不完全平行造成的。图像矫正:通过内参矩阵、畸变参数,使原始图像去除畸变的过程,使图片变得规整。

9、透视变换:透视变换(perspective transformation)是指利用透视中心、像点、目标点三点共线的条件,按透视旋转定律使承影面(透视面)绕迹线(透视轴)旋转某一角度,破坏原有的投影光线束,仍能保持承影面上投影几何图形不变的变换。

10、opencv:是一个基于apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在linux、windows、android和mac os操作系统上。它轻量级而且高效——由一系列c函数和少量c++类构成,同时提供了python、ruby、matlab等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。


技术实现思路

1、为了解决上述现有技术中的问题,本技术的目的在于:通过采集十张左右棋盘格图,完成一个摄像头的单目标定,计算出内参矩阵、畸变矩阵,左右两个摄像头使用一套内参、畸变矩阵,去除原始图片上的畸变信息,通过透视变换,实现左右图在行方向上的对齐。

2、具体地,本发明提供一种双目左右图对齐校正进行活体检测的方法,所述方法包括以下步骤:

3、s1.采集棋盘格图:

4、通过摄像头采集不同角度的棋盘格图,采集四张以上棋盘格图,完成一个摄像头的单目标定,棋盘格在图像中成像必须完整,经过测试,距离镜头的距离为1米以内,对摄像头曝光度的曝光阈值设置为0.3,0.3以下即小于等于0.3为正常曝光度;

5、s2.完成单目标定:

6、对左摄像头或右摄像头采取的棋盘格图提取角点信息、确定角点位置是否满足标定的要求,所述标定的要求为必须能检测到棋盘格中所有角点,不能有缺失,否则不能正常提取角点信息,为了得到精确的角点信息,进行亚像素角点精确化,即使用opencv中find4quadcornersubpix()亚像素角点检测来确定角点信息,确定角点信息后,对其中一个摄像头进行标定,获得相机的内参矩阵及畸变参数,对标定结果进行评价,使用所述的相机的内参矩阵及畸变参数,对空间的三维点进行重投影计算,得到新的投影坐标,计算投影坐标和亚像素角点坐标之间的偏差,偏差越小,标定结果越好;

7、s3.对左右图片矫正去除畸变:

8、在矫正去除畸变的过程中,左右摄像头使用同一套摄像头参数;

9、s4.透视变换将左右图对齐:

10、透视变化优化在行方向上的高度差值,使左右图在行方向上对齐,减小求解视差时带来的误差;

11、s5.进行人脸框裁剪:

12、通过人脸检测框中心点坐标,设置左右宽度差值的权重,将左右人脸裁剪图来替代原图的信息,降低图像的分辨率,使计算出的人脸面部视差效果更明显。

13、所述步骤s1中,采集十张棋盘格图,标定结果会更准确;所述曝光阈值0.3以上曝光严重,成像的棋盘格图不能过曝也不能过暗,在挑选棋盘格图片时,只要人眼能正常区分棋盘格的黑白方格即可,否则不能找到棋盘格角点,无法进行标定。

14、所述步骤s2中,所述的相机的内参矩阵由这些参数构成:f/dx、f/dy、u0、v0;其中,f:焦距,单位毫米;dx:像素x方向宽度,单位毫米;1/dx:x方向1毫米内有多少个像素;f/dx:使用像素来描述x轴方向焦距的长度;f/dy:使用像素来描述y轴方向焦距的长度;u0,v0代表图像的中心像素坐标和图像原点像素坐标之间相差的横向和纵向像素数;畸变参数是:k1、k2、k3径向畸变,p1、p2是切向畸变系数;径向畸变发生在相机坐标系转像物理坐标系的过程中,切向畸变:产生的原因是透镜不完全平行于图像。

15、所述步骤s2的单目标定的实现包括:

16、1)提取角点,采用findchessboardcorners();设

17、int cvfindchessboardcorners(const void*image,

18、cvsize pattern_size,

19、cvpoint2d32f*corners,

20、int*corner_count=null,

21、int flags=cv_calib_cb_adaptive_thresh);

22、该函数试图确定输入图像是否是棋盘模式,并确定角点的位置;如果所有角点都被检测到且它们都被以一定顺序排布,函数返回非零值,否则在函数不能发现所有角点或者记录它们地情况下,函数返回0;

23、2)亚像素精确化,采用find4quadcornersubpix();设cv_exports boolfind4quadcornersubpix(inputarray img,

24、inputoutputarray corners,

25、size region_size);

26、为了提高标定精度,需要在初步提取的角点信息上进一步提取亚像素信息,降低相机标定偏差,该函数是专门用来获取棋盘图上内角点的精确位置;

27、6)内角点可视化,采用drawchessboardcorners()函数;设cv_exports_w voiddrawchessboardcorners(inputoutputarray image,

28、size patternsize,

29、inputarray corners,

30、bool patternwasfound);

31、该函数将发现到的所有角点绘制到所提供的图像上;

32、7)相机标定,采用calibratecamera()函数;设

33、cv_exports_w double calibratecamera(

34、inputarrayofarrays objectpoints,

35、inputarrayofarrays imagepoints,

36、size imagesize,

37、cv_out inputoutputarray cameramatrix,

38、cv_out inputoutputarray distcoeffs,

39、outputarrayofarrays rvecs,

40、outputarrayofarrays tvecs,

41、int flags=0,

42、termcriteria criteria=termcriteria(

43、termcriteria::count+termcriteria::eps,30,dbl_epsilon));

44、该函数进行标定,计算相机内参和畸变系数,在使用该函数进行标定运算之前,需要对棋盘上每一个内角点的空间坐标系的位置坐标进行初始化,标定的结果是生成相机的内参矩阵cameramatrix、相机的5个畸变系数distcoeffs,另外每张图像都会生成属于自己的平移向量和旋转向量;8)标定效果评价,采用projectpoints()函数;设

45、void cv::projectpoints(inputarray_opoints,

46、inputarray_rvec,

47、inputarray_tvec,

48、inputarray_cameramatrix,

49、inputarray_distcoeffs,

50、outputarray_ipoints,

51、outputarray_jacobian,

52、double aspectratio)

53、该函数为对空间三维坐标点进行反向投影。

54、所述步骤s3进一步包括:

55、对左右摄像头使用一套内参和畸变参数,对图像去畸变和矫正,对采集的左右图使用initundistortrectifymap函数,即利用求得的相机的内参和畸变参数,对图像进行畸变的矫正,求出在x轴、y轴上的输出映射,所述去畸变信息,采用initundistortrectifymap()函数;设cv::initundistortrectifymap(inputarray_cameramatrix,

56、inputarray_distcoeffs,

57、inputarray_matr,

58、inputarray_newcameramatrix,

59、size size,

60、int m1type,

61、outputarray_map1,

62、outputarray_map2)

63、该函数对图像进行畸变的矫正;

64、然后通过remap函数根据指定的映射形式,将原图像进行重映射几何变换;所述重映射几何变换,采用remap()函数将矫正后的图像进行重映射几何变换,设

65、void remap(inputarray src,

66、outputarray dst,

67、inputarray map1,

68、inputarray map2,

69、int interpolation,

70、int bordermode=border_constant,

71、const scalar&bordervalue=scalar())

72、该函数将矫正后的图像进行重映射几何变换。

73、所述步骤s4进一步包括:

74、对矫正对齐的某张棋盘格进行角点检测,确定左图和右图中最外围四个角点的位置,以左图为基准,将右图四个角点位置通过透视变换,重新映射到左图角点位置,使左右图的位置对齐。

75、所述步骤s5进一步包括:

76、通过人脸检测得到人脸检测框,对检测框进行扩充,使裁剪出的人脸信息更充分,对矫正后的左图通过扩充后的检测框进行裁剪,得到左裁剪图,通过人脸检测框中心坐标,计算两图列方向的宽度,最后将计算的宽度差值加入右裁剪框的左端,以该裁剪框重新对右图进行裁剪,最终得到的右裁剪图将与左裁剪图完成对齐,将对齐的左右图应用于立体视觉中,进行活体检测。

77、所述人脸框裁剪方法实现的流程包括:

78、先计算人脸检测的宽高及它的中心点坐标,以中心点对检测框向上下左右进行扩充,扩充的尺寸为检测框宽和高的最大边的一半,其中中心点左边扩充为其他方向扩充的1.5倍,最后扩充后的宽高比为5:4,使用该比值是因为左右图本身存在视差,这样进行活体检测效果会更完整;以扩充尺寸计算左右图的宽度差值,这样的目的是让左右图的视差信息更明显,最后以该裁剪框裁剪左图,同时将裁剪框水平平移宽度差值个单位,在右图进行裁剪。

79、所述流程进一步包括:

80、5)人脸检测框,计算高h、宽w;

81、人脸检测得到检测框左上角坐标为:(x1,x2);

82、人脸检测得到检测框右下角坐标为:(x1,x2);

83、w=x2-x1;

84、h=y2-y1;

85、6)计算检测框中心坐标(center_x,center_y);

86、检测框中心坐标为:

87、center_x=(x1+x2)/2;

88、center_y=(y1+y2)/2;

89、7)计算裁剪长度radius,max(h,w)/2;

90、radius=max(h,w)/2;

91、8)扩充裁剪框,检测框比值5:4,

92、左上点x:center_x-1.5*radius

93、左上点y:center_y-radius

94、右下点x:center_x+radius

95、右下点y:center_y+radius;

96、4a)以扩充后的裁剪框裁剪左图;同时,

97、4b)计算宽度差值,将裁剪框水平平移,并裁剪右图;

98、宽度差值diff:4.0*radius/64.0;

99、左上点x:center_x-1.5*radius+diff;

100、左上点y:center_y-radius;

101、右下点x:center_x+radius+diff;

102、右下点y:center_y+radius。

103、由此,本技术的优势在于:

104、1.采集少量棋盘格图片,进行一次单目标定,左右摄像头通用一个标定参数,在保障标定准确率的前提下,降低了标定过程的复杂度。

105、2.通过透视变换,使左右成像图中的位置更精确,这一步目的是为了优化单目标定矫正后的图,防止左右图像在行方向上的差异过大,将产生的高度差降到最低,对双目立体匹配求出的视差图得到了保障。

106、3.通过对左右图进行裁剪,在求解视差的过程中,大大提高了算法的效率,同时计算左右裁剪图的宽度差值,提高了视差图的准确率。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1