2016-03-15 368 views
1

这个问题是关于HSV color space以前的问题。修改colorbar刻度和颜色范围

比方说,我有两个数组AB,其中A是在彩条显示,以及B是由HSV色彩空间,转化为RGB图像的关注我的数据点(2D):色调在区间[0.25-1](对应于归一化的A值0.25-1),饱和度= 1,区间[0-1]中的值(对应于一些其他值)。

当显示Bimshow时,我想创建一个匹配的颜色条,其中的刻度对应的值范围为A

我面临的第一个难题是我希望我的色调位于区间[0.25-1]之内,因此我只需要显示hsv色条的某个部分。

第二个难点是我需要将A的值范围与颜色条相匹配。


示例代码:

A = rand(30,30)*0.4;  % Values range from 0 - 0.4 
X = rand(30,30)*100+100; % Values range from 100 - 200 

A_n = A/(max(A(:))/0.75) + 0.25; % "Normalize", with range 0.25 - 1 

X_n = X/max(X(:));    % Normalize, range 0 - 1 

colorRGB = NaN([size(A),3]);  % preallocate 

for ii = 1:size(A,1)  
    for jj = 1:size(A,2) 
    colorRGB(ii,jj,:) = hsv2rgb([A_n(ii,jj),1,X_n(ii,jj)]); % turn into RGB 
    end 
end 

imshow(colorRGB),   % display image 
colormap hsv; cb = colorbar(); 

你可以看到colourbar覆盖整个HSV范围,并有例蜱从0 - 1

我希望它是什么仅显示hsv范围的上限75%,刻度从0到最大(A(:))

假设max(A(:))= 0.35的正确的色条应如下所示:

Correct colorbar (你可以看到,我只是裁剪它,但这不应该是必要要么)

+0

你其实可以告诉你如何做呢?代码 –

+0

尝试发布一个MCVE:https://stackoverflow.com/help/mcve –

+0

@Ander Biguri添加了一个MCVE。我希望现在更清楚一点。 – Johannes

回答

1

为了做到这一点,你需要两件事情。首先裁剪彩条,然后设置其限制。其次,更改标题栏中的文字,但要确保它们位于适当位置,还需要手动设置它们的位置。希望这些代码是有道理的:

cb = colorbar(); 
set(cb, 'ylim', [25 100]) 
set(cb, 'XTick', [25:15:100]) % modify values if you preffer 
set(cb,'XTickLabel',strsplit(num2str([0.25:0.15:1]))); 

enter image description here

+0

谢谢,那就是我一直在寻找的!我必须像这样写(/ 100):set(cb,'ylim',[.25 1]); set(cb,'XTick',.25:.15:1);也许你可以添加到你的答案,不知道为什么,也许R2016a? – Johannes

+1

@Johannes依赖于我认为的数据。但只要你明白了,那很好! ;) –