周末加班偷偷懒,先来回答一下,瞎说轻拍orz。
答案是当然有,图像拼接的第二春13年开始的,这里再简单总结和展望一下。
一个(全局)单应性对齐+柱面或球面投影+光束平差+多频带融合为核心的老一代拼接算法以BROWN大神03’ICCV和07’IJCV的AutoStitch AutoStitch为里程碑,已经非常成熟,各路拼接软件和应用都纷纷落地,著名的如OpenCV的实现stitcher http://stitching. Images stitching,微软的ICE,Image Composite Editor (64 bit) 和Photoshop中的拼接工具,某段时间图像拼接被认为是个已经完美解决的问题。
这世界上从来没有完美,只有更好的算法。AutoStitch有两个必须满足的假设:
1) 是要求图像直接的重叠区域可以近似一个平面,整个图像近似一个平面效果更好;2) 是各次拍摄时相机光心近乎重合(其实可以合并为一个条件:重叠区域场景中没有深度变化)。如果不满足这两个假设,就会因为视差问题产生明显的伪影和对不齐(重影or模糊)。为了说明这个问题,跟我来做个小实验:假设电脑屏幕是背景,两个眼睛是两个相机(光心距约为6cm),伸出一根手指到眉心前10cm左右,闭起一只眼睛看手指,分别用左右眼看手指在屏幕中的位置会发现这个两个位置之间有间距,而且随着手指距离眼睛越近,这个间距也越大。这就是视差问题带来的图像拼接最大难点:一个单应性矩阵将场景中同一平面的像素点无缝对齐了,而位于其他平面的像素点却无法重合,这就是重影问题。
关于这个问题有两个解决办法:
还是从问题根源出发,不就是一个全局单应性矩阵的对齐能力不够吗,那用更强力的矩阵或者更多个单应性矩阵不就好了。
故事是从11’CVPR的Dual-Homography Warping(DHW)开始的,将场景划分为背景平面和前景平面,用两个单应性矩阵(8参数变换矩阵,能把正方形变成任意四边形)分别对齐背景和前景,这种方法可以无缝拼接大部分现实场景了。
既然两个单应性矩阵效果更好,那很多人就会想能不能用更多的矩阵呢?效果会不会更好呢?图像拼接第二春就是这么一步一步发展过来的。当然有人这么做了,答案也是肯定的。另一篇11’CVPR的Smoothly Varying Affine(SVA),用多个仿射变换(6参数的变换矩阵,经过仿射变换的平行线依然平行,能把正方形变成平行四边形),局部变形能力和对齐能力更强,具有一定处理视差的能力(自己和自己下棋,图像拼接这么玩确实挺炫的)。
矩阵能不能更强一点呢?图像拼接第二春的里程碑算法,13’CVPR,14’PAMI的As-Projective-As-Possible(APAP)出现了,来自TJ CHIN大神组的工作,将图像划分为密集网格,每个网格都用一个单应性矩阵对齐,叫做局部单应性,并同时给出了一整套高效的计算方法Moving DLT,最最最重要的是公开了MATLAB代码.
至此,图像拼接的第二春开始了(春来发几枝-_-!),你可能会疑惑,不就是划分网格多个的局部单应性吗,有这么厉害吗?当然厉害啊,不过厉害的不是局部单应性,重点在于网格二字,重新看APAP算法,可以用一句话总结:网格变形!(汽车人请保持冷静,没说你们)。
我们需要先梳理一下派别,图像拼接属于计算机视觉问题(三大会议CVPR, ECCV, ICCV和两个顶刊IJCV, PAMI),而网格变形与优化相关的图像变形、尺寸缩放、重定向、视频去抖等问题都属于图形图像问题(顶会SIGGRAPH和顶刊ACM TOG)。虽然自古武功不外传,但就像某某高手,博采众家之长自成一派创立武功绝学一样,APAP打通了图像拼接和网格优化,马上就有人从网格变形联想到网格优化,用网格优化的方法来解决图像拼接问题。
14’CVPR的Parallax-tolerant Image Stitching Parallax-tolerant Image Stitchin, 借鉴经典视频去抖方法Content-preserving warps(CPW)的优化项和缝合线主导的13’Eurographics的Seam-driven,大幅提高了大视差场景的拼接性能。
大视差场景拼接其实在Parallax-tolerant之前还有一篇Seam-Driven,用seam-cut 指导来估计最佳geometric transform:
另一篇14’CVPR的Shape-Preserving Half-Projective(SPHP)从形状矫正的角度出发,借鉴图像缩放的Shape-Preserving类方法,非重叠区域逐渐过渡到全局相似变换(4参数的变换矩阵,能把正方形变成矩形),并对整个图像增加相似变换约束,矫正拼接图像的形状,减小了投影失真。
这两个方法的共同点是,给网格添加不同的约束项就能得到不同的效果,约束项让图像拼接进一步升华。如果3年前你就关注CV届,看到这个你肯定会眼前一亮,这可是灌水利器啊,过来人都依稀记得,在深度学习之前统治CV界的稀疏表示,换个约束项就是一篇文章(吐槽下,请不要痛恨遍地都是深度学习,至少深度学习还是work的,不怎么work的稀疏表示曾经也这样泛滥过,养育了一批科研人员)。更致命的是,除了网格优化可以加约束项,常用的最优缝合线(seam-cutting)的图割也是个优化问题,也可以加优化项,更好更找出缝合线也是一个方向。(人家也上有老下有小,水水文章无可厚非)好文章并且真真实实work的工作还是有的,再用一首歌的时间,快速浏览一下那些值得follow的拼接算法:
15‘CVPR的Adaptive As-Natural-As-Possible(AANAP),同样是形状矫正问题,自适应确定角度,同样用全局相似变换矫正形状,IBM出品(大牛很冷漠,没有回我邮件~_~),没有落约束项的俗套,质量杠杠的,拼接结果的观感自然度比SPHP提升了一个档次。
16’ECCV的Global Similarity Prior(GSP) Natural Image Stitching with the Global Similarity Prior,直线对齐约束确定全局相似矩阵的角度选择,用APAP初始化网格,约束项方面同时使用局部相似约束和全局相似约束,多图拼接性能和观感自然度提升。
16‘ECCV的Seam-guided Local Alignment(SEAGULL) Image Stitching Project 在Parallax-tolerant Image Stitching算法的基础上,改进Seam-driven,轮廓检测和直线检测,加入了曲线和直线结构保持约束项的结构保持绘制,确实提升很明显。
用网格优化来解决图像拼接问题,等价于每个局部单应性矩阵互相独立单独优化,具有更大的自由度,上面几篇论文也能看出来更大的自由度能兼顾的更多,拼接结果更加准确自然。图像拼接大家都在玩大视差的拼接,玩到有点过分了,为了显示算法对其能力的强悍,图像视差大的不可理喻之外,重叠区域也是几乎整个图像,虽然这样没什么实际意义,但对齐能力的提升才是这些过分玩法的基础。其实想怎么玩都可以,图像/视频是一个比较务实的方向,水水论文毕业可以做相关产品的落地。
/************************我是分割线**************************/
再扯扯,又一个VR元年过去了,除了AR火了一把,VR还是安安静静的发展,作为VR技术的核心之一,图像拼接是很有市场的。如果要发顶级文章又怕只做图像拼接做不过各大团队,紧紧围绕VR去做也是可以的,这里再介绍两条路:
视频拼接:VR很需要拼接效果好还能在线实时拼接的算法,价格下来体验上去才能飞入寻常百姓家(看到VR上GTX我表示心累,不热也贵啊)。难点主要有:除了图像拼接中的视差问题,还有前景移动物体穿越相机时的重影和不连续。背景建模类方法速度快但效果差,大视差前景物体难以处理;逐帧拼接类效果好,但速度慢,不考虑空域就会有抖动。
目前比较热的做法是把视频拼接和视频稳定(去抖)一起做,可以做高质量离线拼接,也可以做在线实时拼接,都是有市场和实际应用需求的。如果真的做的好有重大突破,收收专利费过好下半生不会问题~~
这些离线逐帧拼接方法和视频稳定一起玩,效果可以做的很好,加约束项依然行得通,但复杂度嘛,呵呵。。在线实时还没有很work的方案,如果对这个问题感兴趣欢迎讨论。再来做个实验吧:(那我懂你的意思了,原句引用)以人的左右眼成像为例。摆一根手指在眼前,人解决大视差的观看方式是让它重影吧,主要保证大视野信息的完整性。非要看清手指那就只好斗鸡眼了(斗鸡眼-_-!)。。。说说个人做实时在线视频拼接的相关项目的经验吧:
再用一首歌的时间推荐几篇文章:
15年一作华科的Parallax-Robust Surveillance Video Stitching,虽不能算顶尖工作的代表,也可以作为在线视频拼接的范例,适用环境是类监控场合,特点是相机位置和背景都保持不变,套路基本都类似:
15’CVPRW的Spatial-Temporal Content-Preserving Warping(STCPW),华为出品,加时空域约束项,时空块3D缝合线搜索是创举,但拼接速度未知(做视频拼接的文章不提拼接速度是要闹哪样啊),想想就慢的要死。
16’EUROGRAPHICS(CGF出版)的Seamless Video Stitching from Hand-held Camera Inputs Video Stitching Project 也是SEAGULL的作者做的,密集3D重建,约束项与SEAGULL类似,拼接效果真的很赞,听说一帧就要几分钟。。。
16‘TIP的Joint Video Stitching and Stabilization http://Joint Video Stitching and Stabilization From Moving Cameras,以视频稳定为主,加入视频拼接约束项,算是上一篇的改进,速度快了很多,文中自己说720p视频2fps。
立体图像拼接:VR的沉浸现实感很需要3D帮忙,这样体验才能提高一个档次(3D电影看多了公民的品味高了,2D已经无法满足大众口味)。立体图像和立体视频拼接也是可以做的(立体也是灌水利器-_-!),立体图像拼接推荐15‘CVPR的Casual Stereoscopic Panorama Stitching,立体视频暂时还没有看到相关创新工作。
/************************我是分割线********************/
再次回到图像拼接问题,按照主流算法先来给图像拼接划分几个小方向:
马克思告诉我们,事物都有两面性,Spatially-varying warping类方法看起来这么完美,这不科学啊。幸好这里不是论文只说好处不提缺点,咱们大大方方来谈谈这些方法的缺点和相关解决方案,工业界最看重实用性,同时也希望学术节能提出一些高效的解决方案。
就像下图这种情况,特征点都集中在建筑物上,而天空部分特征点很少,这部分就很难对齐。再仔细看天空中的内点,大阈值RANSAC后的内点还是包含明显的错误匹配点,拼接结果就不放出来了,实在不忍心~~Spatially-varying warping类方法完全是靠特征内点来建模局部视差的,所有视差对齐信息都来自特征内点对(民以食为天)。
关于提高内点数量和质量的重要性学术界当然也注意到了,上面的文章也都多多少少做了研究和改进。也有专门针对这个问题研究的文章,或者加入新类型特征,或者提高特征点质量和数量等,这再用一首歌的时间介绍几个不错的工作:
也许有人注意到16’ECCV的两个工作都用到了直线,一篇用直线对齐找全局相似变换的最佳角度,另一篇用了直线结构保持的绘制,其实早在15年就有两个直线相关的图像拼接工作。15‘ICCV的Dual-Feature Warping(DFW),由香港科技大学和微软联合出品,给出了一整套线段特征检测、匹配和RANSAC的方法,作为补充结合点特征一起用,思路就很厉害了,效果自然不会差。
同年15’ICIP的Line meets As-Projective-As-Possible(L-mDLT),与上一篇类似,扩展APAP的MovingDLT,给出了一个点特征和线特征结合的APAP图像拼接框架。但这两个15年的工作对特征线段的处理套路类似特征点,比较直接,而16年的两个工作将直线作为约束项,这样复杂度要低很多。
线特征作为点特征的补充对拼接效果的提升很明显,但随之带来的计算复杂度提升也是很可观的。TJ CHIN大神组不就前在16‘arXiv挂出来的方法Correspondence Insertion for As-Projective-As-Possible(APAP+CI),自动识别未对齐区域,在这些区域对应插入匹配点,没仔细看过就不做评价了。
最后,再来聊聊图像拼接怎么和最近很热的深度学习拉关系。图像拼接天然就和VR渊源很深,如果再和深度学习拉上关系,那就不愁文章投不出去,而且深度学习的强大也已经得到了广泛认可,如果能借助深度学习解决以上难题也算是功德一件。我也非常希望能看到更好更实用还免费的新算法代替SIFT/SURF,但新算法要经过学术界的批判和不断改进,工业界的检验和加速优化,才能创造价值(打是亲骂是爱,千锤百炼)。深度学习的网络结构基本固定,做图像拼接相关问题最需要关注的是训练样本和损失函数(如匹配特征点label怎么标注,端到端训练图像拼接ground truth应该怎么给定),再用一首歌的时间,以两篇相关文章为例,来了解和评估一下Deep ConvNet在图像拼接相关邻域的表现。
16’ECCV的Learned Invariant Feature Transform(LIFT) cvlab-epfl/LIFT,将以下三个分别用深度学习做特征点的检测、方向分配和描述子生成的工作结合,end-to-end训练:
网络结构是3个CNN分别进行检测、方向、描述(好失望,真的是3合1)。深度学习我们最关心的大量训练样本哪里来?意料之中不是人工标注,而是基于SIFT,是SfM重建过程中所用的特征点(原文the feature points that survive the SfM reconstruction process),LIFT在训练阶段的输入是以特征点为中心的小块。测试阶段,多尺度图像输入,滑窗形式特征点检测,之后提取小块逐个分配方向,计算描述子。速度未知,文章没提(猜猜看3个CNN有多快),虽然端到端训练是优势,但训练数据由算法产生,必然会继承SIFT和SfM的缺点(学习雷锋好榜样的必要性),尺度不变性通过多尺度输入获得,光照不变性应该还不错,作者自己说了旋转不变性很差,有兴趣可以跑跑下代码实测效果!
16‘arXiv挂出来的Deep Image Homography Estimation, 提出HomographyNet的用一个类VGG的10层CNN直接从输入图像对,回归预测单应性矩阵的8个参数。听起来很美好,但还是要友情提示,论文投的不是计算机视觉顶会,而是RSS Workshop on Limits and Potentials of Deep Learning in Robotics 2016(机器人领域顶会感谢知友告知),但想法新颖,有参考价值。虽然Titan X(深度学习,贫民退散)上300fps,但输入太小了没有参考意义,再来看看我们最关心的训练数据还是算法生成的,原图像和投影变换后图像同一点裁小块就是两个输入,相应投影变换就是label。两输入的内容几乎一样,完全没有实际问题中的光照、视差和噪声等因素,而且测试也是这么生成的图像对,算法真实效果和实用价值待定,认真你就输了。
/**********************我是分割线************************/
前不久有首PPAP很火,有没有觉得和APAP很像,这里就给PPAP配上图像作为结束,ENDING!
I have a pen,I have an apple.Apple-pen!
I have a pen,I have pineapple.Pineapple-pen!
Apple-pen~Pineapple-pen.Pen-Pineapple-Apple-pen!