4

我在 260000 * 3 维数组中有不同的 RGB 值。我想按升序或降序对这些颜色进行排序(哪个都没有关系),以便相似的颜色更接近。最有效的方法是什么?

4

3 回答 3

8

例子:

首先我们从常规的 Jet 颜色图开始:

%# sample image mapped to Jet colormap
I = repmat(1:100, 100, 1);
C = jet(100);

figure
subplot(211), imagesc(I), colormap(C)
subplot(212), rgbplot(C)

original_colormap

首先我们洗牌颜色。然后我们尝试恢复原始的颜色分组(我们通过根据色调和值在HSV颜色空间中排序来做到这一点):

%# shuffle colors
C = C(randperm(100), :);

%# rearrage according to HSV colorspace
C = rgb2hsv(C);
C = sortrows(C, [-1 -3 2]);  %# sort first by Hue, then by value
C = hsv2rgb(C);

figure
subplot(211), imagesc(I), colormap(C)
subplot(212), rgbplot(C)

恢复的颜色图

于 2010-02-11T17:14:36.300 回答
-2

冒着听起来滑稽的风险,内在sortrows()功能可能就足够了——如果不是的话,请告诉我们。但是您真正的困难在于尝试使用 RGB 三元组来定义颜色的接近度—— [255,254,255] 是否“接近” [255,255,0] ?

PS 在您发表评论之前,我假设您的数据表包含 260000 行,每行包含 3 个数字,代表颜色的 RGB 分量。换句话说,您有一张包含 260000 种颜色的表格。如果这不正确,您能否进一步说明

于 2010-02-11T16:34:49.343 回答
-2

sort命令将是一个很好的起点。您应该能够按第一个维度排序,然后是第二个维度,然后是第三个维度。我对 RGB 值不太熟悉,所以我不完全确定单独对尺寸进行排序是否会导致匹配的颜色组合在一起,但是对我上面描述的过程进行某种适应应该可以解决问题。

编辑:包括排序索引将避免破坏 RGB 颜色。例子:

x=[5,6;4,7;3,8;2,9;1,10];
[x1,index]=sort(x(:,1));
x2=x(index,2);
x=[x1 x2];

sortrows 命令可能会更优雅,但我之前并没有意识到这一点。HPM 对该帐户的权利。

于 2010-02-11T16:35:51.683 回答