APAP论文阅读笔记[通俗易懂]

APAP论文阅读笔记[通俗易懂]As-Projective-As-PossibleImageStitchingwithMovingDLT论文阅读笔记论文和代码可以在这个网址找到:https://cs.adelaide.edu.au/~tjchin/apap/一、全文翻译题目:使用移动DLT进行尽可能投影的图像拼接摘要:我们专注于图像拼接的任务,通常通过估计投影扭曲来解决这一问题——当场景是平面的或当视图完全因旋转而不同时,该模型是合理的。这样的条件在实践中很容易被违反,这就产生了使用重影人工制品的缝合结果,这就需要使用去

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

论文和代码可以在这个网址找到:https://cs.adelaide.edu.au/~tjchin/apap/

一、全文翻译

题目

使用移动DLT进行尽可能投影的图像拼接

摘要

我们专注于图像拼接的任务,通常通过估计投影扭曲来解决这一问题——当场景是平面的或当视图完全因旋转而不同时,该模型是合理的。这样的条件在实践中很容易被违反,这就产生了使用重影人工制品的缝合结果,这就需要使用去重影算法。为此,我们提出了尽可能投影的扭曲,这些扭曲的目标是全局投影,但允许局部非投影偏差来解释违反假定成像条件的情况。基于一种称为移动直接线性变换(Moving DLT)的新估计技术,我们的方法无缝地桥接了与投影模型不一致的图像区域。结果是高度精确的图像拼接,显著减少了重影效果,从而降低了对后期重影的依赖性。

一、介绍

一位著名统计学家的这一著名建议在许多科学领域都适用,包括计算机视觉。在本文中,我们主要关注投影估计中的模型缺陷。更具体地,我们考虑的情况下,投影模型的有利假设没有完全满足的数据,从而从根本上限制可实现的拟合优度。
我们专注于图像拼接,尽管我们希望我们的方法能更广泛地应用,例如在视频稳定。图像拼接通常通过估计二维投影扭曲来解决,以使图像对齐。通过3×3同形图参数化,如果场景是平面的,或者如果视图纯粹因旋转而不同,则2D投影扭曲是正确的[17]。实际上,在临时用户手中,这些条件不可能完全满足。因此,投影模型无法充分描述所需的扭曲,从而导致错位或重影效果。注意,此类误差是由于模型中的固有缺陷,而不仅仅是噪声干扰;图1(a)示出了。
许多商业缝合软件,如Autostitch和Photosynth(特别是panorama工具),使用投影扭曲,可以说是因为它们的简单性。当不满足必要的成像条件时,它们的成功依赖于去宿主算法来去除不需要的人工制品[17]。在这里,我们提供了一种不同的策略:我们不依赖投影模型(这通常是不充分的),然后修复由此产生的错误,而是根据数据调整模型以改进拟合。我们通过我们的小说来实现这一点,作为可能的扭曲,即。E以全局投影为目标,但允许局部偏差来解释模型不足的扭曲;图1(c)示出了。我们的方法大大减少了对准误差,但能够保持整体几何合理性。图3示出了示例结果。
请注意,我们的目标不是对任意相机运动执行图像拼接(例如[12]). 相反,我们的目标是调整投影模型以尽可能精确地拟合数据。我们的目标也不是放弃去托管算法,如果存在严重的错位或移动对象,去托管算法仍然很有用。然而,我们认为一个好的初始针迹是非常可取的,因为它对随后的脱胶和后处理的要求要低得多;例如,图3中的结果是使用简单的像素平均值合成的,几乎没有明显的重影。
更重要的是,我们基于一种称为移动DLT的新估计技术来学习所提出的warp。它的灵感来自用于图像处理的移动最小二乘(MLS)方法[2],但我们的方法采用投影正则化,而不是刚性或仿射正则化。这对于确保扭曲正确外推到图像重叠(插值)区域之外以保持感知真实性至关重要。图1(b)和1(c)来自移动DLT和MLS的对比度翘曲。能够灵活地插值以最小化重影,并准确地外推以保持几何一致性是图像拼接的重要品质。
与我们的方法更接近的是[6]中的曲面近似工作,其中使用代数MLS将球体拟合到点云上。我们的工作不同之处在于我们拟合的是射影函数而不是几何曲面。此外,函数外推是[6]中未强调的一个关键方面。
论文的其余部分组织如下:第1.1部分调查相关工作,第2和3部分介绍所提出的warp及其用于图像拼接的有效学习。结果见第4节,我们的结论见第5节。

1.1 相关工作

虽然图像拼接的基本原理已经得到了很好的研究(参见[17]中的优秀调查),但如何在数据有噪声或不合作时产生良好的结果仍然是一个有待解决的问题。在我们的论文中,我们将以前的工作分为两组:(1)通过构造更好的对齐函数来减少重影的方法,(2)使用合成、像素选择或混合中的高级方法来减少对齐后的重影的方法。在第二组中,接缝切割[1,3]和泊松混合[13]是有影响的。由于我们的方法属于第一组,我们将在下面回顾这些方法。理想情况下,两组的方法应联合使用,以获得最佳结果。
Shum和Szeliski[15]首先执行光束调整,以优化所有视图的旋转和焦距。对于每个特征,取每个视图的后向投影光线的平均值,随后再次投影到每个视图上,以在2D中生成修改后的特征位置。然后,使用双线性核对剩余配准误差的函数进行建模,并将其用于最终对齐。虽然反投影是一种非常有原则的方法,但它需要相机本身,而这可能是不可用的。
在视频稳定方面,Liu等人[10]提出了内容保留扭曲。给定原始图像帧和目标图像帧之间的匹配特征,通过使用尽可能相似的扭曲[8]扭曲原始图像来合成新视图,该扭曲联合最小化配准误差并保持场景的刚性。该方法还使用单应性对原始图像进行预扭曲,从而有效地产生平滑插值投影扭曲。强加的场景刚性最大限度地减少了平滑视频中可怕的“抖动”效果。然而,正如我们在第4节中所显示的,在图像拼接中,视图之间可能存在较大的旋转和平移差异,由于刚性约束,他们的方法插值不够灵活。这在[10]中可能不是问题,因为原始和平滑的摄影机路径是接近的(参见第4部分[10]中),要对齐的视图非常接近。
最近的一项工作提出了平滑变化的仿射扭曲用于图像拼接[9]。他们的想法的基础是基于运动一致性的点集配准方法[11]。[9中]的一个有趣创新是注册函数的仿射初始化,然后局部变形以最小化注册错误,同时保持全局亲和力。从根本上说,使用仿射正则化可能是次优的,因为仿射不包含足够的自由度来实现完全透视扭曲[17],如仿射扭曲可能会适得其反地保持平行性。的确,就像无花果一样。第4行和第5行(第二行)显示,虽然该方法可以灵活插值,但它在外推区域产生高度扭曲的结果,在该区域没有数据来引导局部变形,并且扭曲恢复为全局亲和性;图1(b)提供了1D类比。
通过假设场景包含一个地平面和一个远平面,Gao等人[4]提出了用于图像拼接的双单应性扭曲。本质上,它们是分段投影扭曲的一个特例,它比使用单一单应性更灵活。如果所需的设置为真,则该方法性能良好,但可能难以将该方法扩展到任意场景,例如如何估计所需同音字的数量及其参数。

二、尽可能的投影扭曲

我们首先回顾了图像拼接中常用的投影变换估计,然后将所提出的算法描述为尽可能的投影变换。

2.1 射影翘曲

设x=[xy]T和x’=[x’y’]T不是重叠图像I和I’上的匹配点。投影扭曲或单应旨在按照关系将x映射到x’:
在这里插入图片描述
其中x’是齐次坐标中的x,H∈ R3×3定义了单应性。在非均匀坐标系中,
在这里插入图片描述
其中,hTj是H的第j行。如图1(a)所示,在(2)中的分割会导致扭曲为非线性。

DLT是一种从I和I ‘上的一组噪声点匹配{xi,xi ‘}Ni=1估计H的基本方法。将Eq.(1)重写为隐式条件03×1= x ’ ×Hx ‘并线性化
在这里插入图片描述
只有两行是线性无关的。设ai∈R2×9为第i个数据{xi,xi ‘}的(3)的前两行。DLT估计H的9个元素为
在这里插入图片描述
当约束| | h | |=1时,其中矩阵A∈ R2N×9是通过对所有i垂直叠加ai得到的。该解就是A的最小有效右奇异向量。

给定估计的H(从H ‘重塑),为了对齐图像,源图像I中x∗位置上的任意像素被弯曲到目标图像I’中的x∗’位置
在这里插入图片描述
为了避免数值精度问题,在DLT之前,可以先以[7]的方式对数据进行标准化,然后在执行(5)之前对估计的H进行非标准化。

2.2 移动DLT

当视图I和I’不完全因旋转而不同或不属于平面场景时,使用基本投影扭曲不可避免地会在对齐中产生重影效果。为了缓解这个问题,我们的想法是扭曲每个x∗ 使用位置相关单应
在这里插入图片描述
其中H∗是从加权问题估计的
在这里插入图片描述
以||h|| = 1为准。标量权重{wi∗}Ni=1根据x∗变化,
在这里插入图片描述
其中,σ为尺度参数,xi为第I个点匹配的1 / 2点在源图像I中的坐标{xi,xi ‘}。

直观上,由于(8)为更接近x∗的数据分配了更高的权重,投影扭曲H∗更好地尊重x∗周围的局部结构。将此与(5)进行对比,(5)对所有x∗使用单一和全局投影曲H。此外,当x∗在其域I内连续移动时,warp H∗也会平滑变化。这产生了一个整体的扭曲,可以灵活地适应数据,但又试图尽可能地投射。图1©和图3©描述了这种一维和二维的扭曲。我们称这个估计过程为移动DLT。

(7)中的问题可以写成矩阵形式
在这里插入图片描述
其中权重矩阵W∗∈ R2N×2N组成如下:
在这里插入图片描述
diag()在给定向量的情况下创建对角矩阵。这是一个加权SVD (WSVD)问题,解决方案只是W∗a的最不重要的右奇异向量。

当许多权重不重要时,问题(9)可能是不稳定的,例如,当x∗处于数据差或推断区域时。为了防止估计中出现数值问题,我们用一个很小的值γ∈[0 1]来抵消权值。
在这里插入图片描述
这也有助于调整经纱,因此高γ降低了经纱的复杂性;事实上,当γ→1时,翘曲退化为整体投影翘曲。图2描述了没有正则化的MDLT结果,而图1©显示了正则化后相同数据的结果。

从概念上看,移动的DLT可以看作MLS[2]的投影版本。在2D图像处理[14]中的扭曲点的背景下,每个x∗的MLS估计是一个由矩阵F∗∈R2×3定义的仿射变换
在这里插入图片描述
包括非平稳权重{wi∗}Ni=1会产生柔性翘曲,但此类翘曲最终只可能是仿射的;参见图1(b)中的1D类比。此外,[14]中的关注点是进一步限制翘曲的整体柔性,以避免不必要的形状剪切。

三、图像拼接的有效学习

在这里,我们描述了一种有效的图像拼接算法的基础上提出的翘曲。我们首先消除{xi,xi‘} N i=1使用RANSAC[17]和DLT作为全局单应性的最小解算器。有人可能会反对RANSAC,因为我们考虑的情况下,内幕可能偏离投影模型。在实际应用中,异常值的误差比内部偏差大几个数量级,因此RANSAC可以有效地使用。
分裂成细胞。求解(9)所有像素位置x∗ 在源图像中,I是浪费的,因为相邻位置产生几乎相同的H估计值∗. 在[14]之后,我们将源图像I划分为C1×C2单元的网格。对于每个单元,中心坐标选择为x∗, 同一单元内的所有像素都使用相同的H扭曲∗. 因此,我们将WSVD的实例数减少到C1×C2。图3(c)示出了针对1500×2000像素图像对使用100×100单元学习的扭曲。
此外,观察所有电池的WSVD可以独立解决。因此,一种简单的加速方法是并行解决WSVD的多个实例。请注意,即使没有并行计算,在奔腾i7 2.2GHz四核机器上,使用100×100个单元和N=2100个关键点匹配(A的大小为4200×9)学习图3中的扭曲也不到一分钟。
更新加权SVD。如果我们意识到,对于大多数电池,由于偏移(11),许多重量与偏移γ没有差异,则可能进一步加速。基于图中的图像。3(a)和3(b),图3(d)所有单元格的直方图-不同于γ的权重数(此处,γ=0.0025)。绝大多数细胞(>40%)的重量小于20个(2100个细胞中),与γ不同。
为了利用这一观察结果,可以从以前的解决方案更新WSVD,而不是从头开始计算。定义Wγ=γI,让V的列是WγA的右奇异向量。定义特征分解
在这里插入图片描述
作为基本解决方案。设W’等于Wγ,但第i个对角线元素的值为wi’时,ATW’T’W’A的特征分解可作为秩一更新得到
在这里插入图片描述
可以使用长期方程有效地完成[16]。乘以VC’得到W’A的右奇异向量。这可以通过利用C’[16]中的柯西结构有效地实现。这个排名第一的更新的成本是O(m2log2m)。
在这里插入图片描述
因此,每个单元的WSVD可以通过对基本解决方案的少量秩一更新获得,每个更新的成本为O(m2log2m)。总的来说,这比从头开始计算要便宜,而W∗大小为n×m的A,即使我们只计算正确的奇异向量,也需要O(4nm2 8m3)[5]。注意,在(9)中,(n=2N)?(m=9)。

四、结果

我们将我们的尽可能投影(APAP)扭曲与其他用于图像拼接的扭曲改进方法进行比较,即内容保持扭曲(CPW)[10],双单应性扭曲(DHW)[4],以及平滑变化仿射(SVA)[9]。为了有效地区分这些方法,我们避免了复杂的后处理,如[4]中所述的接缝切割和矫直,并简单地通过强度平均来混合对齐的图像,以便任何错位都保持明显。我们还比较了Autostitch和Photosynth的全景工具。对于Photosynth,将使用最终的后处理结果,因为未给出原始对齐。
我们选择了测试图像,这些图像对应于不同于纯旋转的视图。虽然已经测试了许多图像(包括其他地方使用的图像)并获得了令人信服的结果,但本文中只能包含少数图像;有关更多结果,请参阅补充资料。
预处理和参数设置。给定一对输入图像,我们首先使用VLFeat库检测并匹配SIFT关键点[18]。然后,我们按照第3节所述运行RANSAC以消除不匹配,剩余的入口被提供给CPW、DHW、SVA和APAP。这些方法的良好性能取决于具有正确的参数。对于CPW、DHW和SVA,我们调整了所需参数以获得最佳结果;有关所需参数的列表,请参阅相关文件。对于APAP,对于大小为1024×768到1500×2000像素的图像,我们在[8 12]范围内改变了尺度σ。偏移量γ从[0.0025 0.025]中选择。网格大小c1和c2均取自[50 100]范围;在每个图像对上,CPW网格中也使用相同的网格分辨率。此外,在[10]之后,对于CPW,我们使用RANSAC返回的内联线上通过DLT估计的全局单应性预扭曲源图像。对于Photosynth和Autostitch,给出了原始输入图像(带有EXIF标记)。

4.1 定性比较

图4和5描述了轨道和庙宇图像对上的结果。前者是我们自己的数据,而后者由[4]的作者提供。基线扭曲(通过内联线上的DLT的全局单应性)显然无法令人满意地对齐图像,因为视图不完全因旋转而不同。SVA、DHW和Autostitch稍好一些,但仍然存在显著的重影。此外,请注意SVA产生的高度扭曲扭曲,特别是在外推区域。Photosynth产生的错误似乎不那么“鬼魅”,这表明使用高级混合或像素选择[17]来隐藏错位。尽管如此,后处理显然并不完全成功;观察地面上未对齐的轨道和瓷砖。将上述方法与APAP进行对比,APAP以较少的伪影清晰地对齐了两幅图像。这减少了后处理的负担;我们已经证实,金字塔混合[17]有助于解释曝光差异和平滑混合。
虽然预翘曲的CPW能够产生良好的结果,但刚性约束(如图3(b)中的网格被定义并阻止变形)可能会适得其反地限制翘曲的灵活性(仅观察翘曲图像的轻微非线性轮廓)。因此,尽管轨道和平铺正确对齐(在这些纹理相对丰富的区域中存在更多的关键点匹配以影响扭曲),但在天际线附近的区域会发生重影。请注意,尽管APAP引入了网格,但它是为了计算效率,而不是强加刚性。
运行时信息。对于DHW、CPW、SVA和APAP(无WSVD更新),我们记录扭曲估计(加上任何数据结构准备时间)、像素扭曲和混合的总持续时间。所有方法均在MA TLAB中运行,C Mex加速用于翘曲和混合。DHW以秒为单位运行,而CPW和APAP通常需要数十秒。相比之下,SVA会随着图像大小的变化而变化(因为较大的图像会产生更多的关键点匹配)。文献[9]中报告500×500图像的SVA时间为8分钟,而在我们的实验中,寺庙(1024×768)的SVA时间为15分钟,铁路(1500×2000)的SVA时间为1小时。
构建完整的全景图。给定两个以上的图像,我们首先选择一个中心图像来初始化全景。然后,我们通过APAP将其他图像逐渐扭曲到全景图上。关于结果,请参考补充材料,我们只是简单地将像素平均值与之混合,以突出所建议扭曲的准确性。虽然使用APAP方法可以同时对齐所有图像[17],但我们将此留作将来的工作。

4.2 定量基准

量化估计偏差f的对准精度: R2→ R2,我们计算一组关键点匹配{xi,xi ‘}Ni=1上f的均方根误差(RMSE)
在这里插入图片描述
此外,对于图像对,我们将可用的SIFT关键点匹配随机划分为“训练”和“测试”集。训练集用于学习翘曲,RMSE在两个训练集上进行评估。表1描述了5对具有挑战性的真实图像对上不同方法的平均RMSE(超过20次重复),其中4对用于[4,9]。很明显,APAP的表现一直优于其他公司。参考补充材料进行定性比较。
为了进一步研究,我们通过将随机生成的3D点云投影到两台摄像机上,生成合成2D图像。在每个实例中,创建200个点,其中3D坐标和相机内部控制,以使投影适合200×200像素图像。这允许直接应用各种偏差估计方法。对于每个点云,我们将摄影机之间的相对旋转固定为60◦, 但沿固定方向改变摄像机中心之间的距离。与前面一样,我们将点匹配划分为一个训练集和测试集。
图6显示了根据距离绘制的平均RMSE(超过50次重复)。预计,所有方法都会随着距离的增加而恶化。然而,观察到SVA和CPW的误差并没有随着翻译趋于零而减少到零。对于SVA,这很可能是由于其仿射正则化而不是投影正则化;参见图1(b)。此外,对于CPW,加强刚度似乎通过全局单应性扰动了预翘曲的影响。相比之下,APAP在摄影机中心重合时优雅地减少为全局单应性,并在平移增加时提供最精确的对齐。

五、结论

我们提出了一种尽可能投影的二维翘曲函数估计方法。图像拼接的结果显示了令人鼓舞的结果,我们的方法能够精确地对齐不同于纯旋转的图像。实验还表明,当摄像机平移趋于零时,所提出的扭曲会优雅地减少到全局单应性,但随着平移的增加,会灵活地适应模型不足。这产生了一种高度精确的图像拼接技术。

二、代码

代码可以在前面说的网址中找到,一共有两个版本:
在这里插入图片描述可以根据自己的需要下载所需要的版本,这里我下载的是第一个,2013年的MATLAB代码,原作者使用的版本是2013版本,其他人使用2014版本也可以运行,我是在我自己电脑上的MATLAB 2017版本上运行的,只需要修改代码中的一点就可以运行:
在这里插入图片描述
原代码中红圈圈中的部分是matlabpool,由于我的版本较高。matlabpool已经不在使用了,只需要将其改为parpool就可以了,第二处需要修改的就是将第一个红圈中的”size”改为”local”就可以。
我运行的实验结果如下:
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述

三、参考文章

现在CSDN搜索一个问题出来的答案实在是太多了,我在CSDN上搜素APAP,出来的结果有好几十种,除了一些需要付费的,很多对我们的工作用处不大,我整理了几篇不错的文章,供大家一起学习。
1、 https://blog.csdn.net/chentianting/article/details/88869872
2、 https://blog.csdn.net/qq_32095699/article/details/80448170?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163115436616780271522172%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=163115436616780271522172&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-3-80448170.pc_search_result_control_group&utm_term=APAP&spm=1018.2226.3001.4187

有需要的可以一起交流啊!
完!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/190548.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 串口调试助手如何使用

    串口调试助手如何使用需要设置好对应的串口端口,波特率、校验位、数据位、停止位,然后打开串口。这是一个绿色版的,比深蓝串口调试助手好用的多。

  • oracle存储过程回滚_sql事务回滚

    oracle存储过程回滚_sql事务回滚创建表createtableCourse (NoINT,Namenvarchar(10),Commentnvarchar(10))插入数据insertintocoursevalues(‘332′,’语言在’,’234′)insertintocoursevalues(‘332′,’语言在’,’234′)创建存储过程ALTER

    2022年10月21日
  • 奇怪的现象:touchesBegan: 与UITapGestureRecognizer手势没有人响应 以及set方法的妙用

    奇怪的现象:touchesBegan: 与UITapGestureRecognizer手势没有人响应 以及set方法的妙用本打算实现一个点击按钮弹出一个landKindView然后点击屏幕其他部分时移除这个VIew,没想到的是,出了诸多不可思议的问题。在给这个控制器的View添加手势时,然后居然拦截不到,touchesbegin方法,然后又试了下添加tapGesture,依旧是没有反应。然后我试着在touchesBegin方法中 实现[supertouchesBegins….];依旧是没有任

  • Python判断字符串是否包含子字符串

    Python判断字符串是否包含子字符串Python如何判断一个字符串是否包含指定字符串?本文介绍Python判断一个字符串是否包含指定子串的4种方法。具有一定的借鉴价值。第一种使用in运算符最简单的方法是通过python的in运算符str=”Everyonehasaworld,quiteandlonely!”result=”world”instrresult2=”hello”i…

  • phpstorm激活码2021.5【注册码】[通俗易懂]

    phpstorm激活码2021.5【注册码】,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • Python详细知识体系总结(2021版)「建议收藏」

    Python知识体系总结(持续更新ing)本文专注整理一些有关Python学习的知识体系,不定期更新。整理的Python知识体系主要包括基础知识,Python热门的应用方向,推荐书籍,FAQ以及一些常见面试题目,包含了作为一个Python全栈工程师以及数据分析工程师在开发工作和学习中需要用到或者可能用到的绝大部分知识。希望大家可以根据自己感兴趣的方面多多学习。另:写的博客如有错误或者疏忽的地方,还望各位大佬指点,在此表示感激不尽。文章目录Python知识体系总结(持续更新ing)面试题汇总Pyth

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号