我正在尝试在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
答案 0 :(得分: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')