一、在图片上实现3D图片投影
(一)相机投影模型
(1)针孔相机模型
首先定义坐标系:
(1)相机坐标系(三维)
在这个坐标系中,相机的中心为光心,以光心c为原点和坐标轴X,Y,Z组成了相机坐标系
(2)图片坐标系(二维)
在一个图像平面中,以平面的中心像主点P为原点和坐标轴x,y组成了图片坐标系。
这两个坐标系之间的线性变化为:
(2)内参数
内参数是指相机内部自带的,不受外界影响的参数,主要有焦距f和相机自带的误差
内参矩阵:
(3)外参数
主要是旋转、平移带来的参数变化
两类参数的联系
二、以平面和标记物进行姿态估计
(1)在一幅图像上叠加一个立方体
基本流程:
1.提取两幅图像的sift特征
2.用RANSAC算法估计单应性矩阵
3.在图像中投影成3D模型
前两个问题在之前的博客中都有详细的过程SIFT详解 RANSAC算法
现在重点解决第三个问题
原图如下:
代码参考《Python计算机视觉》
from pylab import *
from PIL import Image
# 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.
"""
import os
root=os.getcwd()+"\\"
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