gpt4 book ai didi

c++ - 灰度到红-绿-蓝 (MATLAB Jet) 色标

转载 作者:IT老高 更新时间:2023-10-28 12:35:04 28 4
gpt4 key购买 nike

我得到了一个本质上是图像的数据集,但是图像中的每个像素都表示为从 -1 到 1 的值。我正在编写一个应用程序,它需要将这些 -1 到 1 灰度值映射到 MATLAB“Jet”色标(红-绿-蓝颜色渐变)的关联 RGB 值。

我很好奇是否有人知道如何获取线性值(例如 -1 到 1)并将其映射到这个比例。请注意,我实际上并没有为此使用 MATLAB(我也不能),我只需要获取灰度值并将其放在 Jet 渐变上。

谢谢,亚当

最佳答案

考虑以下函数(由 Paul Bourke 编写——搜索 Colour Ra​​mping for Data Visualisation):

/*
Return a RGB colour value given a scalar v in the range [vmin,vmax]
In this case each colour component ranges from 0 (no contribution) to
1 (fully saturated), modifications for other ranges is trivial.
The colour is clipped at the end of the scales if v is outside
the range [vmin,vmax]
*/

typedef struct {
double r,g,b;
} COLOUR;

COLOUR GetColour(double v,double vmin,double vmax)
{
COLOUR c = {1.0,1.0,1.0}; // white
double dv;

if (v < vmin)
v = vmin;
if (v > vmax)
v = vmax;
dv = vmax - vmin;

if (v < (vmin + 0.25 * dv)) {
c.r = 0;
c.g = 4 * (v - vmin) / dv;
} else if (v < (vmin + 0.5 * dv)) {
c.r = 0;
c.b = 1 + 4 * (vmin + 0.25 * dv - v) / dv;
} else if (v < (vmin + 0.75 * dv)) {
c.r = 4 * (v - vmin - 0.5 * dv) / dv;
c.b = 0;
} else {
c.g = 1 + 4 * (vmin + 0.75 * dv - v) / dv;
c.b = 0;
}

return(c);
}

在您的情况下,您将使用它将 [-1,1] 范围内的值映射为颜色(将其从 C 代码转换为 MATLAB 函数很简单) :

c = GetColour(v,-1.0,1.0);

这会产生以下“从热到冷”的色带:

color_ramp

它基本上表示在 RGB 颜色立方体的边缘上从蓝色到红色(经过青色、绿色、黄色),并沿着这条路径插入值。

color_cube


请注意,这与 MATLAB 中使用的“Jet”颜色图略有不同,据我所知,它通过以下路径:

#00007F: dark blue
#0000FF: blue
#007FFF: azure
#00FFFF: cyan
#7FFF7F: light green
#FFFF00: yellow
#FF7F00: orange
#FF0000: red
#7F0000: dark red

这是我在 MATLAB 中做的比较:

%# values
num = 64;
v = linspace(-1,1,num);

%# colormaps
clr1 = jet(num);
clr2 = zeros(num,3);
for i=1:num
clr2(i,:) = GetColour(v(i), v(1), v(end));
end

然后我们使用:

figure
subplot(4,1,1), imagesc(v), colormap(clr), axis off
subplot(4,1,2:4), h = plot(v,clr); axis tight
set(h, {'Color'},{'r';'g';'b'}, 'LineWidth',3)

jet hot_to_cold

现在您可以修改上面的 C 代码,并使用建议的停止点来实现类似于喷射颜色图的效果(它们都在 R、G、B channel 上使用线性插值,如上图所示)。 .

关于c++ - 灰度到红-绿-蓝 (MATLAB Jet) 色标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7706339/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com