RANSAC算法实现图像全景拼接

2023-11-09

一、全景拼接的原理

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(
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RANSAC算法实现图像全景拼接 的相关文章

  • 压缩伪影的探讨

    1 压缩伪影的由来 常用的视频编码器中 在一个框架中使用了多种编码方法 01 预测编码 不编码预测值 而是编码预测值与实际值的差值 02 变换编码 对信号的样本值进行某种形式的函数变换 从一种空间变换到另一种空间 然后再根据信号在另一个空间
  • SOA中国路线图活动感受

    下午参加了SOA中国路线图活动 主要由普元公司和相关的媒体以及电信客户进行演讲 对于SOA我之前一直认为是个很虚的东西 概念大于实践 但听了普元公司黄柳青博士的介绍以及在电信领域中的应用 感觉还是有收获的 很多思想可以应用到系统的设计和开发
  • 数据结构——红黑树

    1 什么是红黑树 红黑树是一种特定类型的二叉树 用于组织数据 它是一种平衡二叉查找树 AVL树 的变体 每个结点都带有颜色属性 红色或黑色 在红黑树中 从根到叶子的最长的可能路径不多于最短的可能路径的两倍长 具体来说 红黑树满足以下性质 每
  • 结构型模式-享元模式

    package per mjn pattern flyweight 抽象享元角色 public abstract class AbstractBox 获取图形的方法 内部状态 public abstract String getShape
  • 机器学习 可视化_机器学习-可视化

    机器学习 可视化 机器学习导论 Introduction to machine learning In the traditional hard coded approach we program a computer to perform
  • 【Unity 几何着色器】简单的网格线描边

    水文 几何着色器 第一个pass就默认的unlit效果 第二个pass是新建的 属性都没有用到 先留个坑吧 Shader GeoHelp LineMesh Properties MainTex Texture 2D white EdgeWi
  • 优质数对的数目[位运算特点+抽象能力考察+分组快速统计]

    位运算特点 抽象能力考察 分组快速统计 前言 一 优质数对的数目 二 思路与优化过程 总结 参考文献 前言 位运算是计算机最基本的计算 是最快的运算方式 与或非各有特点 抽象能力考察我理解成一种 拿核心去累赘 的能力 分组快速统计 我们不必
  • 1Python入门小结(1)

    Python入门小结 1 万丈高楼平地起 简介 Python是一种通用编程语言 其在科学计算和机器学习领域具有广泛的应用 本小节包含的内容 变量 运算符与数据类型 位运算 条件语句 循环语句 异常处理 变量 运算符与数据类型 注释 Pyth
  • 我使用过的Linux命令之stty - 显示和修改终端行设置

    原文链接 http codingstandards iteye com blog 826924 用途说明 stty命令用于显示和修改终端行设置 change and print terminal line settings 常用参数 stt
  • 【Linux学习】虚拟机VMware 安装Qt5 一条龙讲解

    如何在Linux下安装Qt5呢 若已在Linux下载好安装包 可直接从第三步进行阅读 目录 第一步 下载所需版本Qt 第二步 将Qt安装包传输到Linux 第三步 Linux下安装Qt 第四步 配置 Qt 环境 本文安装版本 linux上的
  • 浅谈软件构件和软件构件测试

    什么是构件 构件也称为组件 是一个独立发布的功能部分 通过接口可以访问它的服务 其特点是 l 软件系统中具有相对独立功能 可以明确辨识 接口由契约指定 和语境有明显依赖关系 可独立部署 且多由第三方提供的可组装软件实体 l 软件构件须承载有
  • 前端导出后端文件的方法

    一般存在两种方式 1 请求接口之后 后端返回文件路径 前端直接下载 2 请求接口之后 后端以文件流的形式返回给前端 前端再下载到本地 第一种方式 window location href res request responseURL 直接
  • CVPR 2017论文

    近期在看CVPR2017的文章 顺便就把CVPR2017整理一下 分享给大家 更多的 Computer Vision的文章可以访问Computer Vision Foundation open access CVPapers Machine
  • Vue实现给按钮的点击事件绑定id参数

    当我们需要给按钮所绑定的值做出判断并记录时 eg 为答题的正确以及题号做判断 第一种情况 使用v for循环 div div 我是id div div 1 2 3 然后在 vue 的实例中就可以拿到对应的 id b index this l
  • 持久化数据&缓存数据双写一致性

    背景 缓存中数据更新一般有两个入口 数据缓存过期 数据在访问时发现缓存中无数据时重新查库然后更新至缓存 场景和问题等同于缓存查询 相关solution参考 缓存数据查询的注意事项 缓存未过期 数据库数据有变动主动更新至缓存 比较常见的场景
  • Windows+Ubuntu 22.04.1 LTS 64bit 双系统配置

    为了开发linux下的软件 花了半天的时间安装了双系统 记录一下过程方便以后重装 帮同学装 安装尽量使用官网教程 一 提前准备 1 确保硬盘有足够空余空间 2 关闭windows快速启动 会影响开机进入多系统引导 windows 10如何关
  • 函数栈帧的创建与销毁

    目录 引言 基础知识 内存模型 寄存器的种类与功能 常用的汇编指令 函数栈帧创建与销毁 main 函数栈帧的创建 NO1 NO2 NO3 NO4 NO5 NO6 main 函数栈帧变量的创建 调用Add 函数栈帧的预备工作 传参 NO1 N
  • 小蜜团队万字长文《读后简略概括》

    1 对话系统主要分为三类 闲聊型 任务导向型 问答型 闲聊型 就是瞎聊 想聊啥就 聊啥 任务导向型 考虑多轮对话 根据对话的不同状态和槽位值进行回复策略的选择 问答型 一问一答 识别询问者的意图 从知识库中选取答案进行返回 2 任务导向型
  • perl编写之前的一些习惯细节

    变量 环境变量的传递 文件 文件目录文件名路径的解析操作 命令行参数 调用shell命令 变量的debug 主体结构的划分 编写简单package的模板 脚本执行的关键信息保存在日志里 代码整理 下述信息 仅供自己编写新脚本之前的回顾内容
  • web前端html+css基础 项目实例

随机推荐

  • 【C++笔记】数据结构栈、堆,内存占用中栈区、堆区的区别和理解

    在计算机领域 堆栈是一个不容忽视的概念 我们编写的C语言程序基本上都要用到 但对于很多的初学着来说 堆栈是一个很模糊的概念 堆栈 一种数据结构 一个在程序运行时用于存放的地方 这可能是很多初学者的认识 因为我曾经就是这么想的和汇编语言中的堆
  • matlab机器人工具箱(1)

    1 机器人工具箱 2 Figure的基本组成 figure和axes的概念 在实际绘图中 一张图可能会有好几个子图 这时axes表示生成的各个小图 而figure则是绘制各图的大画布 所以 在之后设置图形属性时 有时用到gca Axes 有
  • Python爬虫自动刷“问卷网”问卷(不锁IP)

    大学很多项目都会要求征集问卷 但很难找到渠道迅速收集大量样本 如果是自己通过 问卷网 设计的问卷可以在设置不锁IP 默认情况 下用本方法快速刷取大量样本 且能保证问卷结果满足自身项目需求 即使没有了解过爬虫 稍有python基础看过本程序后
  • C++后台开发之我见

    C 后台开发之我见 2017 2 6 工作也快两年了 偶然看到自己以前写过的一些技术博客 发现自己自毕业后一直没有更新过自己的技术博客 趁现在是刚过完春节快要回公司工作之际 谈谈我个人对后台开发的一些个人见解 希望能够对在校的学生或者刚刚接
  • Python爬虫从入门到精通:今日作业_requests基础04_爬取药监总局中的企业详情数据_Python涛哥

    今日作业 爬取药监总局中的企业详情数据 爬取药监总局中的企业详情数据 url http scxk nmpa gov cn 81 xk 需求 将首页中每一家企业详情页对应的数据 每一家企业详情页对应的数据 将前5页企业的数据爬取即可 难点 用
  • scipy.sparse使用简例

    CDIMC Net 1 中有个对整个数据集求 kNN 图的函数 get kNNgraph2 2 是用 dense 的 numpy ndarray 存的 空间复杂度 O n 2 O n 2
  • HBuilder 制表符转换成空格

    在学习BootStrap时 看到 编码规范 by mdo 里面有一条关于编辑器配置的 用两个空格代替制表符 soft tab 即用空格代表 tab 符 避免常见的代码不一致和差异 然后找到了 HBuilder 制表符转换成空格 的方法 具体
  • Linux环境SVN用户权限修改

    1 查看SVN配置文件位置 系统环境 Linux 3 10 0 使用命令行查看SVN进程 ps ef grep svn 通过进程信息可以看到svnserve conf存放的目录 svnserve conf是svn配置文件 vim 目录 sv
  • OpenHarmony与HarmonyOS联系与区别

    目录 1 背景 2 OpenHarmony 3 HarmonyOS 4 鸿蒙生态 5 OpenHarmony与HarmonyOS的技术上实现区别 1 语言支持 2 SDK 的不同 3 运行调测方式不同 4 对APK的兼容性不同 5 包含关系
  • Android CheckBox 多选以及反选清除已选项

    前言 疫情随着这个春天的到来已悄然离去 你还记得填写问卷调查的那个时候么 话不多少 这篇文章要实现的就是一个问卷调查列表 即 Listview 嵌套 Listview 实现 checkbox 多选以及反选清除已选项 正文 思路就是定义一个
  • web服务选择lighttpd,采用fcgi组件技术扩展处理业务层

    目录 一 简介fcgi web和web服务器间数据传输的桥梁 2 二 源码编译配置ARM Lighttpd Fastcgi C 3 1 交叉编译 源文件都从官网下载 Fcgi lighttpd zlib 3 2 配置服务器server do
  • VMware上安装虚拟机的一些注意事项和VMware tools的安装

    VMware上安装虚拟机 VMware是windows上的一个应用程序 它可以虚拟出一个物理主机 pc机 在该虚拟机上可以安装linux系统 相关安装流程csdn上参考过多 这里不再赘述 虚拟机安装位置要求 1 不能和VMware放在同一个
  • 为AI而生的数据库:Milvus详解及实战

    1 向量数据库 1 1 向量数据库的由来 在当今数字化时代 人工智能AI正迅速改变着我们的生活和工作方式 从智能助手到自动驾驶汽车 AI正在成为各行各业的创新引擎 然而 这种AI的崛起也带来了一个关键的挑战 如何有效地处理和分析越来越丰富和
  • QSetting读取ini配置文件失败

    今天碰到一个问题 QSettings读取配置文件失败 同样的代码用5 13版本编译后读取正常 用5 7版本编译读取不到 排除了文件编码格式的问题 最终问题解决了 原因没有找到 解决方法是试错试出来的 解决方法是把相对路径换成了绝对路径 问题
  • 常见中间件漏洞复现

    目录 Tomcat 1 Tomcat 文件上传 CVE 2017 12615 2 Tomcat 代码执行 CVE 2020 1938 3 Tomcat弱口令登录获取后台 Weblogic 4 Weblogic反序列化漏洞获取服务器权限 CV
  • Vuex4(Module)+Typescript的基本使用

    一 Vuex4介绍 vuex 是一个专为 Vue js 应用程序开发的状态管理模式 库 它采用集中式存储管理应用的所有组件的状态 并以相应的规则保证状态以一种可预测的方式发生变化 vuex包括五大核心概念分别是State Getter Mu
  • Sql server 千万级大数据SQL查询优化的几点建议

    1 对查询进行优化 应尽量避免全表扫描 首先应考虑在 where 及 order by 涉及的列上建立索引 2 应尽量避免在 where 子句中对字段进行 null 值判断 否则将导致引擎放弃使用索引而进行全表扫描 如 select id
  • 应“云”而生的云数据库,让数据从“江河”到“大海”

    随着信息技术的发展 互联网应用的加速普及 人类进入了数字经济时代 进入二十一世纪以后 随着移动互联网技术 物联网技术 5G等技术的发展 全球数据圈 Global Datasphere 呈指数级递增 IDC预测全球数据将于2025年增长至17
  • [USACO Dec20 Bronze]Stuck in a Rut

    Farmer John 最近扩大了他的农场 从奶牛们的角度看来这个农场相当于是无限大了 奶牛们将农场上放牧的区域想作是一个由正方形方格组成的无限大二维方阵 每个方格中均有美味的草 将每个方格看作是棋盘上的一个方格 Farmer John 的
  • RANSAC算法实现图像全景拼接

    文章目录 一 全景拼接的原理 1 RANSAC算法介绍 2 使用RANSAC算法来求解单应性矩阵 3 拼接图像 二 全景拼接实验 1 针对固定点位拍摄多张图片 以中间图片为中心 实现图像的拼接融合 1 输入图片 2 代码 3 运行结果 4