Matlab 3D Сортировать по H, затем S, затем V - PullRequest
0 голосов
/ 25 февраля 2020

В Matlab я хотел бы сделать сортировку по значениям цвета в определенном порядке. Скажем, например, Сортировка по Хюэ, затем Сат, затем Интенсивность (V). Или, по V, H, затем S.

Примерно так:

% UNSORTED 
A(:,:,1) = [1 1 1 1 1 2 2 2 1 1 1]; 
A(:,:,2) = [1 1 1 1 1 3 2 2 3 2 2];
A(:,:,3) = [3 1 4 3 2 1 2 1 1 2 1];

% RESULT 
A(:,:,1) = [1 1 1 1 1 1 1 1 2 2 2]
A(:,:,2) = [1 1 1 1 1 2 2 3 2 2 3]
A(:,:,3) = [1 2 3 3 4 1 2 1 1 2 1]

Я боролся с этим один день без удачи. Любая помощь?

1 Ответ

1 голос
/ 25 февраля 2020

Один метод может быть:

% UNSORTED 
A(:,:,1) = [1 1 1 1 1 2 2 2 1 1 1]; 
A(:,:,2) = [1 1 1 1 1 3 2 2 3 2 2];
A(:,:,3) = [3 1 4 3 2 1 2 1 1 2 1];

for ii = 1:size(A,1)
    A(ii,:,:) = reshape(sortrows(squeeze(A(ii,:,:)),[1:3]),[1,size(A,2),size(A,3)])
end

Таким образом, мы извлекаем каждую 2D матрицу, мы используем squeeze, чтобы удалить одноэлементное измерение, затем мы используем sortrows, чтобы отсортировать каждую строку (с этим приоритетом 1 -> 2-> 3). И наконец мы reshape эта 2D матрица, чтобы восстановить одноэлементное измерение и получить 3D матрицу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...