此问题是关于HSV color space的上一个问题的后续问题。
假设我有两个数组A
和B
,其中A
是我感兴趣的数据点(2D),显示在颜色栏中,B
是从HSV颜色空间转换的RGB图像,其中:Hue在区间[0.25-1]
中(对应于标准化A
值0.25-1),饱和度= 1,区间[0-1]
中的值(对应于其他一些价值观。)
使用B
显示imshow
时,我想创建一个匹配的颜色栏,其中的刻度与A
的值范围相对应。
我面临的第一个困难是我希望我的Hue位于[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();
在示例中,您可以看到颜色栏覆盖整个hsv范围,并且刻度为0 - 1.
我想要的只是显示hsv范围的上部75%,从0到最大的刻度(A(:))
假设max(A(:))= 0.35的正确颜色栏应如下所示: