基于机器视觉的图像拼接算法 计算机竞赛

news2024/10/7 11:32:54

前言

图像拼接在实际的应用场景很广,比如无人机航拍,遥感图像等等,图像拼接是进一步做图像理解基础步骤,拼接效果的好坏直接影响接下来的工作,所以一个好的图像拼接算法非常重要。

再举一个身边的例子吧,你用你的手机对某一场景拍照,但是你没有办法一次将所有你要拍的景物全部拍下来,所以你对该场景从左往右依次拍了好几张图,来把你要拍的所有景物记录下来。那么我们能不能把这些图像拼接成一个大图呢?

这是一个较为新颖的竞赛课题方向,学长非常推荐!

🧿 更多资料, 项目分享:

https://gitee.com/dancheng-senior/postgraduate


一、拼接效果

依照惯例, 废话不多说,先上拼接效果

拼接左图:
在这里插入图片描述

拼接右图:

在这里插入图片描述
拼接效果:
在这里插入图片描述

拼接前:
在这里插入图片描述
拼接后:
在这里插入图片描述

二、算法介绍

1.拼接算法简介

图像拼接技术就是将数张有重叠部分的图像(可能是不同时间、不同视角或者不同传感器获得的)拼成一幅无缝的全景图或高分辨率图像的技术。在医学成像、计算机视觉、卫星数据、军事目标自动识别等领域具有重要意义。

图像拼接目前有很多算法,图像拼接的质量,主要依赖于图像的配准程度,因此通过不同的图像匹配方式将算法分为以下两种:

1.1 基于区域相关拼接算法

该算法比较传统和普遍,从待拼接图像的灰度值出发,对待配准图像中一块区域与参考图像中的相同尺寸的区域使用最小二乘法或者其它数学方法计算其灰度值的差异(1.通过累加各点灰度的差值,2.计算两块区域的对应像素点灰度值的相关系数,相关系数越大,则两块图像的匹配程度越高,3.两者中计算相关系数的效果更好)。对此差异比较后来判断待拼接图像重叠区域的相似程度,由此得到待拼接图像重叠区域的范围和位置,从而实现图像拼接。
也可以通过FFT 变换将图像由时域变换到频域,然后再进行配准。对位移量比较大的图像,可以先校正图像的旋转,然后建立两幅图像之间的映射关系。

1.2 基于特征相关拼接算法

于特征的配准方法不是直接利用图像的像素值,而是通过像素导出图像的特征,然后以图像特征为标准,对图像重叠部分的对应特征区域进行搜索匹配,该类拼接算法有比较高的健壮性和鲁棒性。

在两幅图像对应的特征集中利用特征匹配算法尽可能地将存在对应关系的特征对选择出来。一系列的图像分割技术都被用到特征的抽取和边界检测上。

1.3 拼接算法的基本流程
  • 根据给定图像/集,实现特征匹配
  • 通过匹配特征计算图像之间的变换结构
  • 利用图像变换结构,实现图像映射
  • 针对叠加后的图像,采用APAP之类的算法, 对齐特征点
  • 通过图割方法,自动选取拼接缝
  • 根据multi-band bleing策略实现融合

2. 拼接算法原理

2.1 第一种:特征匹配

特征是要匹配的两个输入图像中的元素,为了给图像提供更好的特征匹配,采用角点匹配,进行定量测量。在视点变化时,角点特征是稳定的。角点检测算法有Harris角点检测算法、SIFT特征点检测算法、FAST角点检测算法、SURF特征点检测算法。
本次实验使用的Opencv stitch源码中默认第一选择是SURF特征点检测,第二是ORB特征点检测。
SURF(Speeded Up Robust
Features)改进了特征的提取和描述方式,用一种更为高效的方式完成特征的提取和描述。它是SIFT的高效变种,也是提取尺度不变特征,算法步骤与SIFT算法大致相同,但采用的方法不一样,SURF算法要比SIFT算法更高效。

2. 2 第二种:计算图像之间的变换结构
  • 2.1.SURF使用Hessian矩阵来检测特征点,该矩阵是x,y方向的二阶导数矩阵,可测量一个函数的局部曲率,其行列式值代表像素点周围的变化量,特征点需取行列式值的极值点。
  • 2.2特征点定位:通过特征点邻近信息插补来定位特征点。
  • 2.3方向定位:通过计算特征点周围像素点x,y方向的哈尔小波变换,并将x,y方向的变换值在xy平面某一角度区间内相加组成一个向量,在所有的向量当中最长的(即x、y分量最大的)即为此特征点的方向。
  • 2.4特征描述子:选定了特征点的方向后,其周围相素点需要以此方向为基准来建立描述子。此时以5 ∗ 5 5 55∗5个像素点为一个子区域,取特征点周围 20 ∗ 20 20 2020∗20个像素点的范围共16个子区域,计算子区域内的x、y方向(此时以平行特征点方向为x、垂直特征点方向为y的哈尔小波转换总和Σdx、ΣdyΣdx、Σdy与其向量长度总和Σ|dx|、Σ|dy|Σ|dx|、Σ|dy|共四个量值,共可产生一个64维的描
  • 2.5如果两个特征点的矩阵迹正负号相同,代表这两个特征具有相同方向上的对比度变化,如果不同,说明这两个特征点的对比度变化方向是相反的,即使欧氏距离为0,也直接予以排除。
  • 2.6用方型滤波器取代SIFT中的高斯滤波器,利用积分图(计算位于滤波器方型的四个角落值)大幅提高运算速度。
2. 3 第三种:通过graph cut寻找拼接缝

在这里插入图片描述

上图中,我们把两个Patch拼合到一起,它们首先被放置为有一定重合区域。为了让两者之间的缝隙尽可能的不明显,我们需要知道一个分割线(cut),在这个分割线的左边,图像像素由A贡献,相反在其右边,图像像素则由B贡献。
这里我们将输出的图像看做是由”图(Graph)“所表示,并且给这个Graph两个端点,一个是A,一个是B:

在这里插入图片描述

上图中,标有数字的节点实际上是重合区域的像素,节点之间的连接都是有代价的。我们需要拿起剪刀从某个连接上剪掉某些连接,并且要使得被剪掉的连接的代价之和最小化,这就是最典型的图算法中的最小割问题(min
cut),它也对应着所谓的最大流问题(max flow)。
那么,如何定义连接之间的代价呢?这里假设在重合区域两个相邻的输出像素分别是s和t。我们知道输出的像素既可能来自于A,也可能来自于B,于是我们用A(s),B(s)来表示s点在A图和B图的颜色,
用A(t),B(t)来表示t点在A图和B图的颜色。
于是,s点和t点的连接的代价被定义为:
在这里插入图片描述
我们要做的就是寻找一个切割缝,最小化M ( s , t , A , B )
M(s,t,A,B)M(s,t,A,B)当找到这条缝之后,左边的像素从A中拷贝而来,而右边的像素则从B中拷贝而来即可。
接下来就可以不断的拼合更多的Patch,目标是用越来越多次的覆盖输出图片中的缝隙,使得图像重合部分越来越多,直到代价值收敛。

最后

🧿 更多资料, 项目分享:

https://gitee.com/dancheng-senior/postgraduate

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1136275.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从顺序表中删除其值在给定值s与t之间(要求s<t)的所有元素,若s或t不合理或顺序表为空,则显示出错误信息并退出运行

从顺序表中删除其值在给定值s与t之间&#xff08;要求s<t&#xff09;的所有元素&#xff0c;若s或t不合理或顺序表为空&#xff0c;则显示出错误信息并退出运行。 顺序表定义及初始化 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #define MaxSize 10//定义…

浅谈中国汽车充电桩行业市场状况及充电桩选型的介绍

安科瑞虞佳豪 车桩比降低是完善新能源汽车行业配套的一大重要趋势&#xff0c;目前各国政府都在努力推进政策&#xff0c;通过税收减免、建设补贴等措施提升充电桩建设速度&#xff0c;以满足新能源汽车需求。 近年来&#xff0c;在需求和技术的驱动下&#xff0c;充电桩的平…

QT QProcess的使用

定义 The QProcess class is used to start external programs and to communicate with them. QProcess类是用来启动一个外部程序并与之通信。 本文福利&#xff0c;莬费领取Qt开发学习资料包、技术视频&#xff0c;内容包括&#xff08;Qt实战项目视频教程代码&#xff0c;…

MySQL初始化之后启动报错(mysqld: Table ‘mysql.plugin‘ doesn‘t exist)

报错场景 初始化之后&#xff0c;服务无法启动。错误日志error-log 报错如下&#xff1a;&#xff08;mysql库下的系统表不存在&#xff09; 2023-10-26T06:03:08.150163-00:00 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started. 2023-10-26T06:03:08.496…

RabbitMQ生产者的可靠性

目录 MQ使用时会出现的问题 生产者的可靠性 1、生产者重连 2、生产者确认 3、数据持久化 交换机持久化 队列持久化 消息持久化 LazyQueue懒加载 MQ使用时会出现的问题 发送消息时丢失&#xff1a; 生产者发送消息时连接MQ失败生产者发送消息到达MQ后未找到Exchange生产…

linux音频-IIS音频接口

IIS 总线 IIS(Integrate Interface of Sound)即集成音频接口&#xff0c;在上个世纪 80 年代首先被 Philips 公司用于消费产品的音频设备&#xff0c; I2S规范 I2S总线只能用来处理audio data&#xff0c;而别的信号比如控制信号&#xff0c;编码信号则交给别的模块处理。为了…

The Gradle daemon may be trying to use ipv4 instead of ipv6.

重新配置了jdk和gradle&#xff0c;导致新创建的项目都会报该错误。以下是解决办法。 mac的环境 一 改项目JDK的位置 如果一没有解决接着配置 vim ~/.bash_profile 新增 export _JAVA_OPTIONS“-Djava.net.preferIPv4Stacktrue” 参考&#xff1a; https://sites.google.com…

618京东到家APP-门详页反爬实战

一、背景与系统安全需求分析 1. 系统的重要性 上图所示是接口所属位置、对电商平台或在线商店而言,分类查商品都是很重要的,通过为用户提供清晰的商品分类,帮助他们快速找到所需产品,节省浏览时间,提升购物效率,是购物结算产生GMV的核心环节。那么电商平台为什么都很看重…

Creaform形创HandySCAN MAX三维扫描仪大型零部件尺寸测量设备

CASAIM中科院广州电子智能制造事业部连续多年荣获形创Creaform战略级代理商证书。战略级代理商是形创Creaform最高级别的合作伙伴。 2023年CASAIM中科院广州电子智能制造事业部的形创Creaform战略级代理商证书&#xff1a; Creaform 形创是便携式三维测量解决方案和工程服务领…

“摸不着”的数字孪生,如何带来“看得见”的数据效益?

目录 数字孪生的6问6答 01 何为数字孪生&#xff1f; 02 数字孪生的地位与趋势如何&#xff1f; 03 哪些行业在关注和应用数字孪生&#xff1f; 04 数字孪生的应用场景有哪些&#xff1f; 05 数字孪生与智能制造的关系&#xff1f; 06 如何利用数字孪生 第一步&#xf…

QuestPass来袭,500万SUI奖池拉满并降低获奖难度!

自上周Quest 3规调整后&#xff0c;社区的担忧和反馈减少&#xff0c;但是我们仍然看到一些用户在达到资格以及争取奖励方面遇到困难。感谢你们抽出时间与我们反馈这些问题&#xff0c;下面将与你们分享在Quest 3中最新调整的规则信息&#xff1a; 新增QuestPass 为了使任何人…

C语言系统化精讲(五):C语言格式化输入和运算符与表达式

文章目录 一、C语言格式化输入1.1 C语言scanf&#xff1a;读取从键盘输入的数据&#xff08;含输入格式汇总表&#xff09;1.2 C语言输入字符和字符串&#xff08;所有函数大汇总&#xff09;1.2.1 输入单个字符1.2.2 输入字符串 二、运算符与表达式2.1 运算符与表达式2.1.1 运…

我用好说 AI 画出了漫画故事

现在的 AI 有多神奇&#xff1f;我已经可以用它来 “想故事、写分镜、画漫画” 了。 这里就来秀秀用 好说 AI 做出来的一些漫画&#xff1a; 大家多少都遇到过&#xff1a;曾经有个不错的想法&#xff0c;可能只是 “一个场景”、“一句话”&#xff0c;但真的就一闪而过&…

《算法通关村——黄金挑战数组问题》

《算法通关村——黄金挑战数组问题》 数组中出现次数超过一半的数字 描述 数组中有一个数字出现的次数超过数组长度的一半&#xff0c;请找出这个数字。 例如&#xff1a;输入如下所示的一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次&#xff0c;超过数…

软件测试面试1000问(含答案+文档)

Part1 1、你的测试职业发展是什么&#xff1f; 测试经验越多&#xff0c;测试能力越高。所以我的职业发展是需要时间积累的&#xff0c;一步步向着高级测试工程师奔去。而且我也有初步的职业规划&#xff0c;前3年积累测试经验&#xff0c;按如何做好测试工程师的要点去要求自…

Python基础教程:关于序列操作的方式方法

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 序列是指按照位置顺序来存储数据的数据结构&#xff0c;也就是说能通过数值索引进行操作。 实际上&#xff0c;python对序列的解释是&#xff1a;只要类型对象中…

C语言系统化精讲(七):C语言数组详解

文章目录 一、数组的基本概念二、一维数组2.1 一维数组的定义2.2 一维数组初始化2.3 一维数组的引用 三、二维数组3.1 二维数组的定义3.2 二维数组初始化3.3 二维数组的引用 四、C语言数组是静态的&#xff0c;不能插入或删除元素五、C语言数组的越界和溢出5.1 数组越界5.2 数组…

C++基础:函数模板

为了代码重用&#xff0c;代码必须是通用的&#xff1b;通用的代码就必须不受数据类型的限制。那么我们可以把数据类型改为一个设计参数&#xff0c;这种类型的程序设计称为参数化程序设计&#xff0c;软件模板有模板构造&#xff0c;包括函数模板和类模板。 函数模板可以用来…

分享一下怎么做一个签到积分的微信小程序

在微信小程序中&#xff0c;签到积分功能是一种非常实用的功能&#xff0c;它可以帮助企业吸引用户&#xff0c;增加用户的忠诚度和活跃度。下面将介绍如何设计和实现一个签到积分的微信小程序。 一、设计页面 签到积分微信小程序的页面设计应该简洁明了&#xff0c;操作简单。…

error: the following arguments are required: --model, --data 解决方法

错误原因&#xff1a;Windows下需要缺乏配置参数&#xff0c;需要进行相关参数配置。 解决办法&#xff1a;在Pycharm的编辑设置&#xff0c;加上–model--model ****,其中****为指定的模型名称&#xff0c;按照自己实际报错进行添加&#xff0c;比如我这里要跑的模型为bert&am…