将浮点值转换为 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 );
我有一个数据集,其中包含从 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 );