在 Matlab 中将 RGB 映射到 Parula

To map RGB to Parula in Matlab

rgb2hsvrgb2indrgb2lab和[=30=等函数]rgb2xyz 将 RGB 颜色图转换为另一个 - 在引入颜色图 Parula 的 Matlab R2014b 中。 但是,我找不到任何将 RGB 颜色图转换为 Parula 的解决方案,即 Matlab 的当前默认颜色图。 我可以将颜色图设置为与图形一致,但不能按如下方式转换图像。 我开始思考 Parula 与 HSV 对比的好处之一是去除图片中的黑色及其邻近颜色,例如

伪命令

im = imread('http://i.stack.imgur.com/cFOSp.png'); 
hsv = rgb2parula(im); % Pseudocommand similar for HSV: hsv = rgb2hsv(im);
imshow(hsv); 

这给出了

这是图像处理后期出现量化噪声和形态学去除效果不佳的原因之一,如前一帖所述。

如何在 Matlab 中将 RGB 映射到 Parula?

用户自制的Parulas

我想我们需要一个定制的Parula因为函数rgb2parula不可用。 提案 here 是 Gnuplot 关于颜色图的变体。 如何将这段代码转换为 Matlab?

这实际上是不可能的,因为Parula不包含所有可能的RGB值。如果您考虑一下,每个 Matlab 颜色图都只是 RGB 合奏的一个子集。在数学术语中 rgb2hsv 是同构,但 RGB 和颜色图之间不能存在这种同构(即使是 hsv 颜色图,它不采用所有可能的 HSV 值)。

然后对于给定的 RGB 三元组,您可以尝试在 Parula 颜色图中找到最近的 RGB 三元组。类似于:

cm = parula(256);
RGB = rand(1,3);

d2 = (cm(:,1)-RGB(1)).^2 + (cm(:,2)-RGB(2)).^2 + (cm(:,3)-RGB(3)).^2;
[~, mi] = min(d2);
根据此指标,

cm(mi,:) 将是 Parula 中最接近 RGB 的颜色。但当然,这是一个不完美的解决方案。