RANSAC算法实现图像全景拼接

本文介绍了使用RANSAC算法进行图像全景拼接的原理和实验过程。通过SIFT特征匹配和RANSAC剔除误匹配点,确定单应性矩阵,实现图像的准确拼接。实验展示了在不同场景下,如固定点位和视差变化大的场景,进行图像拼接的效果,并分析了遇到的问题及解决方法,包括调整图片像素值和优化拼接算法。
摘要由CSDN通过智能技术生成

一、全景拼接的原理

1.RANSAC算法介绍

RANSAC(Random Sample Consensus)即随机采样一致性,该方法是用来找到正确模型来拟合带有噪声数据的迭代方法。给定一个模型,例如点集之间的单应性矩阵,RANSAC的作用就在于,找到正确数据点的同时摒弃噪声点。

2.使用RANSAC算法来求解单应性矩阵

在进行图像拼接时,我们首先要解决的是找到图像之间的匹配的对应点。通常我们采用SIFT算法来实现特征点的自动匹配,SIFT是具有很强稳健性的描述子,比起图像块相关的Harris角点,它能产生更少的错误的匹配,但仍然还是存在错误的对应点。所以需要用RANSAC算法,对SIFT算法产生的128维特征描述符进行剔除误匹配点。
由直线的知识点可知,两点可以确定一条直线,所以可以随机的在数据点集中选择两点,从而确定一条直线。然后通过设置给定的阈值,计算在直线两旁的符合阈值范围的点,统计点的个数inliers。inliers最多的点集所在的直线,就是我们要选取的最佳直线。
RANSAC算法就是在一原理的基础上,进行的改进,从而根据阈值,剔除错误的匹配点。首先,从已求得的匹配点对中抽取几对匹配点,计算变换矩阵。然后对所有匹配点,计算映射误差。接着根据误差阈值,确定inliers。最后针对最大inliers集合,重新计算单应矩阵 H。

3.拼接图像

在估计出图像的单应性矩阵后,我们需要将所有的图像扭曲到一个公共的图像平面上。通常我们以中心图像平面作为公共平面,然后将中心图像左边或者右边的区域填充为0,以便为扭曲的图像腾出空间。

二、全景拼接实验

此次实验分为两组不同情况拍摄的场景的图片的拼接

1.针对固定点位拍摄多张图片,以中间图片为中心,实现图像的拼接融合

(1)输入图片

在这里插入图片描述

(2)代码

# -*- coding: utf-8 -*-
from pylab import *
from numpy import *
from PIL import Image

# If you have PCV installed, these imports should work
from PCV.geometry import homography, warp
from PCV.localdescriptors import sift
import os

print os.getcwd()
"""
This is the panorama example from section 3.3.
"""

# set paths to data folder
featname = ['D:\computervision-picture\sample' + str(i + 1) + '.sift' for i in range(5)]
imname = ['D:\computervision-picture\sample' + str(i + 1) + '.jpg' for i in range(5)]

# extract features and match
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])

for i in range(4):
    im1 = array(Image.open(imname[i]))
    im2 = array(Image.open(imname[i + 1]))
    figure()
    sift.plot_matches(im2, im1, l[i + 1], l[i], matches[i], show_below=True)

# 将匹配转换成齐次坐标点的函数
def convert_points(j):
    ndx = matches[j].nonzero()[0]
    fp = homography.make_homog(l[j + 1][ndx, :2].T)
    ndx2 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值