前言
昨天(4月19日),谷歌发布了一个适用于IOS和Android应用程序PhotoScan(中文名: 照片扫描仪),它可让您仅使用智能手机将照片打印数字化。
PhotoScan的主要功能之一是能够从打印件中去除眩光,这些打印件通常具有光泽和反光性,它们的塑料相册页面或玻璃覆盖的相框也会造成反光。 为了创解决这个问题,我们开发了独特的计算机视觉和图像处理技术,可以仔细对齐和组合几个稍微不同的打印图片,以将眩光与图像分开。
Google 相册全新推出照片扫描仪应用,只要使用手机摄像头就能扫描并保存最心爱的冲印照片。
1.照片完美、无眩光
只能通过拍照修图已成为过去时。只要进行扫描,就能制作效果更佳的数字照片,无论照片在哪里都不成问题。
- 通过简单的分步流程进行扫描,轻松获取无眩光的扫描内容
- 根据边缘检测进行自动剪裁
- 透视校正功能可矫正扫描照片中歪斜扭曲的视角
- 无论扫描角度如何,智能旋转功能都摆正照片
2.数秒内完成扫描
轻松快捷地截取您最心爱的照片,节省修改照片的时间,好好回味一下青春年少时的非主流造型。
Google 相册能让照片安全无虞且便于搜索
通过免费的 Google 相册应用备份您的扫描照片,不仅安全可靠、便于搜索,而且井井有条。借助影片、滤镜和高级修片控件,可以让扫描的照片愈发生动有趣。只需发送一个链接,就能与任何人分享照片。
左:物理打印的常规图片。
右:PhotoScan的无眩光输出
正文
当拍摄照片的单张照片时,确定图片的哪些区域是实际照片,哪些区域是眩光,这是程序面临的主要挑战。 此外,眩光可能经常使图像中的区域饱和,使得那些区域无法看到或恢复其下面的照片的部分。 但如果在移动相机的同时拍摄照片的照片,眩光的位置往往会改变,覆盖照片的不同区域。 大多数情况下,照片的每个像素在至少一张照片中可能不会被眩光所覆盖。 我们可以组合多张照片拍摄的不同角度的照片去除眩光。 面临的挑战是,图像需要非常准确地对齐,以便正确地组合它们,并且该处理需要在手机上非常快速地运行以提供即时的体验。
左:捕获的输入图像(共5个)
右:如果我们稳定照片上的图像,我们可以看到只有眩光移动,覆盖照片的不同部分。
注意:没有一个图像是无眩光的。
我们的技术灵感来自于我们早前在SIGGRAPH 2015上发表的作品,我们称之为“obstruction-free photography(无障碍摄影)”。 它使用的原理是从视野中去除障碍物。 然而,我们最初提出的算法是基于生成模型,其中主场景和障碍层的运动和外观被估计。 虽然该型号相当强大,可以清除各种障碍物,但是在智能手机上运行的计算的费用太贵了。 因此,我们建立了一种更简单的模型,将眩光视为异常值,只尝试注册底层的无眩光照片。 虽然这种模式更简单,但是由于注册需要高度准确和稳健,所以这个任务仍然是非常具有挑战性的。
工作原理
从用户移动相机拍摄的一系列照片开始。 第一张图片 - “参考框架” - 定义了所需的输出视点。 然后,用户被指示需要另外四个帧。 在每个附加帧中,我们检测稀疏特征点(我们计算哈里斯角上的ORB特征),并使用它们来建立将每个帧映射到参考帧的同位处。
左:检测到的特征在参考帧和每个其他帧(左)之间匹配
根据估计的同形异义(右)匹配。
虽然这种技术可能听起来很直接,但是有一种捕捉—-同态性只能对齐平面图像。 但是打印的照片通常不是完全平坦的(如上所示的例子)。 因此,我们使用光流 - 运动的基本计算机视觉表示,其在两个图像之间建立像素点映射,以校正非平面。 我们从单体对齐的帧开始,并计算“流场”以扭曲图像并进一步优化注册。 在下面的示例中,请注意左边照片的角落在注册框架之后,只能使用同型字,缓慢地“移动”。 右侧显示如何使用光流优化注册后照片可以更好地对齐。
原图(左)和使用光流的细化之后(右)的比较
注册的差异是很微小的,但对最终结果有很大的影响。 请注意,结果中多少小的错位显示为重复的图像结构,以及如何通过额外的流程细化减轻这些工件。
原图(左)和使用光学流动细化去除眩光结果之间的比较。 在结果中,仅使用同位素(左),注意人的眼睛,鼻子和牙齿周围的物品,以及织物上重复的茎和花瓣。
这也是一个难点,就是使光流成为一种自然而然的算法,在手机上工作非常快。 代替在传统上计算每个像素处的光流(计算的流向量的数量等于输入像素的数量),我们通过较少数量的控制点表示流场,并且在 作为控制点运动的函数的图像。 具体来说,我们将每个图像划分成平铺的,不重叠的单元格,以形成网格,并将单元格中的像素的流程表示为包含单元格的四个角的流的双线性组合。
网格光流网格设置。 p表示为封装它的单元格的四个角点的双线性插值。
左:在其中一个框架上计算的流场的图示。
右:流色彩编码:分别由色相和饱和度表示的取向和幅度。
这使要解决的问题少了很多,因为现在计算的流向量的数量等于网格点的数量,其通常远小于像素数。 这个过程在本质上类似于Szeliski和Coughlan(1997)中描述的基于花键的图像配准。 通过这种算法,我们可以在Pixel手机上将光流计算时间减少约40倍!
叠加在(清洁)参考系上的单色注册的帧和流动精化的扭曲帧(使用上述流场)之间的翻转示出了所计算的流场如何将图像部分“捕捉”到参考帧中的相应部分优化注册。
最后,为了组合无眩光输出,对于注册帧中的任何给定位置,我们检查像素值,并使用求最小值算法来获得最暗的观察值。 更具体地说,我们计算最小亮度超过注册帧的期望值,将较少的权重分配给靠近(翘曲)图像边界的像素。 我们使用这种方法,而不是直接在两帧之间计算最小值,因为每帧的相应像素可能具有略微不同的亮度。 因此,由于突出图像之间的边界处的突然强度变化,每像素最小值可能产生可见的接缝。
常规最小值(左)与软最小值(右)相比。
该算法可以支持各种扫描条件 - 无光泽和光泽打印,照片内部或外部相册,杂志封面。
1 | 输入 注册 输出(无眩光) |
为了获得最终的结果,谷歌照片团队开发了一种自动检测和裁剪照片区域的方法,并将其整理为正面。 由于透视失真,扫描的矩形照片通常在图像上看起来是四边形。 该方法分析图像信号,如颜色和边缘,以计算出扫描图像上原始照片的准确边界,然后应用几何变换将四边形区域修正为原始的矩形,产生高质量,无眩光数码版的照片。
总的来说,所有这些操作都在你的手机上几乎瞬间完成! 要给PhotoScan一个尝试,请在IOS或Android上下载该应用程序。