反转LUT(查找表)

时间:2011-02-09 02:23:12

标签: algorithm data-structures language-agnostic lookup-tables

我正在编写一些颜色管理代码,我正在处理LUT(查找表)。

我可以读取颜色配置文件LUT并转换我的值......但是,我该如何进行反向操作?也许,是否有一个很好的算法来生成LUT的“逆”?

2 个答案:

答案 0 :(得分:1)

如果您的LUT是给定的,最简单的方法是找到最接近任何给定颜色值的条目。您可以通过各种方法加速计算;例如,您可以从LUT条目中构建k-d树,并使用它来消除大多数比较,并进行详尽的检查。

但是,这会导致“分色”图像,因为图像中的平滑区域会突然从一个条目移动到下一个条目。您可以通过以(准)随机顺序拍摄像素,从LUT中选择最佳拟合,并将像素值和所选条目之间的差异推回到尚未选择的附近像素来避免这种情况。 / p>

最后有多种方法可以做到这一点,但它们都会产生抖动效果,通常可以更好地利用(用于成像目的)可用的LUT条目,而不是简单的逐像素操作。

答案 1 :(得分:0)

是的,您通常可以有效地反转查找表(线性时间),假设该函数是双射。如果您的查找表将两个不同的键映射到相同的值,则没有直接的方法来反转表,因为您最终需要具有映射到两个不同键的值。如果你对此没问题,那很好,虽然它可能会让你怀疑为什么要尝试构建反向地图。

如果您知道每个值都是唯一的,则可以按如下方式构建反向查找表。首先,创建一个数据结构来保存从值到键的映射 - 可能是哈希表,或平衡二叉树,或者如果值是小整数则是原始数组。接下来,迭代查找表中的每个键/值对,然后将映射值→键插入新的查找表中。这可以在线性时间加上将值插入新容器所需的时间来完成。