【问题标题】:To map RGB to Parula in Matlab在 Matlab 中将 RGB 映射到 Parula
【发布时间】:2015-06-30 15:35:12
【问题描述】:

将RGB颜色图转换为另一种颜色图有rgb2hsvrgb2indrgb2labrgb2xyz等功能- 在 Matlab R2014b 中引入了颜色图 Parula。 但是,我找不到任何将 RGB 颜色图转换为 Parula 的解决方案,即 Matlab 的当前默认颜色图。 我可以将颜色图设置为与图一致,但不能按如下方式转换图像。 我开始认为 Parula 与 HSV 相比的优势在于去除图片中的黑色及其相邻颜色,例如here

伪命令

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?

【问题讨论】:

  • 我认为您应该提及您使用的是哪个版本。我相信 Matlab 在 2014a/b 版本中更改了默认绘图的颜色图/方案。如果我误解了这个问题,请纠正我。

标签: image matlab colors rgb parula


【解决方案1】:

这是不可能的,因为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 的颜色。但当然,这是一个不完美的解决方案。

【讨论】:

  • 我认为这就是他的意思。不是完美的转换,而是四舍五入到最接近的颜色。
  • (甚至是 hsv 颜色图,它不会处理所有可能的 HSV 值)。 你的意思是 hsv 颜色图不能处理所有可能的 RGB 值吗?
  • @Masi:有两个原因:首先,hsv 函数创建了一个由 RGB 分量组成的向量,其中只有色调变化,饱和度和值保持不变。例如,很容易看出hsv 的输出中没有白色和黑色。其次,由于 hsv 输出一个n-by-3array,所以你不能只用n 颜色映射所有可能的色调值,对吧?
  • 是的。 - 你能举个例子,你如何将你的 Parula 应用到 Pseudocode 中的图像im 上吗?我没有得到这个例子。
  • @Masi:当然。解决方案中的方法只是评估您的颜色与颜色图中的颜色之间的“距离”。为此,我计算三个分量的二次差之和(就像你对具有 XYZ 坐标的点所做的那样并使用勾股定理),然后用min 搜索最小距离,在这种情况下是最小平方距离是一样的。是不是更清楚了?
猜你喜欢
  • 2016-04-06
  • 1970-01-01
  • 2014-08-20
  • 2011-09-02
  • 1970-01-01
  • 1970-01-01
  • 2020-07-09
  • 1970-01-01
  • 2018-06-21
相关资源
最近更新 更多