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

时间:2015-02-23 23:41:34

标签: matlab octave colormap

数据

enter image description here

我想通过HSV(色相饱和度 - 亮度)计算以下像素来对其进行分类

  • 深蓝色
  • 蓝色
  • 绿色
  • 黄色
  • 红色

显示没有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))给出了

enter image description here

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

你可以假设

  • 深蓝色的值为[0,0.2)
  • 蓝色[0.2,0.4]
  • 绿色[0.4,0.6]
  • 黄色[0.6,0.8]
  • 红色[0.8,1.0]

然而,我认为这是不可取的,因为HSV在这里可以是一个不错的选择。 我还建议使用除Rainbow之外的其他颜色进行可视化(连续红蓝,出版物here)。

有很多实现可以分离颜色和论证,看似使用哪种颜色。 让我们关注RGB颜色及其分离。 可能是通过HSV或任何其他未提及的适当方法。

如何对适当的像素进行分类和计数,即通过HSV对第一张图片的颜色进行分类? 任何课程和/或论文?

1 个答案:

答案 0 :(得分:6)

注意阅读前。您似乎混淆了色彩映射与颜色分割的选择。重要的是要注意:

  • Colormap :用于用户友好的可视化。您不使用色彩图的颜色作为数据,而是使用原始数据。然而,人眼看到的彩色图片比灰度图片更友好。因此,有不同的方法可视化具有不同可视化颜色选择的数据。如果您的数据是单值的(例如您描述的数字代表z = f(x,y),则使用z进行数据分析,而不是z的颜色表示。)
  • 颜色表示:如果您有一些表示颜色的数据(即马铃薯的图片),那么您可以在不同的颜色空间中描述这些数据,例如RGB,HSB,Cie Lab ,...这是描述相同数据的方法,一些用于某些数学计算,一些用于其他数据(即HSV有利于分段颜色,而CIElab旨在找到人眼相似的颜色)。

编辑:关于使用COLORMAPS的补充讨论

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

这里有很多意见,但一般都集中在:jet色彩图不够清晰(它使用最广泛!)。例如,Moreland色图依赖于在可视化中具有清晰的中点,因此用户清楚地看到哪些值高于平均值以及哪些值低于平均值。

即使是Matlab也开始同意停止使用jet色彩图的想法,因为matlab的默认色图不是任何更多的喷射(R2014b)。 Read more here

另一种观点认为jet色彩图不能很好地转化为灰度。 Read more here.

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


原始回答

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

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

enter image description here

如图所示,此空间有3个值。色调(角度),饱和度和值。在这三个中,它们创建了一个圆柱坐标系,指向特定的颜色。从图中可以看出,虽然S和V改变了亮度"和"颜色的数量"类似参数,HUE是唯一一个实际改变颜色色度的参数。所以所有的红色都在H的相同范围内,与S和V的值无关。

在下图中看到一个圆柱片:

enter image description here

我们可以从这张图片得出结论,所有的黄色值都是大约30-90度的H.

这些信息以及rgb2hsv等Matlab功能的智能使用可以帮助您朝着正确的方向前进。

提示:您希望对红色值的360-0交易执行某些操作。

祝你好运!