前言
之前的博客中,已经介绍了图像拼接主要可以分为4个阶段:特征提取、特征匹配、图像配准、图像融合,其中特征提取阶段有SURF、SIFT、ORB、Harris等算法。于是我写了一个Web系统,用于使用不同的特征提取算法进行图像拼接,并且比较之间的效率和质量。
项目为前后端分离项目,前端代码仓库地址:https://github.com/bodhisatan/stitch-frontend ;后端代码仓库地址:https://github.com/bodhisatan/stitch-backend
系统设计
算法选取
在图像拼接领域中,主要流行的有三种特征提取算法:SIFT、SURF、ORB,这三种都在OpenCV里有实现(SURF因为专利原因已经从OpenCV里下掉),SURF是SIFT的加强版,运算效率比SIFT高一个数量级,ORB基于FAST,运算效率比SIFT高两个数量级,但是鲁棒性不及SIFT和SURF。因此在算法的选取上,选择了OpenCV已经实现的SIFT和ORB,在运算效率和鲁棒性方面都有明显的比较。除此之外,我自己也实现了一个Harris方案,Harris是一种角点匹配方法,对尺度很敏感,不具有尺度不变性,需要先将图片转为灰度图再进行运算。
比较参数选取
对于算法的比较,主要从三方面考虑:
- 待拼接图像的相似度(前置条件角度)
- 输出图像的质量(输出质量角度)
- 运行时间(运行效率角度)
输入图像相似度
有些特征提取、匹配算法要求待匹配图像相似度较高,于是我记录了相似度参数。相似度采用两方面指标: - 三通道直方图相似度: 比较常见的衡量相似度的指标,先得到图像像素值的直方图,再计算直方图的相似度,这种计算方案有个缺陷,它仅反映图像像素值的数量,不能反映图像纹理结构,很明显该方法存在很多误判,比如纹理结构相同,但明暗不同的图像,应该相似度很高,但实际结果是相似度很低,而纹理结构不同,但明暗相近的图像,相似度却很高。
- SSIM: 为了弥补直方图相似度的缺陷,我又采取了SSIM指标。SSIM是结构化相似度,是一种全参考的图像质量评价指标,它分别从亮度、对比度、结构三方面度量图像相似性,能够弥补直方图相似度误判的缺陷。(在之前的博文中也有详细介绍)
输出图像质量
拼接的输出图像的品质,一般从有没有裂缝、有没有鬼影、有没有正确拼接等角度,但没有一个具体客观的指标。我看了相关的论文之后,发现有一篇论文通过PSNR指标作为输出图像质量的参考。
PSNR(Peak Signal to Noise Ratio): 峰值信噪比,主要是为了衡量经过处理后的影像品质,PSNR指标越高,代表输出图像的失真越少,质量越高
其中,MAXI是表示图像点颜色的最大数值,如果每个采样点用 8 位表示,那么就是 255。
运行时间
运行时间记录两个时间:
- 特征提取阶段运算耗时(主要比较的算法耗时)
- 图像拼接运算总耗时
系统实现
技术选型
前端采用Vue.js和webpack技术实现前后端分离,组件采用elementUI和ECharts,与后端通信采用axios,后端框架从易用性角度考虑采用Flask,数据库从方便扩展的角度考虑采用MongoDB
实现结果


