图像拼接

图像拼接是利用相同特征点的图像进行拼接,常用于全景图创建。本文介绍了SIFT等稳定特征点,关键点与描述子的概念,并详细阐述了RANSAC算法在处理包含异常匹配数据时的作用,用于找到最佳单应性矩阵,创建高质量的全景图像。同时,分析了RANSAC算法的优缺点。
摘要由CSDN通过智能技术生成

图像拼接

原理:图像拼接是将两张或两张以上、且两两图像之间具有相同的特征点(SIFT特征点)的图像通过特征匹配拼接在一起。手机上照相机的全景照相就是图像拼接的一个应用。

特征点匹配

计算机视觉的研究者们设计了许多更为稳定的的特征点,这些特征点不会随着相机的移动,旋转或者光照的变化而变化。例如:SIFT,SURF,ORB等。
一个图像的特征点由两部分构成:关键点(Keypoint)和描述子(Descriptor)
关键点指的是该特征点在图像中的位置,有些还具有方向、尺度信息;
描述子通常是一个向量,按照人为的设计的方式,描述关键点周围像素的信息。通常描述子是按照外观相似的特征应该有相似的描述子设计的。

创建全景图

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

上面5幅图像是从不同角度对目标物进行拍摄

RANSAC

RANSAC(RANdom SAmple Consensus,随机抽样一致),它是根据一组包含局外点(异常数据)的样本数据集,计算出数据的数学模型参数,得到有效样本数据的算法。在这里换句话就是说,可以从一组包含异常匹配(匹配错误)的特征点数据集中,找到可以拟合这组数据的数学模型参数,得到正确匹配的特征点。 RANSAC目的就是找到一个单应性矩阵H,使得能够满足这个单应性矩阵的特征点最多。

RANSAC算法步骤

  1. 选择4对匹配特征点(选择4对特征点因为单应性矩阵有8个自由度,需要4个特征点,每个特征点都能构造2个方程,然后求解单应性矩阵,但是任意3个点或4个点不能在同一条直线上)
  2. 根据直接线性变换解法DLT计算单应性矩阵H
  3. 对所匹配点,计算映射误差
  4. 根据误差阈值,确定inliers数量
  5. 针对最大的inliers集合,重新计算单应性矩阵H

代码

下面展示代码`

// 
from array import array

from numpy import *
from matplotlib.pyplot import *
from PIL import Image
import warp
import homography
from PCV.localdescriptors import sift

featname = ['img/' + str(i + 1) + '.sift' for i in range(5)]
imname = ['img/' + str(i + 1) + '.jpg' for i in range(5)]
l = {
   }
d = {
   }
for i in range(5):
    sift.process_image(imname
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
压缩包中包含的具体内容: 对给定数据中的6个不同场景图像,进行全景图拼接操作,具体要求如下: (1) 寻找关键点,获取关键点的位置和尺度信息(DoG检测子已由KeypointDetect文件夹中的detect_features_DoG.m文件实现;请参照该算子,自行编写程序实现Harris-Laplacian检测子)。 (2) 在每一幅图像中,对每个关键点提取待拼接图像的SIFT描述子(编辑SIFTDescriptor.m文件实现该操作,运行EvaluateSIFTDescriptor.m文件检查实现结果)。 (3) 比较来自两幅不同图像的SIFT描述子,寻找匹配关键点(编辑SIFTSimpleMatcher.m文件计算两幅图像SIFT描述子间的Euclidean距离,实现该操作,运行EvaluateSIFTMatcher.m文件检查实现结果)。 (4) 基于图像中的匹配关键点,对两幅图像进行配准。请分别采用最小二乘方法(编辑ComputeAffineMatrix.m文件实现该操作,运行EvaluateAffineMatrix.m文件检查实现结果)和RANSAC方法估计两幅图像间的变换矩阵(编辑RANSACFit.m 文件中的ComputeError()函数实现该操作,运行TransformationTester.m文件检查实现结果)。 (5) 基于变换矩阵,对其中一幅图像进行变换处理,将其与另一幅图像进行拼接。 (6) 对同一场景的多幅图像进行上述操作,实现场景的全景图拼接(编辑MultipleStitch.m文件中的makeTransformToReferenceFrame函数实现该操作)。可以运行StitchTester.m查看拼接结果。 (7) 请比较DoG检测子和Harris-Laplacian检测子的实验结果。图像拼接的效果对实验数据中的几个场景效果不同,请分析原因。 已经实现这些功能,并且编译运行均不报错!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值