计算机视觉--对极几何与基础矩阵

1、对极几何及基础矩阵

1.1 对极几何
1.1.1 概念

对极几何,一定是对两幅图像而言,即对极几何涉及两幅图像。对极几何实际上是“两幅图像之间的对极几何”,它是图像平面与以基线为轴的平面束的交的几何(这里的基线是指连接摄像机中心的直线),如下图所示,对极几何描述的是左右两幅图像(点x和x’对应的图像)与以CC’为轴的平面束的交的几何。
在这里插入图片描述
直线CC’为基线,以该基线为轴存在一个平面束,该平面束与两幅图像平面相交,下图给出了该平面束的直观形象,可以看到,该平面束中不同平面与两幅图像相交于不同直线。
在这里插入图片描述

1.1.2 相关概念

在这里插入图片描述
对极点: 基线(上图中的baseline)与像平面相交点(也可描述为光心在另一幅图像中的投影)。如上图中的点e和e’。
对极平面: 包含基线的平面。如上图中的平面π。
对极线: 对极平面与像平面的交线,如上图中的直线l和l’。
在这里插入图片描述
对极平面束: 以基线为轴的平面束。上图给出了包含两个平面的对极平面束。

1.2 基础矩阵

基础矩阵F是一个3×3的矩阵,表达了立体像对的像点之间的对应关系。在对极几何中,对于立体像对中的一对同名点,它们的齐次化图像坐标分别为p与 p’,表示一条必定经过p’的直线(极线)。这意味着立体像对的所有同名点对都满足:p′TFp=0
F矩阵中蕴含了立体像对的两幅图像在拍摄时相互之间的空间几何关系(外参数)以及相机检校参数(内参数),包括旋转、位移、像主点坐标和焦距。因为F矩阵的秩为2,并且可以自由缩放(尺度化),所以只需7对同名点即可估算出F的值。

本质矩阵E与基础矩阵之间的关系可由下式表达:E=K′TFK。其中K和K’分别为两个相机的内参数矩阵。

2、实验过程

2.1 八点估算法

基础矩阵F定义为:x′TFx=0。任给两幅图像中的匹配点 x 与 x’,由于每一对匹配点的匹配提供了计算F系数的一个线性方程,当给定7对匹配点,方程就可以计算出基础矩阵F。记匹配点的坐标为x=(x,y,1)T,x′=(x′,y′,1)T。
又因为基础矩阵F为:
在这里插入图片描述
有相应方程式如下:
在这里插入图片描述
给定n组点的集合,我们有如下方程:
在这里插入图片描述
如果存在确定(非零)解,则系数矩阵A的秩最多是8。由于F是齐次矩阵,所以如果矩阵A的秩为8,则在差一个尺度因子的情况下解是唯一的。可以直接用线性算法解得。

如果由于点坐标存在噪声则矩阵A的秩可能大于8(也就是等于9,由于A是n×9的矩阵)。这时候就需要求最小二乘解,这里就可以用SVD来求解,f的解就是系数矩阵A最小奇异值对应的奇异向量,也就是A奇异值分解后A=UDVT中矩阵V的最后一列矢量,这是在解矢量f在约束∥f∥下取∥Af∥最小的解。以上算法是解基本矩阵的基本方法,称为8点算法。
上述求解后的F不一定能满足秩为2的约束,因此还要在F的基础上加以约束。通过SVD分解可以解决,令F=UΣVT,则
在这里插入图片描述
因为要秩为2,所以取最后一个元素设置为0,则
在这里插入图片描述
最终的解为:
在这里插入图片描述

2.2 实验结果展示
2.2.1 求解基础矩阵参数
2.2.1.1 七点估算法求解

SIFT特征匹配结果:
在这里插入图片描述
七点估算法运行结果:
在这里插入图片描述
基础矩阵参数求解结果:
在这里插入图片描述

2.2.1.2 八点估算法求解

SIFT特征匹配结果:
在这里插入图片描述
八点估算法运行结果:
在这里插入图片描述
基础矩阵参数求解结果:
在这里插入图片描述

2.2.1.3 十点估算法求解

SIFT特征匹配结果:
在这里插入图片描述
十点估算法运行结果:
在这里插入图片描述
基础矩阵参数求解结果:
在这里插入图片描述

2.2.1.4 小结

实验中分别用七点、八点、十点估算法求解基础矩阵参数,得到的结果都不一样,从实验结果上来看不存在比如匹配点数越大,矩阵参数越大或者匹配点数越小,矩阵参数越小这样的规律,即矩阵参数与匹配点数目之间并不存在某种对应关系。此外,就运行速率上来说,八点估算法速率最高,七点估算法次之,十点估算法最慢,可能是图像的拍摄对运行效率有影响。

2.2.1.5 源代码
# -*- coding: utf-8 -*-
from PIL import Image
from numpy import *
from pylab import *
import numpy as np
from PCV.geometry import camera
from PCV.geometry import homography
from PCV.geometry import sfm
from PCV.localdescriptors import sift
%matplotlib inline
# -*- coding: utf-8 -*-

# Read features
# 载入图像,并计算特征
im1 = array(Image.open('c:/T/7.jpg'))
sift.process_image('c:/T/7.jpg', 'c:/T/7.sift')
l1, d1 = sift.read_features_from_file('c:/T/7.sift')

im2 = array(Image.open('c:/T/8.jpg'))
sift.process_image('c:/T/8.jpg', 'c:/T/8.sift')
l2, d2 = sift.read_features_from_file('c:/T/8.sift')

# 匹配特征
matches = sift.match_twosided(d1, d2)
ndx = matches.nonzero()[0]

# 使用齐次坐标表示,并使用 inv(K) 归一化
x1 = homography.make_homog(l1[ndx, :2].T)
ndx2 = [int(matches[i]) for i in ndx]
x2 = homography.make_homog(l2[ndx2, :2].T)

x1n = x1.copy()
x2n = x2.copy()
print(len(ndx))

figure(figsize=(16,16)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值