сортировка цветов в matlab - PullRequest
       67

сортировка цветов в matlab

4 голосов
/ 11 февраля 2010

У меня есть разные значения RGB в массиве измерений 260000 * 3. Я хочу отсортировать эти цвета в порядке возрастания или убывания (неважно, какой), чтобы похожие цвета были ближе. Какой самый эффективный способ сделать это?

Ответы [ 3 ]

8 голосов
/ 11 февраля 2010

Пример:

Сначала мы начнем с обычной карты цветов 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

0 голосов
/ 11 февраля 2010

Команда 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 прав на этот счет.

0 голосов
/ 11 февраля 2010

С риском казаться шутливым, внутренняя функция sortrows(), вероятно, адекватна, если не сказать нам. Но ваши настоящие трудности заключаются в попытке использовать RGB-тройки для определения близости цвета - это [255,254,255] «близко к» [255,255,0]?

PS До вашего комментария я предполагал, что ваша таблица данных содержит 260000 строк, каждая строка содержит 3 числа, которые представляют компоненты RGB ваших цветов. Другими словами, у вас была таблица из 260000 цветов. Если это не правильно, вы можете осветить дальше

...