2016-03-15 471 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依賴於我認爲的數據。但只要你明白了,那很好! ;) –