假设我们有两张图片:
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;
正如我们所看到的,第二个图中的 colorbar (即灰度图像)完全有意义。另一方面,我无法真正理解第一个图中色图所给出的信息。
我想要实现的是在与RGB图像对应的图中显示灰度图像的颜色条。
看起来这似乎没有意义,但这只是一个非常小的例子,我只是为了展示我想在一个更大的项目中做什么。
有什么想法吗?
非常感谢:)
EDIT1:请允许我解释为什么我需要这个
假设我在某些感兴趣的区域中计算一个MRI切片的一些生理参数,产生类似的结果:
现在我想将这些参数叠加在原始切片的顶部,然后创建一个RGB图像来实现此目的:
色彩图没有意义,这就是为什么我想在RGB图像中显示与参数图像相对应的色彩图(即叠加图像)。
有什么想法吗?
感谢您的关注。
答案 0 :(得分:1)
我仍然认为你的要求没有意义
让我解释一下:
什么是colorbar
? Colorbar表示从灰度(标量)到颜色的函数(映射)。使用jet
,在您的示例中,将0映射为深蓝色,将1映射为红色
通过向RGB图像请求colorbar
,您实际上要求从RGB三元组到RGB颜色的映射 - 此映射是标识映射!您不需要colorbar
来查看此映射,每个像素代表它!
看到编辑过的问题后,我稍微修改了一下答案:
由于MRI信号和您计算的任何生理参数在RGB空间中都没有意义,因此您有两个1D映射:
1.每个体素到灰度的MRI信号(“灰色”色图)
2.每个体素对“喷射”颜色的生理测量
在这种情况下我通常做的是将2D MRI切片转换为RGB灰度图像,只需沿第三维复制它
rgbSlice = twoDSlice(:,:,[1 1 1]);
现在将图像显示在彼此之上
figure;
imshow( rgbSlice );
hold on;
h = imshow( physiologicalParams );
colormap jet;
set(h, 'AlphaData', .5 );
colorbar
您可能需要使用caxis
或clim
来播放轴的颜色映射,以使其正确。
答案 1 :(得分:1)
(回答我自己的问题,以便将来可以帮助某人)
在上述answer和Steve Eddins' blog的帖子的帮助下,我刚刚完成了我的意图。 方法如下:
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像素的逻辑矩阵:
最终结果:
感谢Shai的帮助。