社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

快门背后的机器学习:实时 HDR+ 和双重曝光控制

谷歌开发者 • 3 年前 • 462 次点击  

文 / Google Research 软件工程师 Jiawen Chen 和 Sam Hasinoff


高动态范围 (HDR) 成像技术是一种用于拍摄明暗跨度(从暗部阴影到亮部高光)较大场景的方法。在 Pixel 手机上,HDR 成像背后的引擎HDR+ 高速连拍摄影技术,其中涉及专门捕获欠曝光的快速连拍图像,对图像进行融合,并以能够保留整个色调范围中内部细节的方式对其进行渲染。最近以来,HDR+ 技术面临的一项挑战是设备无法实时计算(即每秒 30 帧),这会导致取景器中呈现的影像与最终结果不符。例如,在取景器中观察到的天空是亮白色的,而实际使用 HDR+ 技术摄得的天空却是蓝色的。

  • HDR 成像背后的引擎
    https://ai.googleblog.com/2018/02/introducing-hdr-burst-photography.html

  • HDR+ 高速连拍摄影技术
    https://hdrplusdata.org/


从 Pixel 4 和 4a 开始,我们使用基于机器学习的 HDR+ 近似方法对取景器进行优化,我们称之为 实时 HDR+。这一技术提供了最终效果的实时预览,使 HDR 成像更加可预测。我们还打造了 双重曝光控制,将经典的“曝光补偿”滑块拆分为两个控件,分别用于调整阴影和高光的呈现效果。实时 HDR+ 与双重曝光控制相结合,为 HDR 成像提供了实时的更有表现力的控制能力。

Pixel 4 和 4a 搭载的实时 HDR+ 技术可以帮助用户使用所见即所得的取景器进行拍摄,呈现出与最终结果非常接近的效果



HDR+ 效果

当用户在 Pixel 相机应用中按下快门时,相机将拍摄 3-15 张欠曝光图像。这些图像会被对齐并融合以针对阴影部分进行降噪,生成一张 14 位宽的“线性 RGB 图像”中间结果,其像素值与场景亮度成正比。但图像的“色调映射”算法才是使 HDR+ 图像具有标志性效果的技术,它可将像素位宽缩小到 8 位并使图像适于显示。

  • 降噪
    https://ai.googleblog.com/2018/11/night-sight-seeing-in-dark-on-pixel.html


请参见以下几张摩托车手的背光照片。虽然线性 RGB 图像在较暗的摩托车和明亮的天空区域都包含细节,但却因动态范围过大而无法呈现出这些细节。呈现更多细节的最简单方法是将一个“全局曲线”应用至图像,将亮度为特定值的全部像素重新映射到某个新值(直方图均值化)。但是,对于同时包含阴影和高光细节的 HDR 场景,没有任何单个曲线能够生成令人满意的效果。

色调映射线性 RGB 图像的不同方法:(a) 原始的“无色调映射”图像;(b) 用于优化天空的全局曲线;(c) 用于优化被摄对象的全局曲线;(d) 保留任何部位细节的 HDR+。在二维直方图中,亮度越高的区域表示有更多指定输入亮度的像素被映射到同一输出。形状出现重叠表明不能使用单条曲线来建立关系模型。照片由 Nicholas Wilson 提供


与应用单条曲线相比,HDR+ 使用 局部 色调映射算法可确保最终结果在各处均包含细节,同时保持边缘与纹理使得成像效果更加自然。基于全局亮度、局部纹理和噪点数量等因素,使得不同的曲线能有效应用于不同的区域。但问题是,HDR+ 技术速度过慢而无法在取景器中实时运行,因此需要为实时 HDR+ 技术寻找一种替代方法。



为实现实时 HDR+ 而生的局部近似曲线

使用单个色调曲线无法为整个图像生成令人满意的结果,但是对于较小的区域呢?请参见下图中的小尺寸红色图像块。尽管该图像块中同时包含了阴影和高光,但是输入和输出亮度之间的关系呈平滑曲线。此外,曲线的变化是渐进式的。对于蓝色图块,向右滑动十个像素后,图像内容和曲线都与红色贴图相似。虽然近似曲线适用于小尺寸图块,但在较大的图块中却存在问题。对于较大的黄色贴图,输入/输出关系则更为复杂,使其难以近似为单个曲线。

(a) 输入和 HDR+ 结果;(b) HDR+ 对小贴图(红色)的效果近似为平滑曲线;(c) 对于附近的蓝色贴图,关系几乎相同;(d) 但是,如果贴图过大,则单条曲线将不再有效


为了应对这一挑战,我们将输入图像拆分为大小约等同于上方红色贴图的“图块”,并为每个图块使用一条曲线以实现近似 HDR+效果。由于这些曲线的变化是渐进式的,因此在曲线之间实施融合便易于达到近似的最佳曲线的效果。为了渲染像素,我们分别采用距离最近的四个图块所对应的曲线,然后根据与各个图块中心点之间的距离融合结果。


与 HDR+ 相比,该算法特别适合 GPU 。由于每个像素的色调映射可以独立计算,因此该算法也可以并行执行。此外,图像的呈现非常节省内存:仅少量的图块就足以在取景器中呈现 HDR+ 局部色调映射效果。


为了计算局部曲线,我们使用一种名为 HDRnet 的机器学习算法,这一深度神经网络可以基于线性图像来预测近似于该图像 HDR+ 效果的每个图块的曲线。由于其紧凑的架构,以及基于输入图像的低分辨率采样来预测高分辨率取景器的曲线,因此该技术的运行速度也很快。我们在数以千计的图像上训练 HDRnet,以确保其在各种场景下都能正常工作。

HDRnet 与 HDR+ 处理具有极大明暗跨度的挑战性场景的对比图:在取景器分辨率下,结果非常相似。照片由 Nicholas Wilson 提供



双重曝光控制

HDR+ 旨在自动生成令人愉悦的 HDR 图像,而无需手动控制或后期处理。但是,有时 HDR+ 的表现效果可能不符合摄影师的审美要求。虽然可以使用图像编辑工具来适度补救,但是 HDR 图像的可编辑性并不高,因为成像过程已固化在最终的 JPG 格式文件内。为了最大程度提高可编辑性,用户可以在每次拍摄时保存 RAW 图像(在应用中通过选项以启用该特性)。但是,该过程容易使摄影师错过精彩瞬间,并且需要 RAW 编辑工具的专业知识以及额外的存储空间。


实现艺术控制的另一种方法是将影像实时呈现在取景器中。许多摄影师都熟悉使用曝光补偿滑块来调节图像的亮度。但是,整体的亮度调节对于 HDR 摄影的表达则不够充分。至少需要两个控件来分别控制高光和阴影。


为了解决这个问题,我们引入了双重曝光控制。当用户点击 Live HDR+ 取景器时,将出现两个滑块。“亮度 (Brightness)”滑块的作用类似于传统的曝光补偿,用于改善图像整体曝光。此滑块可用于在拍摄明亮天空时恢复更多细节,或故意淡化背景并使被摄对象更清晰可见。“Shadows (阴影)”滑块仅作用于暗部区域 - 它的工作方式是更改色调映射而非曝光度。此滑块对于高对比度场景最为适用,使用户能够提亮阴影以显示更多细节,或压低阴影以打造剪影效果。

上图为在室外 HDR 场景中使用双重曝光控制的屏幕截图,下图为 HDR+ 成像结果。照片由 Florian Kainz 提供


以下是我们使用双重曝光控制所能实现的一些引人入胜的艺术表现样张。

使用双重曝光控制拍摄的不同表现手法的样张,此处查看各个图像。照片来源:Jiawen Chen、Florian Kainz、Alexander Schiffhauer

  • 此处
    https://photos.app.goo.gl/9QrvhXyJVKKCvGWh6


双重曝光控制使您能够对同一对象灵活地拍摄出截然不同的版本。它们不受限于复杂的 HDR 场景,因此不要害怕尝试在不同的对象和照明条件下展现您的创意。您可能会惊讶于这些滑块为您的拍摄带来的变化!



致谢

实时 HDR+ 和双重曝光控制是 Google Research、Android、硬件和 UX 设计团队共同合作的成果。主要贡献者包括:Francois Bleibel、Sean Callanan、Yulun Chang、Eric Chen、Michelle Chen、Kourosh Derakshan、Ryan Geiss、Zhijun He、Joy Hsu、Liz Koh、Marc Levoy、Chia-Kai Liang、Diane Liang、Timothy Lin、Gaurav Malik、Hossein Mohtasham、Nandini Mukherjee、Sushil Nath、Gabriel Nava、Karl Rasche、YiChang Shih、Daniel Solomon、Gary Sun、Kelly Tsai、Sung-fang Tsai、Ted Tsai、Ruben Velarde、Lida Wang、Tianfan Xue、Junlan Yang。


更多 AI 相关阅读:



Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/73213
 
462 次点击