0

假设我们有两个图像:

1)RGB图像:

% initialize RGB image:
rgbIm = zeros(100, 100, 3); 
rgbIm(20:80, 20:80, 1) = 1;

2)灰度图像:

% initialize grayscale image:
grayIm = zeros(100);
grayIm(20:80, 20:80) = 1;

让我们展示他们两个:

figure, imshow(rgbIm),  colormap('jet'), colorbar;
figure, imshow(grayIm), colormap('jet'), colorbar;

正如我们所看到的,第二个图中的颜色条(即灰度图像)完全有意义。另一方面,我无法真正理解第一张图中颜色图给出的信息。

我想实现的是在RGB图像对应的图中显示灰度图像的颜色条

看起来这似乎没有意义,但这只是一个非常小的例子,我只是为了展示我想在一个更大的项目中做什么。

有什么想法吗?

非常感谢 :)

EDIT1:请允许我解释为什么我需要这个

假设我计算某些感兴趣区域的 MRI 切片中的一些生理参数,得到如下结果:

参数图像

现在我想将这些参数叠加在原始切片之上,并创建一个 RGB 图像来实现这一点:

叠加在原始图像上

colormap没有意义,这就是为什么我想在RGB图像(即叠加图像)中显示与参数图像对应的colormap。

有任何想法吗?

感谢您的关注。

4

2 回答 2

1

我仍然认为你所问的没有意义。
让我解释一下:
什么是colorbar?颜色条是从灰度(标量)到颜色的函数(映射)的表示。使用jet,在您的示例中,您将 0 映射到深蓝色,将 1 映射到红色。
通过请求colorbarRGB 图像,您实际上是在请求从 RGB 三元组到 RGB 颜色的映射——这个映射就是恒等映射!你不需要一个colorbar看这个映射,每个像素都代表它!

编辑

看到编辑后的问题后,我稍微修改了我的答案:
由于 MRI 信号和您计算的任何生理参数在 RGB 空间中都没有意义,因此您有两个 1D 映射:
1. 每个体素的 MRI 信号到灰度级(“灰色” colormap)
2. 每个体素的生理测量以“喷射”颜色

在这种情况下,我通常做的是将 2D MRI 切片转换为 RGB 灰度图像,只需沿第三维复制即可

rgbSlice = twoDSlice(:,:,[1 1 1]);

现在将图像显示在彼此之上

figure;
imshow( rgbSlice );
hold on;
h = imshow( physiologicalParams );
colormap jet;
set(h, 'AlphaData', .5 ); 
colorbar

您可能需要使用caxisclim来调整轴的颜色映射以使其正确。

于 2013-05-06T16:38:04.407 回答
1

(回答我自己的问题,希望将来能帮助别人)

在上述答案Steve Eddins 博客中的帖子的帮助下,我刚刚完成了我的意图。就是这样:

baseImage = baseImage/(max(baseImage(:))); % normalize base (anatomical) image
rgbSlice  = baseImage(:,:,[1 1 1]);        % converting to RGB (ignore colormaps)
imshow(parameterROIImage, []);             % show parametric image
colormap('jet');                           % apply colormap
hold on;
h = imshow(rgbSlice);                      % superimpose anatomical image
set(h, 'AlphaData', ~bwROIlocations);      % make pixels in the ROI transparent
colorbar;       

哪里parameterROIImage是:

在此处输入图像描述

bwROIlocations是包含 ROI 像素的逻辑矩阵:

在此处输入图像描述

最后结果:

在此处输入图像描述

谢谢夏的帮助。

于 2013-05-07T10:00:58.743 回答