能否将使用HSV 调色板(不是格式)的RGB图像(RxCx3)重新映射为使用JET调色板的RGB图像?换句话说,是否存在Matlab中HSV和JET调色板之间的"映射"?
我没有认真考虑过,但这里有一个快速而简单的尝试:
function J = remap( I )
n = 256;
X = hsv(n);
Y = jet(n);
t = linspace(0,1,n)';
[r,c,~] = size(I);
I = reshape( I, r*c, 3 );
u = interp3( X(:,1), X(:,2), X(:,3), t, I(:,1), I(:,2), I(:,3) );
J = I;
for k = 1:3
J(:,k) = interp1( t, Y(:,k), u );
end
J = reshape( J, r, c, 3 );
end
很不幸,这会在interp3
行上抛出一个错误,指出“网格向量必须包含唯一点。”。 我不确定我的代码是否正确(基本上我正在尝试将1D嵌入坐标拟合到HSV色彩映射),但是size(unique(hsv(256),'rows'),1)==256
是真的,所以我不太确定为什么会出现这个错误。
注意:对于某些人来说可能会感到困惑,但是这个问题与HSV格式无关。 这里的所有彩色图像都以RGB格式存储。 我正在询问colormaps之间的映射。