首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优化思想:在图像上应用LUT (查找表)

优化思想:在图像上应用LUT (查找表)
EN

Stack Overflow用户
提问于 2017-04-21 06:36:54
回答 1查看 1.4K关注 0票数 0

我目前正在使用LUTs修改图像颜色的一些项目。

我的问题是我的程序没有优化..。

我的程序所做的:*打开一个LUT文件(.cube)并将值存储在内存中*在图像的每个像素上,使用三线性插值来使用LUT改变颜色。

我试过的是:*缩小图像,但这个过程仍然需要很多时间.

像Premiere或Davinci Resolve这样的程序如何才能将LUT应用到视频中,并在24 and时读取它呢?我的程序需要10s才能在jpg/DNG文件上应用LUT!

EN

回答 1

Stack Overflow用户

发布于 2018-04-28 08:56:44

最有效的方法是在GPU中,它可以在许多像素上同时执行许多简单的插值和查找指令。

本文:chapter24.html为您描述了算法,它非常简单,将其移植到OpenGL或另一种GPU脚本语言非常简单:

代码语言:javascript
复制
void main(in float2 sUV : TEXCOORD0,
out half4 cOut : COLOR0,
    const uniform samplerRECT imagePlane,
    const uniform sampler3D lut,
    const uniform float3 lutSize)
{
    // get raw RGB pixel values
    half3 rawColor = texRECT(imagePlane, sUV).rgb;

    // calculate scale and offset values
    half3 scale = (lutSize - 1.0) / lutSize;
    half3 offset = 1.0 / (2.0 * lutSize);

    // apply the LUT
    cOut.rgb = tex3D(lut, scale * rawColor + offset);
}

除此之外,您还必须使用应用程序代码将LUT作为一个统一数组加载到GPU中,然后将每个视频帧流到GPU中,以便它能够在呈现/工作循环中通过片段着色器。这很可能是专业的视频编辑程序所做的,以应用LUTs与实时视频约束。

P.S.哈罗德关于预先计算查找条目的评论也是加快进程速度的有效方法,使操作纯粹是对查找的内存访问。它可能仍然比GPU处理效率低几个数量级,因为CPU内存访问速度比GPU慢得多,而且内存效率很低,这取决于您所使用的系统以及LUT的维度和大小。

例如,假设您想要为24位RGB制作“完整的”3D LUT。这意味着您的最终多维数据集需要大小255的边缘,这意味着您的最终大小是: 255^3 *3 (RGB) *2(浮点数)字节,总计将近100 an。显然,如果它只是一个一维LUT,这可能不是一个问题,或与较低的颜色位深度,但这种方法仍然是低效的,让GPU处理插值为您。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43535565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档