【问题标题】:How to overlap color figure on a gray one with colorbar in MATLAB?如何在 MATLAB 中用颜色条将颜色图形重叠在灰色图形上?
【发布时间】:2017-12-01 16:49:06
【问题描述】:

我正在尝试在 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

我需要的结果图片:

【问题讨论】:

  • 请包含一些代码以显示您的进度,以便我们重现您正在尝试做的事情。
  • @verbatross 在这里。
  • Igray是什么,你想要什么样的“色码”?
  • 也许一张看起来像你想要的图像会让这更清晰
  • @Yvon 它是背景中的任何灰色图像,而 Icc 是前景中的 rgb 彩色图像

标签: matlab matlab-figure


【解决方案1】:

试试这样的:

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中有设置颜色条限制的命令,您可以在阅读文档中找到这些命令。

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

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

【讨论】:

  • 有两点我需要提一下:第一,每种颜色(不是灰度值)都有一个含义,为此我需要colorbar。其次,我需要从colorbar 中省略灰度图像的灰度值。
  • 我不确定你在这里问什么。显示的Icc 是一个 3 通道图像,它不使用颜色图。因此,您仍然可以将图形的颜色图设置为parula,并且您可以按照我的描述从parula 中采样颜色。这样您就可以准确地知道每个补丁的值(颜色),并且这些颜色与颜色栏中的颜色完全匹配。上面的T 是将补丁的颜色与颜色条上的位置联系起来的方式,它指示了每种颜色的含义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-23
  • 1970-01-01
  • 1970-01-01
  • 2015-02-03
  • 2019-06-01
相关资源
最近更新 更多