【计算机视觉】基础矩阵

本文深入探讨了计算机视觉中的基础矩阵和外极几何概念。基础矩阵是描述两幅图像对应点间关系的数学工具,通过八点估算法和RANSAC等方法估算。实验结果显示,匹配点的数量和质量对基础矩阵的准确性有很大影响,室外近距离场景通常比远距离或室内场景提供更准确的匹配结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


一、外极几何

用两个相机在不同位置拍摄同一物体,两张照片中的景物有重叠部分,那么理论上这两张照片会存在一定的对应关系即外极几何。

外极几何示意图:
在这里插入图片描述
在上图中,PO1O2为极平面,O1、O2分别为相机的中心点,P为空间中一点,P在图像平面上的投影分别为p1、p2,照相机中心之间的基线O1和O2与图像平面交于外极点e1、e2
而对极几何则是描述极点、极平面、极线这几个量之间的对应关系。


二、基础矩阵 F

1.基础矩阵原理

为了描述对极几何,引入基础矩阵F。对于一幅图像上的点x(图上p1),在另一幅图像上存在对极线l’,并且在第二幅图像上,与x匹配的点x’(点p2)必然在l’上。为了表示x与l’关系,我们令基础矩阵F定义为: l′=Fx。

假设第一幅图到第二幅图之间存在单应性变换H,则 x′=Hx。

又因为l’是表示过对极点e2和图像点x’的直线,可以表示为: l′=e2×x′=[e2]xx′=[e2]xHx。

所以可得 F=[e2]xH。

其中e′=[a1,a2,a3]Te′=[a1,a2,a3]T,则它的反对称阵定义为:在这里插入图片描述

在已知两个摄像机的射影矩阵P和P’时,对于图像上的一点x,可以得到其反投影射线方程为: X(λ)=P+ x+λC

其中P+ 是P的伪逆,即PP+ = I,C为摄像机中心。射线上的两点:P+ x(当λ=0)、C(当λ=∞)在第二个摄像机P’拍摄下,在第二幅视图上的点分别为P′P+ 和P′C,这两点过对极线l’,即 l′=(P′C)×(P′P+ x)=[e′]x(P′P+ )x

可以推得 F=[e′]xP′P+

2.基础矩阵性质

(1) 基础矩阵是秩为2、自由度为7的齐次矩阵。
(2)若x与x’是两幅图上的对应点,那么x′TFx=0。
(3)l’是对应于x的对极线,l′=Fx。
(4)若e是第二个摄像机光心在第一幅图像上的极点,那么Fe=0 。

3.基础矩阵估算方法

3.1 八点估算法

基本矩阵是由该方程定义的: x′TFx=0

其中x↔x′是两幅图像的任意一对匹配点。由于每一组点的匹配提供了计算F系数的一个线性方程,当给定至少7个点(3×3的齐次矩阵减去一个尺度,以及一个秩为2的约束),方程就可以计算出未知的F。我们记点的坐标为x=(x,y,1)T,x′=(x′,y′,1)T

又因为F为:
在这里插入图片描述

所以可得到方程:
在这里插入图片描述
即相应方程式为
在这里插入图片描述

给定n组点的集合,我们有如下方程:
在这里插入图片描述
如果存在确定(非零)解,则系数矩阵A的秩最多是8。由于F是齐次矩阵,所以如果矩阵A的秩为8,则在差一个尺度因子的情况下解是唯一的。可以直接用线性算法解得。

如果由于点坐标存在噪声则矩阵AA的秩可能大于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,则
在这里插入图片描述
最终的解
在这里插入图片描述

3.2 RANSAC随机取样一致法估算(略)


三、基础矩阵代码实现

1.相关代码

from PIL import Image
from numpy import *
from pylab import *
from PCV.geometry import camera
from PCV.geometry import homography
from PCV.geometry import sfm
from PCV.localdescriptors import sift
from PCV.tools import ransac
import numpy as np


# Read features
im1 = array(Image.open('pic1.jpg'))
sift.process_image('imim1.jpg', 'img1.sift')

im2 = array(Image.open('pic2.jpg'))
sift.process_image('imim2.jpg', 'img2.sift')


l1, d1 = sift.read_features_from_file('img1.sift')
l2, d2 = sift.read_features_from_file('img2.sift')


matches = sift.match_twosided(d1, d2
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值