【计算机视觉】图像全景拼接 RANSAC_图像ransac-程序员宅基地

技术标签: RANSAC  python  计算机视觉  图像拼接  

1、全景图像拼接原理

1.1 RANSAC算法原理

RANSAC是“RANdom SAmple Consensus(随机抽样一致)”的缩写。它可以从一组包含“局外点”的观测数据集中,通过迭代方式估计数学模型的参数。它是一种不确定的算法——它有一定的概率得出一个合理的结果;为了提高概率必须提高迭代次数。

RANSAC的基本假设是:

(1)数据由“局内点”组成,例如:数据的分布可以用一些模型参数来解释;

(2)“局外点”是不能适应该模型的数据;

(3)除此之外的数据属于噪声。

局外点产生的原因有:噪声的极值;错误的测量方法;对数据的错误假设。

RANSAC也做了以下假设:给定一组(通常很小的)局内点,存在一个可以估计模型参数的过程;而该模型能够解释或者适用于局内点。

RANSAC的算法步骤:

   1. 随机从数据集中随机抽出4个样本数据 (此4个样本之间不能共线),计算出变换矩阵H,记为模型M;

   2. 计算数据集中所有数据与模型M的投影误差,若误差小于阈值,加入内点集 I

   3. 如果当前内点集 I 元素个数大于最优内点集 I_best , 则更新 I_best = I,同时更新迭代次数k ;

   4. 如果迭代次数大于k,则退出 ; 否则迭代次数加1,并重复上述步骤;

  注:迭代次数k在不大于最大迭代次数的情况下,是在不断更新而不是固定的

  其中,p为置信度,一般取0.995;w为"内点"的比例 ; m为计算模型所需要的最少样本数=4;

1.2 单应性矩阵估计

平面的单应性被定义为一个平面到另外一个平面的投影映射。

这边通过ransac算法来求解单应性矩阵。

1.3 图像拼接

  使用RANSAC算法估计出图像间的单应性矩阵,将所有的图像扭曲到一个公共的图像平面上。通常,这里的公共平面为中心图像平面。一种方法是创建一个很大的图像,比如将图像中全部填充0,使其和中心图像平行,然后将所有的图像扭曲到上面。由于我们所有的图像是由照相机水平旋转拍摄的,因此我们可以使用一个较简单的步骤:将中心图像左边或者右边的区域填充为0,以便为扭曲的图像腾出空间。

2、图像拼接代码实现

 使用RANSAC算法求解单应性矩阵 RansacModel类是用于测试单应性矩阵的类 里面包含了fit()和get_error()方法

fit()方法计算选取的四个对应的单应性矩阵

get_error() 是对所有的对应计算单应性矩阵,然后对每个变换后的点,返回相应的误差

class RansacModel(object):
    """ Class for testing homography fit with ransac.py from
        http://www.scipy.org/Cookbook/RANSAC"""

    def __init__(self, debug=False):
        self.debug = debug

    def fit(self, data):
        """ Fit homography to four selected correspondences. """

        # transpose to fit H_from_points()
        data = data.T

        # from points
        fp = data[:3, :4]
        # target points
        tp = data[3:, :4]

        # fit homography and return
        return H_fro
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_37367702/article/details/88927239

智能推荐

ActiveMQ和Jetty整合使用-程序员宅基地

在ActiveMQ中的activemq.bat启动的时候,通过jetty启动ActiveMQ的管理控制台界面。在一般的Java应用程序中如果想让WEB应用程序启动,那么比较简单的方式就是通过使用jetty启动web应用程序。具体代码如下:package org.apache.activemq.tool;import org.eclipse.jetty.serve...

记第二次面试——作业帮算法实习(已收到offer)_作业帮第二轮面试是什么-程序员宅基地

0.前言周一面试头条失利之后回来做了些总结。这一周继续刷题并把做过的题总结了一遍,把《统计学习方法》上经典的算法再手推了一下,还看了GDBT和XGBoost这两个比较火的算法,都手动推导了。然后投了一些公司,周4收到作业帮,百度和创新奇智我在学校主要是做AI+教育方向的,作业帮这个岗位也是做学生能力评估、学习资源推荐,和我我在学校实验室做的非常match。1.面试1.1 一面首先是介绍..._作业帮第二轮面试是什么

XPOSED框架下载地址_xposed官网_Free飝Fly的博客-程序员宅基地

虽然现在Xposd没有前几年那么火了,很多都用面具了,但有时还是想拿老手机来折腾下,发现曾经比较好找的资源现在也很难找了(分享的人少了,原来的下载链接被和谐或取消了)。那就把这些信息记录下来吧,方便以后查看XPOSED官网:https://repo.xposed.info/GitHub:https://github.com/rovo89/Xposed不同版本XPOSED卡刷包:http://dl-xda.xposed.info/framework/..._xposed官网

自考 C++ 杂记 —— 多态性及虚函数_构造函数调用虚函数采用动态联编-程序员宅基地

1.多态性静态联编:编译时的多态性,函数重载实现动态联编:运行时的多态性,虚函数实现2.虚函数的定义只能是一个成员函数,不能是静态成员,用virtual关键字声明。一旦基类定义了虚函数,该基类的派生类中的同名函数(返回值、参数列表与基类中的同名虚函数完全一致)那么也自动成为虚函数。虚函数的调用规则是:根据当前对象,优先调用对象本身的虚成员函数。3.虚函数实现多态性的条件..._构造函数调用虚函数采用动态联编

时间序列实例_时间序列数据-程序员宅基地

时间序列实例junjun2016年2月12日Rmarkdown脚本及数据集:http://pan.baidu.com/s/1gekA3AV实例一、使用ARIMA模型对裙子长度预测ARIMA 模型为平稳时间序列定义的。 因此, 如果你从一个非平稳的时间序列开始, 首先你就需要做时间序列差分直到你得到一个平稳时间序列。如果你必须对时间序列做 d 阶差分才能得到一个平稳序列..._时间序列数据

pl_sql如何对之前已提交的误操作回滚-程序员宅基地

FLASHBACK TABLE test TO TIMESTAMP TIMESTAMP '2010-3-18 10:00:00';这要求TEST表事先有ENABLE ROW MOVEMENT.或者把旧数据找出来然后手工写回去:SELECT * FROM test AS OF TIMESTAMP TIMESTAMP '2010-3-18 10:00:00';

随便推点

内存分页工具类_hutool pageutil-程序员宅基地

maven 依赖 <!-- hutool 工具类--> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.3.0</version> </dependenc._hutool pageutil

PopupWindow消失时实在自动隐藏 软键盘-程序员宅基地

项目需求:在用户点击关闭popup窗口时,自动把已经弹出的软键盘隐藏。void function(){ mPopupWindow.dismiss(); hideSoftKeyboard();}private void hideSoftKeyboard(){ System.out.println("SA: come here to hidden soft keyboar..._软键盘收起popup消失

行消隐(HBlank),场消隐(VBlank)_hblank vblank-程序员宅基地

在将光信号转换为电信号的扫描过程中,扫描总是从图像的左上角开始,水平向前行进,同时扫描点也以较慢的速率向下移动。当扫描点到达图像右侧边缘时,扫描点快速返回左侧,重新开始在第1行的起点下面进行第2行扫描,行与行之间的返回过程称为水平消隐。一幅完整的图像扫描信号,由水平消隐间隔分开的行信号序列构成,称为一帧。扫描点扫描完一帧后,要从图像的右下角返回到图像的左上角,开始新一帧的扫描,这一时间间隔,叫做垂..._hblank vblank

gitlabCI自动化更新k8s服务_gitlab-ci.yml 是k8s-程序员宅基地

期望效果当修改当前分支代码时,会自动触发gitlabci.yml脚本,进行构建、部署到k8s集群中。创建gitlab项目cat .gitlab-ci.ymlstages: - build - deploy build-image: stage: build tags: - test only: - master script: - cd $BUILD_DIR - docker build -t registry.cn-zhangji_gitlab-ci.yml 是k8s

启动磁盘10.11.4_如何在Windows 8.1中检查应用程序的磁盘使用情况-程序员宅基地

启动磁盘10.11.4Have you installed so many apps in Windows 8.1 that you’re quickly running out of room? This might especially be the case if you’re using a Windows tablet. There is an easy way to see how m..._启动硬盘10.11