如何在 MATLAB 中用颜色条将彩色图形重叠在灰色图形上?

How to overlap color figure on a gray one with colorbar in MATLAB?

我正在尝试在 MATLAB 中对灰度图像上的一些参数值进行颜色编码。我想知道如何显示灰色图像,使参数值在灰色外观图像和某些像素上着色,最后在图像旁边画一个 colorbar 只显示参数值范围。

从现在开始不成功的代码:

I = Igray; % gray image
Icc = zeros(size(I,1),size(I,2),3); % color coded image
Icc(:,:,1) = I;
Icc(:,:,2) = I;
Icc(:,:,3) = I;
Icc('some address in the image',3) = 'some number between 0 and 255';
imshow(Icc,[])
colorbar % colorbar showing colored parts spectrum

我需要的结果图片:

尝试这样的事情:

I = Igray; % gray image
RGB = [1.0,0.7,0.2]; % color for patch
x = 30:50;
y = 70:90;
% If you gray image is in the range [0,255], make it range [0,1]
I = double(I)/255;
Icc = repmat(I,[1,1,3]);
block = I(y,x);
Icc(y,x,1) = 1 - ((1-block) * (1-RGB(1)));
Icc(y,x,2) = 1 - ((1-block) * (1-RGB(2)));
Icc(y,x,3) = 1 - ((1-block) * (1-RGB(3)));
imshow(Icc)

我确定有一种更漂亮的编码方式,但这种方式显示了意图。

您基本上是将灰度值与要制作补丁的 RGB 颜色相乘。通过先反转色块和颜色,然后反转结果,乘法使色块更亮,而不是更暗。这样你就可以在黑暗部分也显示颜色的地方获得你想要的效果。如果你直接相乘而不先反转,黑色保持黑色并且不显示颜色。

之后你就得想办法和颜色条协调了。 MATLAB里面有设置color bar limits的命令,看文档就可以找到。

您显示的色条使用的是PARULA色图。您可以这样做来找到正确的 RGB 值来为您的补丁着色:

T; % value to color your patch in, in range [0,1]
cm = parula(256);
RGB = interp1(cm,T*255,'linear')