MATLAB でカラー ヒストグラムの交差を使用して画像検索システムを使用しています。この方法では、次のデータが得られます: ヒストグラムの交差距離を表す実数と、画像ファイル名です。これらはデータ型が異なるため、2 つのフィールドを含む構造体配列に格納し、この構造体を .mat ファイルに保存します。ここで、ヒストグラムの交差距離が最大の画像を取得するために、ヒストグラムの交差距離に従ってこの構造を降順に並べ替える必要があります。このデータをソートするために多くの方法を試しましたが、結果はありませんでした。この問題を解決するのを手伝ってくれませんか?
25959 次
2 に答える
15
構造全体をソートすることもできます。
gnoviceの例から構築するには...
% 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);
于 2009-09-30T15:08:50.907 に答える
12
並べ替える代わりに関数MAXを使用して、これを行う方法の一例を次に示します。
%# 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;
編集:最大値だけでなく、N個の最高値を取得したい場合は、MAXの代わりにSORTを使用できます(シャカが提案したように)。例 (上記の構造を使用):
>> 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'
于 2009-09-30T13:58:47.007 に答える