是否可以使用JET色彩图将使用HSV colormap(非格式!)的RGB图像(RxCx3)重新映射到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
行引发错误,说“网格向量必须包含唯一的点。”。我不确定我的代码是正确的做法(我基本上试图将一维嵌入坐标适合HSV色图),但size(unique(hsv(256),'rows'),1)==256
为真,所以我不太清楚为什么会出现这种错误。
注意:某些人可能会感到困惑,但这个问题与HSV格式没有没有;这里的所有彩色图像都以RGB格式存储。我在询问colormaps之间的映射。
答案 0 :(得分:5)
最简单的方法是使用源色彩映射将图像转换为索引图像(使用rgb2ind
),然后使用目标色彩图将此索引图像转换回RGB图像(使用{ {3}})
indexed = rgb2ind(img, source_colormap);
output = ind2rgb(indexed, destination_colormap);