手动将HSV重新映射到JET色彩映射

时间:2017-01-19 15:14:05

标签: matlab mapping colormap

是否可以使用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之间的映射。

1 个答案:

答案 0 :(得分:5)

最简单的方法是使用源色彩映射将图像转换为索引图像(使用rgb2ind),然后使用目标色彩图将此索引图像转换回RGB图像(使用{ {3}})

indexed = rgb2ind(img, source_colormap);
output = ind2rgb(indexed, destination_colormap);