按某些颜色的像素对 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))
给出
这只是关于一个映射的示例,您可以在其中看到关于一个图形的不同颜色红色、绿色和蓝色的分数。
但是,颜色图也必须扩展到黄色、绿色和深蓝色。
你可以假设
- 深蓝色的值为 [0, 0.2)
- 蓝色 [0.2, 0.4)
- 绿色 [0.4, 0.6)
- 黄色 [0.6, 0.8)
- 红色 [0.8, 1.0)
但是,我认为这不是办法,因为 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 交易做些什么。
祝你好运!
数据
我想通过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))
给出
这只是关于一个映射的示例,您可以在其中看到关于一个图形的不同颜色红色、绿色和蓝色的分数。 但是,颜色图也必须扩展到黄色、绿色和深蓝色。
你可以假设
- 深蓝色的值为 [0, 0.2)
- 蓝色 [0.2, 0.4)
- 绿色 [0.4, 0.6)
- 黄色 [0.6, 0.8)
- 红色 [0.8, 1.0)
但是,我认为这不是办法,因为 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 交易做些什么。
祝你好运!