Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
matlab中的颜色排序_Matlab_Sorting_Colors_Rgb - Fatal编程技术网

matlab中的颜色排序

matlab中的颜色排序,matlab,sorting,colors,rgb,Matlab,Sorting,Colors,Rgb,我在260000*3维数组中有不同的RGB值。我想把这些颜色按升序或降序排序(不管是哪种),这样相似的颜色就更接近了。最有效的方法是什么 尽管听起来有点滑稽,但内在的sortrows()函数可能已经足够了——如果没有,请告诉我们。但您真正的困难在于尝试使用RGB三元组来定义颜色的接近度,[255254255]“接近”[255255,0] PS在您发表评论之前,我假设您的数据表包含260000行,每行包含3个数字,代表颜色的RGB成分。换句话说,你有一张260000种颜色的桌子。如果这不正确,您是

我在260000*3维数组中有不同的RGB值。我想把这些颜色按升序或降序排序(不管是哪种),这样相似的颜色就更接近了。最有效的方法是什么

尽管听起来有点滑稽,但内在的
sortrows()
函数可能已经足够了——如果没有,请告诉我们。但您真正的困难在于尝试使用RGB三元组来定义颜色的接近度,[255254255]“接近”[255255,0]

PS在您发表评论之前,我假设您的数据表包含260000行,每行包含3个数字,代表颜色的RGB成分。换句话说,你有一张260000种颜色的桌子。如果这不正确,您是否可以进一步照亮该命令将是一个很好的开始。您应该能够按照第一个维度、第二个维度、第三个维度进行排序。我不太熟悉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在这方面是正确的。

示例: 首先,我们从常规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)

首先我们洗牌颜色。然后,我们尝试恢复原始的颜色分组(我们通过在颜色空间中根据色调和值进行排序来实现):


这不起作用,因为排序只在颜色的三个维度中的一个维度上进行。我可以根据第一个排序的向量进一步拆分数组,然后对它们进行进一步排序,最后将所有内容连接在一起,但这似乎效率太低。我正在考虑将三维转换为字符串,将它们具体化,然后将所有内容转换回一维数组中的数字,对它们进行排序,然后将结果拆分回三维。我想那会管用的。您知道如何在matlab中将字符串拆分为三个子字符串吗?@podunk,您可以使用冒号运算符以与索引数值数组相同的方式索引字符串。此外,sortrows一次可以对多个列进行排序。您可以指定sortrows(A,[1 3 2])先按第1列对A进行排序,然后按第3列进行排序,等等。按照您的建议使用sort的问题在于它会分解颜色,例如sort([23 45 56;24 32 12])将返回[23 32 12;24 45 56]。向下投票。比你的解决方案多出两行代码,我的工作答案就会得到向下投票?这样相似的颜色在哪方面接近?颜色是一种三维属性。你必须选择什么颜色对你来说是重要的。您可以根据其中一个通道的代码值进行排序。或者,您可能希望将这些颜色转换为不同的颜色空间。你关心的是色调角度吗?是颜色的明度吗?色度?
%# 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)