怎么利用python实现基于“增大化现实”技术

  介绍

这篇文章将为大家详细讲解有关怎么利用python实现,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

<强>大致步骤如下:

<>强识别参考平面

在这一步中,我们所需要做的事就是提取参考图像和目标图像的筛选特征,然后使用RANSAC算法稳健地估计单应性矩阵。

代码如下:

#计算特征   sift.process_image (& # 39; D:输入图片/book_frontal.JPG& # 39;,, & # 39; im0.sift& # 39;)   l0, d0 =, sift.read_features_from_file (& # 39; im0.sift& # 39;)      sift.process_image (& # 39; D:输入图片/book_per.JPG& # 39;,, & # 39; im1.sift& # 39;)   l1, d1 =, sift.read_features_from_file (& # 39; im1.sift& # 39;)      #匹配特征,并计算单应性矩阵   时间=matches  sift.match_twosided (d0, d1)   时间=ndx  matches.nonzero () [0]   时间=fp  homography.make_homog (l0 [ndx,: 2] .T)   时间=ndx2  [int(匹配[我]),for 小姐:拷贝ndx]   时间=tp  homography.make_homog (l1 [ndx2,: 2] .T)      时间=model  homography.RansacModel ()   时间=H, inliers  homography.H_from_ransac (fp, tp,,模型)

由上面代码可得到单应性矩阵,它能够将一幅图像中标记物的点映射到另一幅图像中的对应点。还需要建立x - y (Z=0)三维坐标系,标记物在Z=0平面上,原点在标记物的某个位置上。

从单应性推导出从参考面坐标系到目标图像坐标系的转换

在进行坐标转换之前,为了检验单应性矩阵结果的正确性,需要将一些三维物体放置在目标图像上,本实验使用了一个立方体。产生立方体的代码如下:

def  cube_points (c, wid):      时间=p 才能;[]   p.append才能([c [0] wid,, c [1] wid。, c [2] wid])   p.append才能([c [0] wid,, c [1] + wid, c [2] wid])   p.append才能([c [0] + wid, c [1] + wid, c [2] wid])   p.append才能([c [0] + wid, c [1] wid。, c [2] wid])   p.append才能([c [0] wid,, c [1] wid。, c [2] wid])      p.append才能([c [0] wid,, c [1] wid。, c [2] + wid])   p.append才能([c [0] wid,, c [1] + wid, c [2] + wid])   p.append才能([c [0] + wid, c [1] + wid, c [2] + wid])   p.append才能([c [0] + wid, c [1] wid。, c [2] + wid])   p.append才能([c [0] wid,, c [1] wid。, c [2] + wid])      p.append才能([c [0] wid,, c [1] wid。, c [2] + wid])   p.append才能([c [0] wid,, c [1] + wid, c [2] + wid])   p.append才能([c [0] wid,, c [1] + wid, c [2] wid])   p.append才能([c [0] + wid, c [1] + wid, c [2] wid])   p.append才能([c [0] + wid, c [1] + wid, c [2] + wid])   p.append才能([c [0] + wid, c [1] wid。, c [2] + wid])   p.append才能([c [0] + wid, c [1] wid。, c [2] wid]      return 数组(p)。T

先计算出照相机的标定矩阵,就可以得出两个视图间的相对变换

代码如下:

#计算照相机标定矩阵,使用图像的分辨率为747 * 1000   时间=K  my_calibration ((747,, 1000))      #位于边长为0.2,Z=0平面上的三维点   时间=box  cube_points ([0, 0, 0.1],, 0.1)      #投影第一幅图像上底部的正方形   cam1 =, camera.Camera (hstack ((K,点(K,数组([[0],[0],[1]))))))   #底部正方形上的点   box_cam1 =, cam1.project (homography.make_homog(框(:,:5)))      #使用H将点变换到第二幅图像上   时间=box_trans  homography.normalize(点(H, box_cam1))      #从cam1和H中计算第二个照相机矩阵   时间=cam2  camera.Camera(点(H, cam1.P))   A =,点(linalg.inv (K), cam2.P [:,: 3)   A =,阵列(((:,,0),一个:,,1,,交叉([0]:也,,(:,,1)))).T   ,cam2.P[:: 3],=,点(K,,)      #使用第二个照相机矩阵投影   时间=box_cam2  cam2.project (homography.make_homog(箱))

在图像(像素空间)中投影我们的3 d模型并绘制它。

#底部正方形的二维投影   图()   imshow (im0)   情节(box_cam1 [0,,:], box_cam1 1,,,,,线宽=3)   标题(& # 39;2 d  projection  of  bottom 广场# 39;)   轴(& # 39;从# 39;)      #使用H对二维投影进行变换   图()   imshow (im1)   情节(box_trans [0,,:], box_trans 1,,,,,线宽=3)   标题(& # 39;2 d  projection  transfered  with  h # 39;)   轴(& # 39;从# 39;)      #三维立方体   图()   imshow (im1)   情节(box_cam2 [0,,:], box_cam2 1,,,,,线宽=3)   标题(& # 39;3 d  points  projected 拷贝second 图像# 39;)   轴(& # 39;从# 39;)

怎么利用python实现基于“增大化现实”技术