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 ------------------------------------ ...
随机推荐
- SQL 不常用的一些命令sp_OACreate,xp_cmdshell,sp_makewebtask
开启和关毕xp_cmdshell EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cm ...
- springboot开发流程
public class User { private int id; private String username; private String password; private int ag ...
- 第三次spring会议
昨天天所做之事: 我用C#用DelectText对行数进行了定义,刚开始写代码有点无从下手. 遇到的问题:刚开始用datagridView进行了文本的输入,但是它更适合EXCEL之类的数据计算不符合我 ...
- JavaScript:void(0)使用介绍
1.点击链接后不做任何事情(为防止点击链接后跳转到页首,onclick事件return false即可) <a href="javascript:void(0);" > ...
- SWPU-ACM集训队周赛之组队赛(3-11)G题题解
点这里去做题 水水水水水,不难发现如下表 t 1 2 3 4 v 1 3 5 7 s 1 4 9 16 明显s=t*t 题目中对10000取模即取后四位,即对1000取余 #include<st ...
- delegate的Invoke和BeginInvoke方法
C#中的控件和delegate委托方法都有Invoke和BeginInvoke方法,控件的这两个方法网上讲得很多, 这里就不多说了,下面讲一下delegate的Invoke和BeginInvoke方法 ...
- Unity面试题2
1.Animation.CrossFade命令作用是(C) A 动画消失 B动画转换 C东环的淡入为其他动画 2.Application.loadedLevel命令为(A) A加载关卡 B异步加载关卡 ...
- 背水一战 Windows 10 (66) - 控件(WebView): 监听和处理 WebView 的事件
[源码下载] 背水一战 Windows 10 (66) - 控件(WebView): 监听和处理 WebView 的事件 作者:webabcd 介绍背水一战 Windows 10 之 控件(WebVi ...
- Java 大数值类型执行精确计算
简介 如果基本的整数和浮点数精度不能够满足需求,那么可以使用 java.math 包下两个很有用的类:BigInteger 和 BigDecimal.这两个类可以处理包含任意长度数字序列的数值,Big ...
- 第二十五节:Java语言基础-面向对象基础
面向对象 面向过程的代表主要是C语言,面向对象是相对面向过程而言,Java是面向对象的编程语言,面向过程是通过函数体现,面向过程主要是功能行为. 而对于面向对象而言,将功能封装到对象,所以面向对象是基 ...