手动将HSV映射到JET颜色映射表

3

能否将使用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之间的映射。

1个回答

5

最简单的方法是使用您的源色图将图像转换为索引图像(使用rgb2ind),然后使用目标色图将此索引图像转换回RGB图像(使用ind2rgb)。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接