python计算机视觉-图像全景拼接

1.创建全景图

在同一位置(即图像的照相机位置相同)拍摄的两幅或者多幅图像是单应性相关的。我们经常使用该约束将很多图像缝补起来,拼成一个大的图像来创建全景图像。

1.2 RANSAC

RANSAC 是“RANdom SAmple Consensus”(随机一致性采样)的缩写。该方法是用来找到正确模型来拟合带有噪声数据的迭代方法。给定一个模型,例如点集之间的单应性矩阵,RANSAC 基本的思想是,数据中包含正确的点和噪声点,合理的模型应该能够在描述正确数据点的同时摒弃噪声点。
RANSAC 的标准例子:用一条直线拟合带有噪声数据的点集。简单的最小二乘在该例子中可能会失效,但是 RANSAC 能够挑选出正确的点,然后获取能够正确拟合的直线。

1.3 稳健的单应性矩阵估计

我们在任何模型中都可以使用 RANSAC 模块。在使用 RANSAC 模块时,我们只需要在相应 Python 类中实现 fit() 和 get_error() 方法,剩下就是正确地使用 ransac.py。我们这里使用可能的对应点集来自动找到用于全景图像的单应性矩阵。

import sift
featname = ['Univ'+str(i+1)+'.sift' for i in range(5)]
imname = ['Univ'+str(i+1)+'.jpg' for i in range(5)]
l = {
   }
d = {
   }
for i in range(5):
 sift.process_image(imname[i],featname[i])
 l[i],d[i] = sift.read_features_from_file(featname[i]) 
matches = {
   }
for i in range(4):
 matches[i] = sift.match(d[i+1],d[i])

显然,并不是所有图像中的对应点对都是正确的。实际上,SIFT 是具有很强稳健性的描述子,能够比其他描述子,例如图像块相关的Harris 角点,产生更少的错误的匹配。但是该方法仍然远非完美。
如图 所示为使用 SIFT 特征自动找到匹配对应。
在这里插入图片描述
我们使用 RANSAC 算法来求解单应性矩阵:

class RansacModel(object): 
 """ 用于测试单应性矩阵的类,其中单应性矩阵是由网站 http://www.scipy.org/Cookbook/RANSAC 上 的 ransac.py 计算出来的 """
 def __init__(self,debug=False):
 self.debug = debug
 def fit(self, data):
 """ 计算选取的 4 个对应的单应性矩阵 """
 # 将其转置,来调用 H_from_points() 计算单应性矩阵
 data = data.T
 # 映射的起始点
 fp = data[:3,:4]
 # 映射的目标点
 tp = data[3:,:4]
 # 计算单应性矩阵,然后返回
 return H_from_points(fp,tp)
def get_error( self, data, H):
 """ 对所有的对应计算单应性矩阵,然后对每个变换后的点,返回相应的误差 """
 data = data.T
 # 映射的起始点
 fp = data[:3]
 # 映射的目标点
 tp = data[3
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值