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)

Recovered_colormap

于 2010-02-11T17:14:36.300 に答える
-2

おかしなことに聞こえるsortrows()かもしれませんが、本質的な機能はおそらく適切です。しかし、あなたの本当の問題は、RGB トリプルを使用して色の近さを定義しようとすることにあります - [255,254,255] は [255,255,0] に「近い」ですか?

PS あなたのコメントの前に、データのテーブルには 260000 行が含まれ、各行には色の RGB コンポーネントを表す 3 つの数値が含まれていると想定していました。つまり、260000 色のテーブルがあったということです。これが正しくない場合は、さらに照らしていただけますか

于 2010-02-11T16:34:49.343 に答える
-2

sortコマンドは、開始するのに適した場所です。最初の次元、次に 2 番目、3 番目の次元で並べ替えることができるはずです。私は 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 に答える