文章目录
1.原理
1.1
对极平面:任何包含基线的平面都称为对极平面,或者说是对极平面束中的平面,如上图中的π
对极点:摄像机的基线与每幅图像的交点;即上图中的点e和e’
对极线:对极平面与图像的交线;例如,上图中的直线l和l’
基本矩阵F:对应点对之间的约束
所有的极线都通过其极点
1.2基本矩阵
观测点P在相机1坐标系的坐标就可以通过转换变成相机2坐标系下
其中R和T分别表示旋转和平移,将其左叉乘一个T
再左点乘一个P’得到
所以
2.代码
2.1 8点算法
from PIL import Image
from numpy import *
from pylab import *
import numpy as np
import PCV.geometry.camera as camera
import PCV.geometry.homography as homography
import PCV.geometry.sfm as sfm
import PCV.localdescriptors.sift as sift
im1 = array(Image.open('D:/Study/untitled1/222/91.jpg'))
sift.process_image('D:/Study/untitled1/222/91.jpg', 'im1.sift')
im2 = array(Image.open('D:/Study/untitled1/222/92.jpg'))
sift.process_image('D:/Study/untitled1/222/92.jpg', 'im2.sift')
l1, d1 = sift.read_features_from_file('im1.sift')
l2, d2 = sift.read_features_from_file('im2.sift')
matches = sift.match_twosided(d1, d2)
ndx = matches.nonzero()[0]
x1 = homography.make_homog(l1[ndx, :2].T)
ndx2 = [int(matches[i]) for i in ndx]
x2 = homography.make_homog(l2[ndx2, :2].T)
d1n = d1[ndx]
d2n = d2[ndx2]
x1n = x1.copy()
x2n = x2.copy()
figure(figsize=(16,16))
sift.plot_matches(im1, im2, l1, l2, matches, True)
show