2009-09-30 19 views
10

Pracuję z systemem pobierania obrazu, używając przecięcia histogramu w MATLAB. Ta metoda daje mi następujące dane: rzeczywistą liczbę reprezentującą odległość przecięcia histogramu i nazwę pliku obrazu. Ponieważ są to różne typy danych, przechowuję je w tablicy struktury z dwoma polami, a następnie zapisuję tę strukturę w pliku .mat. Teraz muszę posortować tę strukturę zgodnie z odległością przecięcia histogramu w porządku malejącym, aby uzyskać obraz o najwyższej odległości przecięcia histogramu. Próbowałem wielu metod sortowania tych danych, ale bez wyniku. Czy możesz pomóc mi rozwiązać ten problem?Jak sortować tablice struktur w programie MATLAB?

Odpowiedz

12

Oto jeden z przykładów, jak można to zrobić, korzystając z funkcji MAX zamiast sortowania:

%# First, create a sample structure array: 

s = struct('value',{1 7 4},'file',{'img1.jpg' 'img2.jpg' 'img3.jpg'}); 

%# Next concatenate the "value" fields and find the index of the maximum value: 

[maxValue,index] = max([s.value]); 

%# Finally, get the file corresponding to the maximum value: 

maxFile = s(index).file; 

EDIT: Jeśli chcieliby Państwo uzyskać N najwyższe wartości, a nie tylko maksymalnie, możesz użyć SORT zamiast MAX (as Shaka suggested). Na przykład (przy użyciu powyższej struktury):

>> N = 2; %# Get two highest values 
>> [values,index] = sort([s.value],'descend'); %# Sort all values, largest first 
>> topNFiles = {s(index(1:N)).file} %# Get N files with the largest values 

topNFiles = 

    'img2.jpg' 'img3.jpg' 
+1

można również użyć ** cat (1, s.value) ** Łączenie wartości – Amro

+0

bardzo dziękuję za odpowiedź, postaram korzystać z tej funkcji. Proszę, czy mogę uzyskać twój adres e-mail, aby przesłać mój mój kodek matlab dzięki –

+0

@zenab: Mój adres e-mail jest w moim profilu. Nie krępuj się napisz do mnie, jeśli masz coś, co chcesz omówić bezpośrednio. – gnovice

15

Istnieje również możliwość sortowania całej struktury.

Aby zbudować off przykład gnovice za ...

% Create a structure array 
s = struct('value',{1 7 4},'file',{'img1.jpg' 'img2.jpg' 'img3.jpg'}); 

% Sort the structure according to values in descending order 
% We are only interested in the second output from the sort command 

[blah, order] = sort([s(:).value],'descend'); 

% Save the sorted output 

sortedStruct = s(order); 
+0

Uwaga: aby posortować według nazwa pliku (lub dowolny ciąg), zrobiłbyś '[~, order] = sort ({s. file});', następnie 'sortedStruct = s (order);'. W takim przypadku nie można użyć '' descend'', dopóki nie zostanie to zaimplementowane w jakiejś przyszłej wersji Matlaba. –

Powiązane problemy