1.以平面和标记物进行姿态估计
平面和标记物姿态估计可以通过图像已标记的物体,和已经标定的照相机来计算得出相机拍摄时候的姿态(相机的位移和旋转变换)
这种方法的思路如下。我们有两张不同角度拍摄的图像。首先,通过sift特征提取,RANSAC算法得到估计的单应性矩阵(关于SIFT,RANSAC和单应性矩阵,在我之前的博文有介绍)。其次,因为这个单应性矩阵是估计出来,所以代码中会对其进行验证,通过画一个正方形来判断单应性矩阵是否正确。最后,在画出正方体来看出相机的物理位置的变换。
代码:
from pylab import *
from PIL import Image
from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
If you have PCV installed, these imports should work
from PCV.geometry import homography, camera
from PCV.localdescriptors import sift
“”"
This is the augmented reality and pose estimation cube example from Section 4.3.
“”"
def cube_points(c, wid):
“”" Creates a list of points for plotting
a cube with plot. (the first 5 points are
the bottom square, some sides repeated). “”"
p = []
# bottom
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]) # same as first to close plot
# top
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]) # same as first to close plot
# vertical sides
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 array(p).T
def my_calibration(sz):
“”"
Calibration function for the camera (iPhone4) used in this example.
“”"
row, col = sz
fx =