将浮点值转换为 RGB 值

Convert float values to RGB values

我有一个数据集,其中包含从 10^(-7) 到 10^(0) 的 700 万个浮点正值。我想将浮点值转换为 "linear way" 中的 RGB 值。直到现在我使用 [255-const*|log(float value)|]/255 并且它有效,但我想知道是否有一种方法可以在不使用对数的情况下转换值,也许(我希望如此)如果是否有一个 OpenGL 库可以在 GPU 的基础上做这件事。

编辑1: 值从 10^(-7) 到 10^(1)。我想以最快的方式获得转换,因为我需要一个快速的程序(这就是我想使用 GPU 的原因)。

编辑2: 没有一个 OpenGL 函数可以通过给出最大值和最小值来缩放您的值吗? 我有一个带有用户界面的程序,我想在程序 运行 时更改 "window of values"。 我想要这样的东西 Computerized tomography

EDIT3:这对我有帮助吗? http://glm.g-truc.net/0.9.3/api/a00157.html/

EDIT4:我想在 Matlab 中获得类似 Jet 颜色图的东西 http://blogs.mathworks.com/images/loren/73/colormapManip_14.png

我想这取决于您实际拥有这些值的位置。如果您在 OpenGL 中生成它们,那么您可以在 OpenGL 中执行转换,这会很快,然后提取数据。如果您在 CPU 内存中,将数据移入和移出 GPU 内存也需要一些时间。

对于这种循环,如果您使用优化 -O3 进行编译,编译器通常会对代码进行矢量化优化(请参阅 What is "vectorization"?)。这应该适用于 GCC、MSVC 和其他编译器。检查编译器的特定矢量化功能。

由于 unsigned char 介于 0 和 255 之间,您可以这样做:

int max = max_value_from_range;
int max = min_value_from_range;
if ( max == min ) return; // avoid to divide by 0
unsigned char out [RANGE_LEN]
for( int i = 0; i < RANGE_LEN; i++ )
    out[i] = 255 * ( FLOAT_INPUT[i] - min ) / ( max - min );