Tech Talk | 还原照片不同亮度范围细节——RAW HDR技术

news2024/9/21 14:39:26

拍照时,你是否遇到过这些情况呢?

拍摄的成片暗区过暗,高亮区域过曝

逆光拍摄中,会出现“鬼影”

暗部噪声偏大导致图像出现瑕疵

.......

照片的高光和暗区细节得总是不到完美呈现,这是所有拍摄设备都会出现的问题。那么我们该怎么解决和改善才能拥有愉快和出色的摄影体验呢?答案是:通过RAW HDR(高动态范围)算法技术。

RAW HDR技术:是通过使用传感器直出的raw数据,减少isp(图像信号处理)处理过程中的画质损失,能更好实现影调、噪声和鬼影等方面的优化,有效提升了照片的动态范围和画质效果。照片能够同时保留拍摄场景中的高光和暗部的细节,还原人眼中所能看见的真实场景图,从而给用户带来更高质量的摄影体验。

“ 

本期的Tech Talk,我们邀请到了小米AI实验室视觉算法团队的工程师——程璞,为大家介绍小米手机中,RAW HDR方案的整体结构和算法原理。

cb0c33d5b22e51a9e26a01488091fa52.jpeg

硬核指数:⭐⭐⭐⭐⭐

趣味指数:⭐⭐⭐

阅读时长:约9分钟

一、什么是HDR

HDR是“High Dynamic Range” (高动态范围)的缩写,其中动态范围是指拍摄场景中最亮点和最暗点的亮度比值。当拍摄场景的动态范围很高时,受限于传感器以及图像编码等因素,照片可能无法呈现所有信息。典型的例子如下图所示,场景中的高光区域可能会过曝,而暗区则可能会出现死黑的现象。两个区域均难以看清细节。

2333d957e7081224a48dd462e77d3835.png

HDR就是通过一定的技术手段,让照片中尽量包含高亮区域和暗区的细节,从而提升照片的画质效果。

57a8a24bedd0270c41675c7ae66add2f.png

在拍摄高动态范围场景时,照片之所以无法呈现场景高亮和暗区的信息,一方面是受限于传感器:真实世界的动态范围是很高的,而传感器能感知的范围是有限的;另一方面则跟图像的编码位数有关,比如8bit的图像能表示的范围是0~255,超过这个范围则会出现过曝等现象。

针对传感器的限制,在拍照时可以使用包围曝光的技术,即通过调整曝光时间、iso等参数同时采集不同亮度范围的图像帧,这样多个图像帧组合在一起就可以包含更多亮度范围的信息。如下图所示,我们可以采集正常曝光图像帧、长曝光图像帧、短曝光图像帧等三帧图像。其中正常曝光帧用来作为参考帧,提供基准亮度;长曝光图像帧可以提供暗区的信息,使得暗区的细节也能在照片中呈现;短曝光帧则可以提供高亮区域的信息,尽量减少照片中的过曝区域。

5eda5d65dea9fc071d45f7182d8c83c4.png

另外,为了表示整个亮度范围的信息,一般需要使用高比特位数的图像,而我们最终照片的比特位数较低,所以需要通过HDR算法,使得低比特位的图片也能尽可能显示出整个亮度范围的信息和细节,且比较真实自然,从而改善高动态范围场景的拍照体验。

二、RAW HDR方案

 >>>> 2.1 整体框架

我们在小米手机中使用的是RAW HDR方案,即使用传感器直出的数据进行HDR的相关处理。

a56196fb086f1ebdf4fff6137997a942.png

如上图所示,与yuv数据相比,raw数据没有经过isp中去马赛克、色调映射、颜色和对比度调整、降噪和锐化等各种复杂处理,因此raw数据的噪声模型更为简单准确,而且不同曝光的图像之间亮度关系基本是线性的,这就降低了图像降噪、亮度对齐等处理的难度。同时,raw数据的bit位数一般也会高于yuv数据,这样更有利于提升图像的动态范围,并可以设计更为灵活有效的色调映射等算法方案。

当然,raw数据也会给算法处理带来一定的困难。比如,raw数据比较原始,其噪声也会比较大(见下图),需要在HDR算法处理的过程中设计合理的降噪方案;同时,raw数据为bayer格式的,需要去马赛克后才能得到三通道信号,这也会给图像对齐等操作带来一定的困难。

db0602f9c532cf0c90e20ab2e24c55fa.png

(a)raw数据中的噪声

4c5454f15e2887c294537a6b011540a0.png

(b) raw数据为bayer格式

我们RAW HDR方案的整体框架如下图所示。输入中会有多帧正常曝光帧和其他曝光帧。多帧正常曝光帧会经过mfnr(多帧降噪)和单帧降噪等模块,得到一帧去除了噪声的正常曝光帧。其他曝光帧则首先经过单帧降噪模块进行噪声的去除,然后会对齐到正常曝光帧。

经过上述处理的正常曝光帧和其他曝光帧会进入合并模块。该模块会融合不同曝光帧的信息,从而得到高动态范围的图像。这个图像是高比特位的,会经过色调映射模块得到最终的结果。

e3b4cf7cbd58ec846e0cf39efafcd1e5.png

 >>>> 2.2 降噪模块:去除图像中的噪声

2.2.1 多帧降噪

多帧降噪模块主要通过融合多帧的信息以去除图像中的噪声。

由于相机和拍摄物体的移动,多帧图像之间需要进行对齐操作。常用的对齐方式有两种。一种是全局对齐,即假设两帧之间的移动满足一种全局变换的对齐方式。这种对齐方案比较简单,但在很多场景下,全局对齐的模型并不能有效建模两帧之间的移动,从而导致欠佳的对齐效果。另一种是局部对齐,该方式会考虑两帧之间的局部移动。典型的局部对齐方案有光流、分块匹配等。局部对齐一般能更好地对两帧间的移动进行建模,但存在对噪声和对齐初值比较敏感等问题。

我们在对多帧进行对齐的过程中会综合使用全局对齐和局部对齐的方法。首先进行基于特征点匹配的全局对齐,然后再进行局部对齐。局部对齐会对图像进行分块,并对各分块进行对齐。这样可以结合两种对齐方案的优点,取得不错的对齐效果。典型结果如下图所示,可以看到,经过对齐后,两帧间的差异得到明显减小。

32a5fe7577c434cc5dff9258ab0403df.png

(a)两帧输入图

a016470d01d5d398a10dce631a8ac347.png

  (b) 对齐前两帧差异                              (c) 对齐后两帧差异

对齐之后我们需要对多帧进行融合。我们采用加权平均的方式实现融合,权重主要取决于对齐后当前帧与参考帧的差异。由于遮挡、算法局限等原因,图像之间无法实现完全的对齐,将权重设为跟差异有关可以避免融合后图像中鬼影的出现。

2.2.2 单帧降噪

我们主要使用深度学习的方案进行单帧降噪。与双边滤波、nlm等传统降噪方案相比,深度学习方案一般能实现更好的降噪效果,特别是对噪声比较大的场景。

由于去噪模型是在手机端运行的,在模型设计时需要考虑模型的大小和运行速度等因素。我们采用了一个较小的基于改进unet的模型结构,同时会对模型进行量化加速。通过离线训练,降噪模型可以在保证模型运行速度的前提下,有效去除不同场景的噪声。典型的例子如下图所示。

4aeb5aa64976116913839ee25d5ea359.png

 (a)降噪前                                            (b) 降噪后

 >>>> 2.3 多帧合并模块:融合不同曝光图像的信息

其他曝光帧在经过单帧降噪和对齐(方案与mfnr中的对齐类似)后,会与正常曝光帧进行合并,得到高动态范围的图像。我们使用加权平均的方式实现多帧间的合并。在合并时按照尽量使用过曝时间更长帧的原则来设计权重。

考虑到短曝光帧的噪声往往高于长过曝帧,这样设计权重可以减少合并帧的噪声,也可以缓解参考帧非过曝区域的鬼影问题。对于参考帧过曝的鬼影区域,我们会使用inpainting进行填充。如下图所示,经过多帧合并模块,我们可以得到一帧包含了较大动态范围信息的高比特位图像。

d3408d665fbd8af470b5cdd4d3010edf.png

 >>>> 2.4 色调映射模块:对亮度范围进行压缩

86adfc61ebee30b3c2958a5414ce96e8.png

色调映射的目标是使得低比特位的图片也能尽可能显示出整个亮度范围的信息和细节。常用的色调映射方案主要包括全局色调映射和局部色调映射两种方式。全局色调映射会对图像的所有像素使用一条映射曲线进行变换。该类方案实现简单,但容易导致图像细节的丢失。当场景动态范围越大时,细节丢失的现象就越容易出现。与全局方案不同,局部色调映射在进行变换时会考虑图像的局部信息,可以避免细节丢失等问题的出现,但也可能会引入亮度反转等问题。

我们主要使用多尺度融合的方案以实现色调映射的目标,即通过对多帧合并模块输出的高动态范围图像乘以不同的gain值来模拟不同曝光帧,进而利用多尺度融合算法得到最终的结果。

123de30a4fe776af83111470cefefea2.png

(a)徕卡经典                                    (b)徕卡生动

我们实现了对徕卡经典和徕卡生动两种风格的支持,同时使用了AI场景识别、动态提亮、对比度增强等技术,使得最终的照片能够在保证高动态范围的同时实现适宜的明暗对比和自然的亮度过渡。典型场景下的照片如下图所示。通过合理的参数设计和方案优化,整体画质效果得到较大提升。

31fe9e7d52c9bd83d2c84c6642bf2317.png

eeac40b5faed9abf4b8b4b9d903e60c3.png

(a) HDR off图

6523801604090a2ccf6233427fae5d5b.png

5c8ab60c9211cee66f38d04340f06897.png

(b) HDR on图

三、技术未来演进

HDR拍照能够还原拍摄场景中的高光和暗部细节,有效提升照片的动态范围,在大多数手机中已经被广泛使用。相信随着算法、硬件等技术的发展,未来HDR拍照能够带来更好的拍照体验:

  1. 实现更高的动态范围,从而可以还原更多亮度范围的细节,呈现更真实的场景。

  2. 更加智能化。通过更多地使用AI技术,进一步提升照片质量,并更好地识别场景和物体类别,实现对不同场景的自适应。

  3. 更快的处理速度,从而使用户可以更快地拍摄照片。

我们后续将持续改进HDR方案的效果,争取为用户带来更好的高动态范围场景的拍照体验。

你还有哪些希望了解的技术?欢迎在评论区留言,我们将继续邀请工程师就大家关心的话题进行分享。更多硬核知识,请持续关注小米Tech Talk!

5d549a1661845ae546f0479d4078e89b.gif

8fb186f79dc7bab5be3740dacf149d92.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/512050.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

淘宝拍立淘多码识别方案总结

本文通过拆解原始问题、发散思路优化等方式,记录了扫一扫从单码到多码识别的技术框架改造及多码识别率优化方案。其中涉及解码SDK的能力、码处理技术链路、码转换算法、降低漏检率策略等设计与实现。 背景与挑战 多码即在同一个界面中同时存在多个条码或二维码&…

国产自研数据库是更新换代首选

伴随着数字经济的高速发展,越来越多的企业都意识到了数据是现代企业最具价值的资产。而与之相对应的是,数据库的重要性也随之水涨船高。 近年来,在席卷全球的云原生大潮中,数据库产业迎来了极为重要的转型升级。特别是在自主创新的…

JVM系列-第7章-对象的实例化内存布局与访问定位

对象的实例化内存布局与访问定位 对象的实例化 大厂面试题 美团: 对象在JVM中是怎么存储的?对象头信息里面有哪些东西? 蚂蚁金服: 二面:java对象头里有什么 对象创建的方式 new:最常见的方式、单例…

真正的智能不仅仅是一个技术问题

智能并不是单一的技术问题,而是一个包括技术、人类智慧、社会制度和文化等多个方面的综合体,常常涉及技术变革、系统演变、运行方式创新、组织适应。智能是指人类的思考、判断、决策和创造等高级认知能力,可以通过技术手段来实现增强和扩展。…

【基础篇】nginx代理、动静分离、路径重写、高可用以及https配置

目录 正向代理 反向代理 负载均衡 负载均衡的策略 动静分离 alias与root UrlRewrite(资源路径重写) 防盗链配置 高可用配置 Https证书配置 安装BBS(开源界的鼻祖) 正向代理 用户知道nginx服务器的存在,与nginx服务器是一伙的。…

第五十五章 Unity 视频播放

使用视频播放器组件(Video Player)可将视频文件附加到游戏对象,然后在运行时在游戏对象的纹理上播放。首先,我们需要了解视频文件。视频文件的典型文件扩展名包括 .mp4、.mov、.webm 和 .wmv。可将许多不同的视频文件格式导入 Unity 中。Unity 将导入的视…

【Linux】编译器gcc/g++的使用

🏖️作者:malloc不出对象 ⛺专栏:Linux的学习之路 👦个人简介:一名双非本科院校大二在读的科班编程菜鸟,努力编程只为赶上各位大佬的步伐🙈🙈 目录 前言一、gcc/g的介绍二、程序的翻…

基于Vue CLI搭建vue3项目

前言 使用vue官方的脚手架进行搭建Vue CLI 注意:create-vue是基于Vite搭建项目,今天我们还是基于webpack搭建使用vue create 项目名称这个命令 一、步骤 1、 使用默认配置项还是自定义配置 这里我选择自定义 2、 选择需要配置的选项 根据个人进行…

ChatGPT不会很快接管人类工作,AI也不会免费打工

ChatGPT 等大模型的相继发布,让很多人倍感压力,害怕 AI 会很快接管他们的工作。对此,OpenAI 也曾发表过一项研究,表明 ChatGPT 的影响涵盖所有收入阶层,且高收入工作可能面临更大的风险。事实到底如何呢? …

IT知识百科:什么是下一代防火墙和IPS?

引言 随着网络攻击的日益增多,防火墙和入侵防御系统(Intrusion Prevention System, IPS)已成为企业网络安全的必备设备。然而,传统的防火墙和IPS已经无法满足复杂多变的网络安全威胁,因此,下一代防火墙和I…

Java集合(底层设计与实现)

Java集合(底层设计与实现) 集合体系 List接口 基本介绍 元素有序(即添加顺序和取出顺序一致)、且可重复支持索引有下标,下标对应元素在容器中的位置 ArrayList 基本介绍:底层由数组实现;在…

软考 软件设计师数据结构二笔记

查找基本概念 顺序查找 折半查找(二分查找顺序存储 ) 查找一个数据先给他折中,看看要查找的是不是大于中间值如果大于前面的就不用查找了 l和r指向对应下标 二分查找补充 上图描述如何构造这般查找判定树,一般都是下取整 …

PDF怎么转Word?简单几步轻松操作

PDF格式是目前最为流行的电子文档格式之一。但是,当我们需要编辑或修改PDF文件时,通常需要将其转换为Word文档格式。在本文中,我们将介绍如何将PDF文件转换为Word文档,并且列举PDF和Word文档操作上的差异。 PDF转Word文档操作方法…

19 树表的查找

文章目录 二叉排序树(BST)查找操作二叉排序树的存储结构查找实现查找算法分析二叉排序树的平均查找长度 插入操作删除操作代码实现 平衡二叉树(AVL)插入&旋转操作插入操作四种旋转情况代码实现 删除操作查找操作 介绍 树表查找是一种在树形数据结构中…

非法捕捞识别预警系统 yolov7

非法捕捞识别预警系统通过yolov7网络模型AI视频分析技术,非法捕捞识别预警系统模型算法能够对河道湖泊画面场景中出现的非法捕捞行为进行7*24小时不间断智能检测识别实时告警通知相关人员及时处理。Yolo算法采用一个单独的CNN模型实现end-to-end的目标检测&#xff…

应用网关Nginx+Https证书+内网穿透+图片切割水印+网关登录

一、开源项目简介 Apiumc Gateway 它一个工具等于 Nginx Https证书 内网穿透 图片切割水印 网关登录 Apiumc Gateway 是高性能的Web网关,它从底层Socket原始通信层开始,采用多线程、多任务模式从新构建Web服务,充分发挥当下多核的CPU的…

当代年轻人搞副业有多野?工资6000,兼职1W...

凌晨12:00,我被同做新媒体的闺蜜小冉震了出来。 这是投稿出去,第10086次没有回声。 那种无力感掐着我的脖子,感觉整个人要窒息了。 写稿,真的好难,我好想放弃。 可是,每月被花呗、信用卡、房租支配的恐惧却…

C++【模板进阶】

✨个人主页: 北 海 🎉所属专栏: C修行之路 🎃操作环境: Visual Studio 2019 版本 16.11.17 文章目录 🌇前言🏙️正文1、非类型模板参数1.1、使用方法1.2、类型要求1.3、实际例子:arr…

详解:三子棋以及N子棋的实现

三子棋以及N子棋的实现 初始化棋盘打印棋盘玩家下棋电脑下棋判断输赢主函数的实现(test.c)game.c的实现game.h的实现 铁汁们~今天给大家分享一篇三子棋以及N子棋的实现,来吧,开造⛳️ 实现流程: 1.游戏不退出,继续玩下一把&#x…

ML之FE:基于波士顿房价数据集利用LightGBM算法进行模型预测然后通过3σ原则法(计算残差标准差)寻找测试集中的异常值/异常样本

ML之FE:基于波士顿房价数据集利用LightGBM算法进行模型预测然后通过3σ原则法(计算残差标准差)寻找测试集中的异常值/异常样本 目录 基于波士顿房价数据集利用LiR和LightGBM算法进行模型预测然后通过3σ原则法(计算残差标准差)寻找测试集中的异常值 # 1、定义数据…