按某些颜色的像素对 jet colormap 进行分类

To categorize jet colormap by pixels of some colors

数据

我想通过HSV(Hue-Saturation-Lightness)

统计以下像素来分类

显示不带 HSV 的 RGB 通道 (source)

x = linspace(0,1, size(Map)(1));
  figure(Fignr) 
  lw = 4; 
  plot( x, Map(:,1),'color',[1,0,0],'linewidth',lw,
        x, Map(:,2),'color',[0,1,0],'linewidth',lw, 
        x, Map(:,3),'color',[0,0,1],'linewidth',lw,
        x, mean(Map,2),'color',[0.7,0.7,0.7],'o') 
  xlabel 'fraction' 
  ylabel 'intensity' 
end

其中示例 showRGBchannels(1,summer(500)) 给出

这只是关于一个映射的示例,您可以在其中看到关于一个图形的不同颜色红色、绿色和蓝色的分数。 但是,颜色图也必须扩展到黄色、绿色和深蓝色。

你可以假设

但是,我认为这不是办法,因为 HSV 在这里是一个不错的选择。 我还被建议使用彩虹以外的其他颜色进行可视化(连续 red-blue,出版 here)。

有许多分离颜色的实现和关于似乎使用哪种颜色的争论。 让我们在这里关注 RGB 颜色及其分离。 可能,通过 HSV 或任何其他未提及的适当方法。

如何通过 HSV 对第一张图片的适当像素(即颜色)进行分类和计数? 有没有 类 and/or 论文?

阅读前注意事项。您似乎将颜色图的选择与颜色分割混淆了。需要注意的是:

  • Colormap:用于用户友好的可视化。您不使用颜色图的颜色作为数据,而是使用原始数据。然而,人眼看到彩色图片比灰度图片更友好。因此,有不同的方法可以通过不同的可视化颜色选择来可视化数据。如果您的数据是单值的(例如,您描述的图形表示 z=f(x,y),则使用 z 进行数据分析,而不是 z 的颜色表示)。
  • 颜色表示:如果您有一些表示颜色的数据(即土豆的图片),那么您可以用不同的颜色描述这些数据space s,例如 RGB、HSB、Cie Lab,...这是描述相同数据的方法,一些对某些数学计算有用,一些对其他(即 HSV 适合分割颜色,而 CIElab 旨在查找颜色与人眼相似)

编辑:关于使用颜色图的额外讨论

作为一名从事医学影像工作的学生,我可以肯定地说,颜色不是用于分割,而是数据(通常是单通道)本身的数值。使用不同的颜色图仅用于可视化目的。

这里有各种各样的意见,但大体上集中在:jet 颜色图不够清晰(也是使用最广泛的!)。例如,Moreland 颜色图依赖于在可视化中有一个清晰的中点,因此用户可以清楚地看到哪些值高于平均值,哪些值低于平均值。

甚至 Matlab 也开始同意停止使用 jet 颜色图的想法,因为 matlab 的默认颜色图不再是 jet (R2014b)。 Read more here.

另一种观点是 jet 颜色图不能很好地转换为灰度。 Read more here.

但是,请注意所有这些讨论 绝对 与描述颜色的方式无关。您可以描述在 RGB、HSV、CIE Lab* 或您想要的任何其他颜色表示中讨论的任何颜色图。


原回答

所以,我不会给你代码(你也可以在 SO 中找到),我只会举一个小例子来说明 HSV space 是如何工作的。如您所见,在 RGB 中,似乎不可能通过数值来分隔颜色。因此需要一些其他颜色space。

最常见的方法之一是使用 HSV space。

如图所示,这个space有3个值。色调(角度)、饱和度和明度。在这三者中,他们创建了一个圆柱坐标系,将您指向特定的颜色。从图中,您可以注意到,虽然 S 和 V 更改了 "brightness" 和 "amount of colour" 类参数,但 HUE 是唯一实际更改颜色色度的参数。所以所有红色都在相同的 H 范围内,独立于 S 和 V 的值。

请参见下图中此圆柱体的切片:

我们可以从这张图片中得出结论,所有黄色值都在 30-90 度左右。

这些信息和 Matlab 函数的巧妙使用,例如 rgb2hsv 应该会让您朝着正确的方向前进。

提示:您想对红色值的 360-0 交易做些什么。

祝你好运!