3DLut表实现log视频的后期调色原理
现在越来越多的视频或者图像拍摄设备支持log模式,比如大疆无人机的D-Log模式等等,log模式的起源和发展就不多做介绍,其在普通显示器上显示画面通常看起来是平坦的灰色,因此也常被称为log灰视频。
由于其能记录更多的图像细节,动态范围更广,使得后期调色可操作空间更大,所以今天就来说一说怎么用3Dlut表实现log图的调色。
首先,要准备Log图、3DLut表,如下:
1.Log图长酱紫的:
看起来确实是灰灰的,妹子也显得如此的忧郁。

2. 3DLut表内容是酱紫的:
用adobe的调色软件PR或者PS啥的都可以自己手动调色,然后保存一个lut表出来,以后所有图片都可以直接载入这个lut表自动实现调色,非常之方便。
以Adobe 的PR软件或者PhotoShop保存的.cube文件为例,当然我只是截取的一部分,下面还有很长很长,都是如下形式排布。
第一行是lut表的名称,第二行是lut表三个维度的尺寸,64就是指R,G, B三个分量分别只保存64个值。

3. 调色原理是酱紫的:
Lut全称是look up table,没错就是你熟悉的查找表,3D LUT就只指三维的查找表,这个三维是指RGB三个通道是独立的,查找的时候也是独立查找。那么怎么个查找法,简单来说就是给你一个像素点的RGB三个值,我从表里面找到新的RGB三个值,调色过程至此完成。
如果真有这个简单就好了,细想一下如果要把0-255所有三个通道的颜色值保存下来,数据量是256*256*256个,文件有点庞大了。因此为了减小数据的存储量,通常将256阶缩放到16阶或者64阶保存下来。上面的lut表就是64阶,存储的点个数就是64*64*64个。
lut表的具体排布含义如下:
R G B
0 0 0
0 0 1
0 0 2
0 0 3
........
0 0 63
0 1 0
0 1 1
0 1 2
0 1 3
......
0 1 63
.......
.......
.......
0 63 63
......
......
......
63 63 63
敲空格好难受,不过聪明的你一定看出来规律了,没错就是依次把三个通道的值一一列出来,想象一个三维的坐标轴,分别是R G B,取值范围都是0-63. 那么这个立方体内整点的个数就是64*64*64个。而表里面的值是将 0-63 归一化到 0-1,存为浮点数而已。
当我们得到一张log妹纸图片后,每次取一个像素点,假如RGB三个值(50,100,200),然后将其量化到0-63范围,其实简单做法就是直接除以4,得到(12.5, 25, 50),那么从查找表中找到R = 12, G=25 , B=50位置的三个浮点值(这个预先把lut表读入三维数组就可以了,根据索引下标取很简单),将三个浮点值再乘以255,扩展到0-255范围,得到一组新的RGB值,这个就是调色后的颜色值。
没错,就是酱紫。当然上面用的是最简单的最近邻插值方法,因为(12.5, 25, 50)直接取整是不准确的,输出的图片会有比较明显的条纹断层现象。可以使用稍微复杂点的三线性插值(三维空间中浮点周围的8个整数点插值)或者四面体插值,能够得到比较平滑的输出图。
4. 忧郁的妹纸调色后是酱紫的:
最近邻插值:

三线性插值:

四面体插值:

可以看到最近邻插值妹纸的衣服上有明显的条纹,后两种插值方法要改善很多,突然感觉也没那么忧郁了。
放两张其他LUT文件调色出的忧郁妹纸:


上面是博主用OpenCVC++写代码实现的,并不麻烦。
FFmpeg中集成有3DLutFilter,同样也是有这三种插值算法,命令行调用也非常方便,命令如下:
ffmpeg -i log.mp4 -vf lut3d="file=DK79.cube" out.mp4
3DLut表实现log视频的后期调色原理的更多相关文章
- 如何使用Camtasia给视频或者图片调色
喜欢摄影过着做视频的朋友一定知道,一张好看的照片或者一段精美视频的构成因素很多,取景本身肯定是个很重要的条件,相机的素质是非常重要的硬件条件,接下来的就是后期的编辑和处理了,而在后期处理过程中调色就显 ...
- 使用Camtasia来给视频或者图片调色
喜欢摄影和制作视频的朋友可能知道,一张好看的照片或一段精美视频的构成要素很多,取景本身就是很重要的条件,相机的硬件水平也是一个重要因素,接下来的就是后期的编辑和处理了,而在后期处理过程中调色是十分重要 ...
- 第三百七十四节,Django+Xadmin打造上线标准的在线教育平台—创建课程app,在models.py文件生成4张表,课程表、课程章节表、课程视频表、课程资源表
第三百七十四节,Django+Xadmin打造上线标准的在线教育平台—创建课程app,在models.py文件生成4张表,课程表.课程章节表.课程视频表.课程资源表 创建名称为app_courses的 ...
- QQ视频直播架构及原理 流畅与低延迟之间做平衡 音画如何做同步?
QQ视频直播架构及原理 - tianyu的专栏 - CSDN博客 https://blog.csdn.net/wishfly/article/details/53035342 作者:王宇(腾讯音视频高 ...
- QT5 QSS QML界面美化视频课程系列 QT原理 项目实战 C++1X STL
QT5 QSS QML界面美化视频课程系列 QT原理 项目实战 C++1X STL 课程1 C语言程序设计高级实用速成课程 基础+进阶+自学 课程2 C语言程序设计Windows GDI图形绘 ...
- Atitit 视频编码与动画原理attilax总结
Atitit 视频编码与动画原理attilax总结 1.1. 第一步:实现有损图像压缩和解压1 1.2. 接着将其量化,所谓量化,就是信号采样的步长,1 1.3. 第二步:实现宏块误差计算2 1.4. ...
- atittit.表单验证的实现方式以及原理本质以及选型以及自定义兼容easyui dsl规则的表单验证
atittit.表单验证的实现方式以及原理本质以及选型以及自定义兼容easyui dsl规则的表单验证 1. 需求,表单验证需要弹框式,但目前easyui ms绑定死了tooltip式样 1 2. 表 ...
- MS Sql Server 数据库或表修复(Log日志文件损坏的修复方法)
----------------- [1] use master go sp_configure reconfigure with override go ----------------- [2] ...
- 顺序线性表 ---- ArrayList 源码解析及实现原理分析
原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7738888.html ------------------------------------ ...
随机推荐
- python 的面相对象编程--对应c++
在python的面相对象编程中,我们常常在class中可以看到a(), _b() , __c(), __d()__这样的函数. 由于我是看廖雪峰老师的教程,廖老师为了简单起见,没有引入太多概念,我 ...
- Scrum冲刺阶段1
各个成员在 Alpha 阶段认领的任务 人员 任务 何承华 美化设计 部分后端设计 陈宇 后端设计 丁培辉 美化设计 部分后端设计 温志铭 前端设计 杨宇潇 服务器搭建 张主强 前端设计 明日各个成员 ...
- Transform Model
self attention Q=K=V :输入一个句子,那么里面的每个词都要和该句子中的所有词进行attention计算,目的是要学习句子内部词之间的依赖关系,捕获句子的内部结构. 首先,要buil ...
- navicat for mysql安装与破解
Windows系统的电脑 navicat for mysql 的安装软件以及破解包 方法/步骤 从网上下载需要用到的navicat for mysql 的安装软件以及破解包. 双击navi ...
- unigui结合JS方法记录
在js中界面上所有组件都当成html里来控制 .控制按钮事件 document.getElementById(MainForm.UniButton4.getId()).click(); 这个方法让J ...
- 移动端IM开发者必读(二):史上最全移动弱网络优化方法总结
1.前言 本文接上篇<移动端IM开发者必读(一):通俗易懂,理解移动网络的“弱”和“慢”>,关于移动网络的主要特性,在上篇中已进行过详细地阐述,本文将针对上篇中提到的特性,结合我们的实践经 ...
- 小鬼难缠--python小bug备忘
今天编译pyhon做人脸识别,遇到几个问题,做个记录吧. 编译报错: File "harrClassifier.py", line 17, in <module> fl ...
- LeetCode:145_Binary Tree Postorder Traversal | 二叉树后序遍历 | Hard
题目:Binary Tree Postorder Traversal 二叉树的后序遍历,题目要求是采用非递归的方式,这个在上数据结构的课时已经很清楚了,二叉树的非递归遍历不管采用何种方式,都需要用到栈 ...
- Maven Optional & Exclusions 使用区别
Optional和Exclusions都是用来排除jar包依赖使用的,两者在使用上却是相反. Optional定义后,该依赖只能在本项目中传递,不会传递到引用该项目的父项目中,父项目需要主动引用该依赖 ...
- Python模块学习 - Paramiko
简介 ssh是一个协议,OpenSSH是其中一个开源实现,paramiko是Python的一个库,实现了SSHv2协议(底层使用cryptography). 有了Paramiko以后,我们就可以在Py ...