计算机视觉教程7-2: 基于OpenCV的多图像拼接、配准与美化

简介: 计算机视觉教程7-2: 基于OpenCV的多图像拼接、配准与美化

0 效果展示

待拼接图片:


image.png

image.png

image.png

拼接后图片:

image.png

1 系统架构设计


image.png

对项目所要求达成的目标,将图像拼接系统的整体流程分为三个阶段:

特征工程。该阶段主要实现对图像边缘、角点等特征位置的检测;对检测的局部特征生成具有鲁棒性、独特性、多量性、可扩展性的定量描述——特征描述子

基于特征描述子使用数值计算方法,结合重投影误差等匹配性能指标筛选匹配特征点对。该阶段还会对不同的特征检测算法、特征匹配策略进行性能比较、评估与分析。

图像配准。该阶段主要实现对无匹配点的滤除——增强抗噪能力与鲁棒性;图像映射的单应性估计;基于单应性矩阵将图像进行透视变换与拷贝,保持待拼接图像间坐标描述的一致性。

图像美化。该阶段主要用于消除图像配准阶段产出图像的明显拼接缝隙和毛刺,主要实现图像均衡化——基于像素调整平衡不同拼接图像间的光照强度差异;基于加权平滑图像拼接的缝隙处;基于拉普拉斯金字塔方法进行图像融合,使拼接图像更自然、美观。

2 软件架构设计

ec88ae85a7ee4a689da4be40b6d12d2d.png

image.png

3 特征匹配

主要采用:暴力匹配、最值匹配、交叉匹配、KNN匹配、RANSAC匹配


image.png

单纯靠特征匹配是不够的,因为会引入大量误匹配点,需要进行匹配优化


Lowe’s匹配优化:Lowe’s 匹配优化算法核心原理是:通过 K K K近邻查找算法,选择 K K K个和目标特征点最相似的点,若这 K K K个匹配对间的区别足够大,则选择最相似的作为目标特征点的匹配点,否则舍弃。


由于本项目针对的目标图像尺寸较小,因此通常选择 K = 2 K=2 K=2,即最近邻匹配。 2个点间的区别用距离比率


α = d ( F d s t , F a ) d ( F d s t , F b ) \alpha =\frac{d\left( F_{dst},F_a \right)}{d\left( F_{dst},F_b \right)}

α=

d(F

dst


,F

b


)

d(F

dst


,F

a


)



来衡量,比率阈值根据不同的特征检测算法有所不同,达到此比率则认为目标特征点的两个匹配对区别足够大,可以加入优秀匹配点集。


此外上述的距离相似度度量 d d d对不同的检测算法亦有区别,本项目中对于ORB、BRISK等二进制描述算法采用汉明距离度量,在保证精度的情况下大幅提高匹配效率;对于SIFT、SURF等浮点型描述算法则采用 L 2 L2 L2范数度量。


值得注意的是,在算法开始前需要比较两个输入特征描述子的尺寸,因为在特征匹配时匹配器有两个参数——查询索引(Query Index)与匹配索引(Train Index),当使用特征较多的描述子去查询特征较少的描述子时可能发生向量越界的情况,因此算法统一使用小特征描述子去查询大特征描述子中对应的匹配点。


image.png

可以看出,优化的效果还是很明显的

4 生成特征描述子

主要采用了下面四种方法


image.png

从实验结果看,SIFT算法性能最佳


image.png

5图像拼接与配准

方法是计算相邻两张待拼接图片间的单应性矩阵,然后将其中一张图片通过单应性矩阵映射到另一张图片的坐标系即可。


考虑到RANSAC算法能够对计算单应性矩阵选取的参数进行迭代,并根据内集合的评判结果选取效果更好的匹配关键点计算得到的单应性矩阵,最终计算得到的单应性矩阵能适应最大数量的关键点,因此使用RANSAC算法计算得到的单应性矩阵应用于图像拼接后能得到最好的效果。


自定义RANSAC单应性矩阵算法应用于图像拼接的结果与使用findHomography库函数的RANSAC方法的结果对比如图所示。


image.png

同时对比代码的运行结果如图所示,可以看出自定义的RANSAC求解算法和库函数中直接调用的RANSAC计算方式会产生约为0.5%的误差,可以视为算法的误差,可能由在单应性矩阵计算过程中变量类型转换过程中,变量在float和double类型之间转换产生的数据溢出和对于置信度取值不同等原因导致,在实际应用中可忽略不计。


image.png

6 图像平滑与美化

方法:拉普拉斯金字塔融合


image.png

image.png

image.png

最终效果:


image.png

限于篇幅,本文的完整工程代码请关注下方公众号回复“CV005”获取


🚀 计算机视觉基础教程说明


章号                                    内容

 0                              色彩空间与数字成像

 1                              计算机几何基础

 2                              图像增强、滤波、金字塔

 3                              图像特征提取

 4                              图像特征描述

 5                              图像特征匹配

 6                              立体视觉

 7                              项目实战


🔥 更多精彩专栏:


《机器人原理与技术》

《计算机视觉教程》

《机器学习》

《嵌入式系统》

《数值优化方法》


目录
相关文章
|
30天前
|
机器学习/深度学习 监控 算法
基于计算机视觉(opencv)的运动计数(运动辅助)系统-源码+注释+报告
基于计算机视觉(opencv)的运动计数(运动辅助)系统-源码+注释+报告
44 3
|
1月前
|
计算机视觉
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
这篇文章详细介绍了OpenCV库中的图像二值化函数`cv2.threshold`,包括二值化的概念、常见的阈值类型、函数的参数说明以及通过代码实例展示了如何应用该函数进行图像二值化处理,并展示了运行结果。
309 0
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
|
2月前
|
算法 计算机视觉
opencv图像形态学
图像形态学是一种基于数学形态学的图像处理技术,它主要用于分析和修改图像的形状和结构。
47 4
|
4月前
|
机器学习/深度学习 人工智能 算法
Python在计算机视觉(CV)中扮演重要角色,得益于其丰富的库如OpenCV、Pillow和Scikit-image。
【7月更文挑战第5天】Python在计算机视觉(CV)中扮演重要角色,得益于其丰富的库如OpenCV、Pillow和Scikit-image。CV涉及图像处理、模式识别和机器学习,用于图像理解和生成。Python的跨平台特性和活跃社区使其成为CV的理想工具。基本流程包括图像获取、预处理、特征提取、分类识别及图像生成。例如,面部识别通过预处理图像,使用如`cv2.CascadeClassifier`进行检测;物体检测类似,但需适应不同目标;图像生成则利用GAN创造新图像。
66 4
|
2月前
|
存储 计算机视觉
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
本文介绍了使用OpenCV进行图像读取、显示和存储的基本操作,以及如何绘制直线、圆形、矩形和文本等几何图形的方法。
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
|
1月前
|
计算机视觉 Python
Opencv学习笔记(四):如何通过cv2或者通过matplotlib来将多张图拼接成一张图输出
这篇文章介绍了如何使用OpenCV和matplotlib将多张图像拼接成一张图进行输出,并比较了两者的效果和使用注意事项。
70 0
Opencv学习笔记(四):如何通过cv2或者通过matplotlib来将多张图拼接成一张图输出
|
3月前
|
算法 计算机视觉 Python
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
该文章详细介绍了使用Python和OpenCV进行相机标定以获取畸变参数,并提供了修正图像畸变的全部代码,包括生成棋盘图、拍摄标定图像、标定过程和畸变矫正等步骤。
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
|
2月前
|
机器学习/深度学习 编解码 自动驾驶
计算机视觉之图像到图像的翻译
图像到图像的翻译(Image-to-Image Translation)是指将一种图像从一种表示转换为另一种表示的过程。该任务的目标是在保证图像语义信息的前提下,将图像风格、颜色或其他视觉特征进行转换。该技术在计算机视觉领域具有广泛应用,例如图像风格迁移、图像修复、图像增强、超分辨率、语义分割等。
41 4
|
2月前
|
机器学习/深度学习 人工智能 测试技术
AI计算机视觉笔记二十五:ResNet50训练部署教程
该项目旨在训练ResNet50模型并将其部署到RK3568开发板上。首先介绍了ResNet50网络,该网络由何恺明等人于2015年提出,解决了传统卷积神经网络中的退化问题。项目使用车辆分类数据集进行训练,并提供了数据集下载链接。环境搭建部分详细描述了虚拟环境的创建和所需库的安装。训练过程中,通过`train.py`脚本进行了15轮训练,并可视化了训练和测试结果。最后,项目提供了将模型转换为ONNX和PT格式的方法,以便在RK3568上部署。
WK
|
3月前
|
编解码 计算机视觉 Python
如何在OpenCV中进行图像转换
在OpenCV中,图像转换涉及颜色空间变换、大小调整及类型转换等操作。常用函数如`cvtColor`可实现BGR到RGB、灰度图或HSV的转换;`resize`则用于调整图像分辨率。此外,通过`astype`或`convertScaleAbs`可改变图像数据类型。对于复杂的几何变换,如仿射或透视变换,则可利用`warpAffine`和`warpPerspective`函数实现。这些技术为图像处理提供了强大的工具。
WK
105 1

热门文章

最新文章