一、图像拼接介绍

图像拼接技术就是将数张有重叠部分的图像(可能是不同时间、不同视角或者不同传感器获得的)拼成一幅无缝的全景图或高分辨率图像的技术。图像拼接在医学成像、计算机视觉、卫星数据、军事目标自动识别等领域具有重要意义。图像拼接的输出是两个输入图像的并集。
图像配准(image alignment)和图像融合是图像拼接的两个关键技术。图像配准是图像融合的基础,而且图像配准算法的计算量一般非常大,因此图像拼接技术的发展很大程度上取决于图像配准技术的创新。早期的图像配准技术主要采用点匹配法,这类方法速度慢、精度低,而且常常需要人工选取初始匹配点,无法适应大数据量图像的融合。图像拼接的方法很多,不同的算法步骤会有一定差异,但大致的过程是相同的。

二、图像的拼接几何原理


三、图像的拼接基础流程

1.针对某个场景拍摄多张/序列图像
2.计算第二张图像与第一张图像之间的变换关系
3.将第二张图像叠加到第一张图像的坐标系中
4.变换后的融合/合成
5.在多图场景中,重复上述过程

四、RANSAC算法

随机抽样一致算法(random sample consensus,RANSAC),采用迭代的方式从一组包含离群的被观测数据中估算出数学模型的参数。
RANSAC算法的基本假设是样本中包含正确数据(inliers,可以被模型描述的数据),也包含异常数据(outliers,偏离正常范围很远、无法适应数学模型的数据),即数据集中含有噪声。这些异常数据可能是由于错误的测量、错误的假设、错误的计算等产生的。同时RANSAC也假设,给定一组正确的数据,存在可以计算出符合这些数据的模型参数的方法。

计算步骤:
1.随机从数据集中随机抽出4个样本数据 (此4个样本之间不能共线),计算出变换矩阵H,记为模型M;
2.计算数据集中所有数据与模型M的投影误差,若误差小于阈值,加入内点集 I ;
3. 如果当前内点集 I 元素个数大于最优内点集 I_best , 则更新 I_best = I,同时更新迭代次数k ;
4.如果迭代次数大于k,则退出 ; 否则迭代次数加1,并重复上述步骤;
注:迭代次数k在不大于最大迭代次数的情况下,是在不断更新而不是固定的,见上方k的更新;其中,p为置信度,一般取0.995;w为”内点”的比例 ; m为计算模型所需要的最少样本数=4;求得单应矩阵后就好办了,把内点留下,内点就是筛选后的好用的点,外点舍弃,外点就有可能是误匹配的点。

5、APAP算法

在图像拼接融合的过程中,受客观因素的影响,拼接融合后的图像可能会存在“鬼影现象”以及图像间过度不连续等问题。下图就是图像拼接的一种“鬼影现象”。通过上面RANSAC方法可以消除异常匹配的特征点的问题,但是匹配后得到的图像会出现“鬼影”问题,所谓鬼影问题就是图像叠加后出现重影。解决办法就是局部单应性变换。解决鬼影现象可以采用APAP算法。

算法流程:
1.提取两张图片的sift特征点
2.对两张图片的特征点进行匹配
3.匹配后,使用RANSAC算法进行特征点对的筛选,排除错误点。筛选后的特征点基本能够一一对应
4.使用DLT算法,将剩下的特征点对进行透视变换矩阵的估计
5.由于得到的透视变换矩阵是基于全局特征点对进行的,即一个刚性的单应性矩阵完成配准。为提高配准的精度,Apap将图像切割成无数多个小方块,对每个小方块进行单应性矩阵变换,非常依赖于特征点对。若图像高频信息较少,特征点对过少,配准将完全失效,并且对大尺度的图像进行配准,其效果也不是很好,一切都决定于特征点对的数量。

6、选择合适的算法进行图像拼接操作

图像拼接的基本流程如下:
1.根据给定图像/集,实现特征匹配
2.通过匹配特征计算图像之间的变换结构
3.利用图像变换结构,实现图像映射
4.针对叠加后的图像,采用APAP之类的算法,对齐特征点
5.通过图割方法,自动选取拼接缝
6.根据multi-band bleing策略实现融合(思想:采用的方法是直接对带拼接的两个图片进行拉普拉斯金字塔分解,后一半对前一半进行融合。)

测试代码:
注:运行代码可能会发生错误,错误详情及解决办法如下:
https://blog.csdn.net/weixin_42648848/article/details/88667243

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
"""
This is the panorama example from section 3.3.
"""
# set paths to data folder
featname = [str(i + 1) + '.sift' for i in range(3)]
imname = [str(i + 1) + '.jpg' for i in range(3)]
# extract features and match
l = {}
d = {}
for i in range(3):sift.process_image(imname[i],featname[i])l[i],d[i] = sift.read_features_from_file(featname[i])
matches = {}
for i in range(2):matches[i] = sift.match(d[i+1],d[i])print(matches)
# visualize the matches (Figure 3-11 in the book)
for i in range(2):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)
# function to convert the matches to hom. points
def convert_points(j):ndx = matches[j].nonzero()[0]fp = homography.make_homog(l[j+1][ndx,:2].T)ndx2 = [int(matches[j][i]) for i in ndx]tp = homography.make_homog(l[j][ndx2,:2].T)# switch x and y - TODO this should move elsewherefp = vstack([fp[1],fp[0],fp[2]])tp = vstack([tp[1],tp[0],tp[2]])return fp,tp
# estimate the homographies
model = homography.RansacModel()
fp,tp = convert_points(0)
H_01 = homography.H_from_ransac(fp,tp,model)[0] #im 0 to 1
tp,fp = convert_points(1) #NB: reverse order
H_21 = homography.H_from_ransac(fp,tp,model)[0] #im 2 to 1
# warp the images
delta = 2000 # for padding and translation
im1 = array(Image.open(imname[0]), "uint8")
im2 = array(Image.open(imname[1]), "uint8")
im_01 = warp.panorama(H_01,im1,im2,delta,delta)
im1 = array(Image.open(imname[2]), "f")
im_21 = warp.panorama(H_21,im1,im_01,delta,delta)
figure()
imshow(array(im_21, "uint8"))
axis('off')
savefig("result.png",dpi=300)
show()

运行结果

1.原图(定点多角度拍摄)



1.原图(平移拍摄)

从运行结果来看,拼接图像基本对齐,但中间图片存在拼接缝,由于景深不同,拍摄的景物过多,图片的曝光程度不同导致的,因为曝光参数的不同,导致拼接后的全景图可以明显的看出明暗差异。也可能是因为图像景深的复杂程度导致的,使得算法在匹配时得到的特征点对不是很多,导致匹配拼接的结果差。但综合来说效果还是比较好的。
总体来说,用 Apap算法对景深落差小的图像进行拼接,能够有比较好的拼接效果;但Apap算法十分依赖特征点对,当图像高频信息较少,特征点对过少时,配准将完全失效,并且对大尺度的图像进行配准,其效果也不是很好。所以特征点对的数量是决定 Apap算法效果的一个重要因素。

【计算机视觉】图片拼接相关推荐

  1. 【计算机视觉】基于OpenCV的人脸识别

    一点背景知识 OpenCV 是一个开源的计算机视觉和机器学习库.它包含成千上万优化过的算法,为各种计算机视觉应用提供了一个通用工具包.根据这个项目的关于页面,OpenCV 已被广泛运用在各种项目上,从 ...

  2. (三)计算机视觉 --SIFT特征匹配、地理标记图像匹配及RANSAC图像拼接

    目录 一.sift特征检测概述 1.1特征点 1.2sift特征检测 二.sift特征提取与匹配 2.1特征提取并展示 2.2对两张图片进行特征匹配计算 2.3给定一张图片,输出与其匹配最多的三张图片 ...

  3. Computer Vision—计算机视觉 (一)

    Computer Vision-计算机视觉(一) (本文为总体概述,后续具体深入.原因的话,记录分享和本人水平成正比嘛~~~算是刚入门~~~) 总的来说,CV(计算机视觉)领域因为深度学习的引入,方兴 ...

  4. CV——基于Stitcher类实现图片拼接

    [摘要] 图像拼接(Image Stitching)是将同一场景的多张有重叠部分的图像拼接成一幅无缝或高分辨率图像的技术.在计算机信息技术不断发展的背景下,图像拼接技术不仅得到了有效优化,也切实应用于 ...

  5. 深度学习图像处理目标检测图像分割计算机视觉 02--图像特征与描述

    深度学习图像处理目标检测图像分割计算机视觉 02--图像特征与描述 摘要 一.图像特征与描述 1.1.颜色特征 1.2.几何特征提取 1.3.基于特征点的特征描述子 1.3.1.几何特征:关键点 1. ...

  6. 计算机视觉公司 摘过来,以后看看

    汽车助理类 Iteris (美国) http://www.iteris.com/ 卡车和小汽车的车道偏离和碰撞警示系统.已经被用于超过10万辆车辆中(2009).也开发交通监控系统 MobilEye( ...

  7. 计算机视觉的深度学习实战四:图像特征提取

    更多精彩内容请关注微信公众号:听潮庭. 计算机视觉的深度学习实战四:图像特征提取 综述: 颜色特征 量化颜色直方图.聚类颜色直方图 几何特征 Edge,Corner,Blob 基于关键点的特征描述子 ...

  8. 计算机视觉.图像拼接

    1.图像拼接技术 1.1 基本介绍 *图像拼接是将同一场景的多个重叠图像拼接成较大的图像的一种方法,在医学成像.计算机视觉.卫星数据.军事目标自动识别等领域具有重要意义.图像拼接的输出是两个输入图像的 ...

  9. 计算机视觉技术公司列表

    计算机视觉技术公司列表 汽车助理类 Iteris (美国) http://www.iteris.com/ 卡车和小汽车的车道偏离和碰撞警示系统.已经被用于超过10万辆车辆中(2009).也开发交通监控 ...

最新文章

  1. hdu4941 map交换行列
  2. O(n)级选排名第k位数(附上算法复杂度分析)
  3. malloc与calloc的区别
  4. https下不加www的强制跳转 - Nginx
  5. 上传到SAP云平台CloudFoundry上的nodejs应用存储的绝对路径
  6. TCP、UDP套接字的数据传输
  7. 读古诗系列--(两首)题都城南庄/江楼感旧
  8. 在用v-for时又想用v-if进行判断是否生产内容
  9. 数据结构研究 ----单链表的按序号查找
  10. C#一种简单处理假死的方法
  11. 12天,这本《重学Java设计模式》PDF书籍下载量9k,新增粉丝1400人,Github上全球推荐榜!
  12. AddressBook 相关操作小计
  13. js 幻灯片放映图片_20个响应式图像库和幻灯片放映(2018)
  14. 门店定位怎么在地图上显示_门店位置如何显示在地图上?
  15. C/C++描述 第十一届蓝桥杯省赛 C/C++ 大学C组 第一场(2020.7.5) 题目+题解
  16. 验证正整数和0,不以0开头的数,如01,02则不通过
  17. 岁月温柔-6 出院后忐忑不安的妈妈
  18. STM32F030 IIC2通用读写24C02、24C16、24C32、24C64等例程
  19. 墨修尧哪一章痊愈_第19章 偏心祖母是叶璃墨修尧最新更新章节-TXT全集下载-阅书阁手机阅读...
  20. 加州大学计算机硕士,加州大学伯克利分校cs专业

热门文章

  1. 国家级荣誉!烽火参建的这个项目荣获“鲁班奖”
  2. 珠城科技在创业板上市:IPO首日跌破发行价,市值相对蒸发约7亿元
  3. ​瑞·达利欧《原则》读书笔记
  4. 个人站长创业失败的原因总结
  5. php开发服务器电脑,如何在自己电脑搭web服务器开发环境
  6. SD卡数据恢复教程:3种工具一键恢复SD卡误删的照片
  7. 第八篇《颅骨穿孔——前篇》
  8. C语言电话号码判断合法性
  9. oracle 19c 解锁scott用户
  10. 华硕K42JC安装显卡驱动后进不了系统解决方法