2017年4月19日,我们发布了适用于iOS和Android的移动应用程序
PhotoScan的
更新,该
更新使您可以仅使用智能手机将纸质照片数字化。 PhotoScan的主要功能之一是能够消除照片(它们通常打印在有光泽,高反光的纸张上)以及塑料相册页面或玻璃下的照片中的眩光。 为此,我们开发了计算机视觉和图像处理技术的独特组合,可以准确地组合并合并照片的几张略有不同的图片,并将照片中的高光与图像本身分开。

从一张照片很难自动确定图像的哪些部分是原始照片,哪些是高光。 此外,眩光可以照亮照片的某些区域,因此,将无法还原隐藏在眩光下的那部分。 但是,如果您通过移动相机拍摄几张照片,镜头光晕会发生变化-它会在照片的不同部分移动。 在大多数情况下,每个单独的像素至少不会在其中一张图片中张开。 尽管所有图片都不会缺少眩光,但是我们可以合并以不同角度拍摄的打印照片的几张图片,从而消除眩光。 困难在于图像必须非常精确地对齐,以便正确组合,并且此处理应在智能手机上足够快地执行,以获得几乎即时的效果。
我们的技术灵感来自我们先前在
SIGGRAPH 2015上发表的工作,我们称之为“
无障碍摄影 ”。 它使用类似的原理来消除视野中的各种干扰。 但是原始算法基于生成模型,在该模型中评估了主场景的运动和外观以及干扰。 此模型的功能强大,并且能够消除各种干扰-但计算量太大,无法在智能手机上使用。 因此,我们开发了一种简化模型,将耀斑称为一种异常并试图识别其下方的图像。 尽管简化了模型,但仍然是一项非常艰巨的任务-识别必须准确且可靠。
如何运作
我们从移动相机的用户拍摄的照片快照开始。 第一个快照-“参考帧”-确定所需的快照最终外观。 然后建议用户再拍摄四张照片。 在每一帧中,我们确定
关键点 (我们使用
Harris算法确定的角度计算
ORB的
属性 ),并使用它们来确定将每个后续帧映射到参考帧的
同构图。
这项技术看似简单,但有一个缺点-单应线只能比较平面图像。 但是纸质照片通常不平坦(如上例所示)。 我们使用
光流 -计算机视觉中运动的基本表示形式,在两个图像之间建立逐像素的对应关系,校正与平面的偏差。 我们从使用单应性对齐的帧开始,并计算“流场”以拉直图像并进一步调整。 请注意,在下面的示例中,仅使用单应性定义帧后,左照片的角会“移动”一点。 在右侧,您可以看到在应用光流后如何更好地对齐照片。
差异不是很明显,但是会显着影响最终结果。 注意小的差异如何以重复的图像片段形式表现出来,以及如何通过使用流进行额外的细化来消除这些缺陷。

在这种情况下,困难在于使最初工作缓慢的光流算法在智能手机上的运行速度更快。 代替了传统上每个像素的流量计算(向量的数量等于像素的数量),我们使用较少数量的控制点来构造流场,并根据控制点的运动记录图像中每个像素的运动。 即,我们将每个图像划分为不相交的单元,这些单元形成粗粒度的晶格,并在单独的单元中将像素流表示为流和包含该单元的单元的四个角的
双线性组合 。


然后剩下的是解决一个更简单的问题,因为流矢量的数量现在等于通常比像素小得多的晶格点的数量。 此过程类似于样条
图像处理 。 使用此算法,我们能够将Pixel手机的光通量计算时间减少约40倍!
最后,为了创建没有眩光的最终图像,对于帧的每个部分,我们采用像素值并计算“柔和最小值”以找到最暗的选项。 具体来说,我们从可用帧中计算出预期的最小亮度,并为更靠近图像弯曲边缘的像素分配较小的权重。 由于不同帧中的相同像素可能具有不同的亮度,因此我们使用此方法代替直接计算最小值。 由于在重叠图像边界处强度的急剧变化,逐像素最小值可能导致出现可见的关节。

该算法能够在各种扫描条件下工作-哑光和有光泽的照片,相册中的照片以及没有封面的照片,杂志封面。
为了计算最终结果,我们的团队开发了一种方法,该方法可以自动确定图像的边界并将其引导到矩形视图。 由于透视变形,扫描的矩形照片通常会变成非矩形的四边形。 该方法分析图像信号,颜色,边缘以找出原始照片的确切边界在哪里,然后应用几何变换使图像变直。 结果是没有眩光的高质量数字版纸质照片。

通常,很多事情在幕后发生,所有这些几乎都能在您的手机上立即起作用! 您可以通过下载适用于
Android或
iOS的应用程序版本来试用PhotoScan。