初级的图像拼接为将两幅图像简单的粘贴在一起,仅仅是图像几何空间的转移与合成,与图像内容无关。高级图像拼接也叫作基于特征匹配的图像拼接,拼接时消去两幅图像相同的部分,实现拼接合成全景图。
具有相同尺寸的图A和图B含有相同的部分与不同的部分,如图所示:
用基于特征的图像拼接实现后:
设图像高为h,相同部分的宽度为wx
拼接后图像的宽w=wA+wB-wx
因此,可以先构建一个高为h,宽为W*2的空白图像,将左图像向右平移wx,右图像粘贴在右侧。则右图像刚好覆盖左图像中的相同部分。最终拼接图像完成,完成后的图像左侧有宽度为wx的空白即为所检测出的两幅图像的相同部分,可根据需要选择是否去除。示例图如下。
实现上述效果的步骤如下:
1. 采用surft特征检测算法检测两幅图像的关键特征点;
2. 建立FLANN匹配器,采用目前最快的特征匹配(最近邻搜索)算法FlannBasedMatcher匹配关键点
3.从所匹配的全部关键点中筛选出优秀的特征点(基于距离筛选)
4. 根据查询图像和模板图像的特征描述子索引得出仿射变换矩阵
5. 获取左边图像到右边图像的投影映射关系
6. 透视变换将左图像放在相应的位置
7. 将有图像拷贝到特定位置完成拼接
先放python下利用opencv 进行图像拼接的代码,环境为python2.7+opencv2:
#coding: utf-8 import numpy as np import cv2 leftgray = cv2.imread('1.jpg') rightgray = cv2.imread('2.jpg') hessian=400 surf=cv2.SURF(hessian) #将Hessian Threshold设置为400,阈值越大能检测的特征就越少 kp1,des1=surf.detectAndCompute(leftgray,None) #查找关键点和描述符 kp2,des2=surf.detectAndCompute(rightgray,None) FLANN_INDEX_KDTREE=0 #建立FLANN匹配器的参数 indexParams=dict(algorithm=FLANN_INDEX_KDTREE,trees=5) #配置索引,密度树的数量为5 searchParams=dict(checks=50) #指定递归次数 #FlannBasedMatcher:是目前最快的特征匹配算法(最近邻搜索) flann=cv2.FlannBasedMatcher(indexParams,searchParams) #建立匹配器 matches=flann.knnMatch(des1,des2,k=2) #得出匹配的关键点 good=[] #提取优秀的特征点 for m,n in matches: if m.distance < 0.7*n.distance: #如果第一个邻近距离比第二个邻近距离的0.7倍小,则保留 good.append(m) src_pts = np.array([ kp1[m.queryIdx].pt for m in good]) #查询图像的特征描述子索引 dst_pts = np.array([ kp2[m.trainIdx].pt for m in good]) #训练(模板)图像的特征描述子索引 H=cv2.findHomography(src_pts,dst_pts) #生成变换矩阵 h,w=leftgray.shape[:2] h1,w1=rightgray.shape[:2] shft=np.array([[1.0,0,w],[0,1.0,0],[0,0,1.0]]) M=np.dot(shft,H[0]) #获取左边图像到右边图像的投影映射关系 dst_corners=cv2.warpPerspective(leftgray,M,(w*2,h))#透视变换,新图像可容纳完整的两幅图 cv2.imshow('tiledImg1',dst_corners) #显示,第一幅图已在标准位置 dst_corners[0:h,w:w*2]=rightgray #将第二幅图放在右侧 #cv2.imwrite('tiled.jpg',dst_corners) cv2.imshow('tiledImg',dst_corners) cv2.imshow('leftgray',leftgray) cv2.imshow('rightgray',rightgray) cv2.waitKey() cv2.destroyAllWindows()
所用图像为:
拼接完成后的图像为:
测试一下抗干扰能力,所用图像:
拼接结果:
可见,抗干扰能力还是不错的,在测试中若拼接不成功,则注意以下两点:
1. 所用两幅图像尺寸是否相同,是否有相同的部分。
2. 适当调整hessian的值。
总结
以上所述是小编给大家介绍的python opencv 图像拼接的实现方法,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]