python opencv 三维重建_SFM三维重建(Python+OpenCV)

本文介绍了使用Python和OpenCV进行三维重建的SFM(Structure from Motion)方法,包括基础矩阵原理、实验流程和代码实现。通过SIFT算法检测匹配特征点,运用RANSAC估计基础矩阵,计算相机矩阵并进行三角剖分,从而得到三维点云。实验展示了室外和室内场景的重建效果,并强调了拍摄照片时的注意事项。
摘要由CSDN通过智能技术生成

一、基础矩阵原理

类似于单应性矩阵,当存在噪声和不正确的匹配时,我们需要估计基础矩阵。与单应性矩阵估计相比,基础矩阵增加了默认的最大迭代次数,改变了匹配的阈值,使其匹配更加精准。基础矩阵描述了空间中的点在两个像平面中的坐标对应关系,不仅包含了本质矩阵E的两个摄像机相关的旋转平移信息,还包含了两个摄像机的内参。可用于简化匹配,去除错配特征。

c0d8ffd43b514202b5160d1760095ca2.jpg

具体公式的推导,参考博客:https://blog.csdn.net/kokerf/article/details/72191054#commentBox

https://www.cnblogs.com/wangguchangqing/p/8214032.html

二、实验流程

1、检测特征点,然后在两幅图像间匹配

用SIFT算法实现两幅图像的特征点检测,找到对应的匹配点并绘制出来

2、由匹配计算基础矩阵

使用RANSAC方法估计最佳基础矩阵F,以及正确点的索引

3、由基础矩阵计算照相机矩阵

在两个视图的场景中,照相机矩阵可以由基础矩阵恢复出来。在没有任何照相机内参数知识的情况下,照相机矩阵只能通过射影变换恢复出来。因此,在无标定的情况下,第二个照相机矩阵可以使用一个(3*3)的射影变换出来。

假设第一个相机矩阵: P1=[I|0] ,第二相机矩阵: P2=[M | e′]

其中  e′ 是极点 (e′T F= 0),  M = [e′×]F,  e′× 是e的叉积

4、三角剖分这些三维点

从照相机矩阵的列表中,对正确点的三维点进行三角剖分,挑选出经过三角剖分后,在两个照相机前均含有最多场景点,即取出真正在照相机前面的点。

三、代码

# coding: utf-8

from PIL import Image

from numpy import *

from pylab import *

import numpy as np

from PCV.geometry import homography, camera,sfm

from PCV.localdescriptors import sift

camera = reload(camera)

homo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值