2009-09-30 27 views
10

私はMATLABのカラーヒストグラムの交点を使って画像検索システムを使っています。このメソッドは私に以下のデータを与えます:ヒストグラムの交点距離を表す実数と画像ファイル名。それらは異なるデータ型であるため、2つのフィールドを持つ構造体配列に格納してから、この構造体を.matファイルに保存します。今度は、ヒストグラムの交点距離が最も大きい画像を検索するために、この構造をヒストグラムの交点距離に従って降順で並べ替える必要があります。私はこのデータをソートするために多くの方法を試みましたが、結果はありませんでした。この問題を解決するのを手伝ってください。MATLABで構造体配列をソートする方法は?

答えて

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; 

EDIT:あなたはNの最高値を取得したい場合は、だけではなく、 MAXの代わりにSORTを使用できます(as Shaka suggested)。たとえば(上記の構造を使用):

>> 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

を構築するには

**猫(1、s.value)**返事をどうもありがとうございます – Amro

+0

値を連結するために、私がしようとしますこの機能を使用する。私のmatlab codを送るためにあなたのメールアドレスを取得できますか? ありがとう –

+0

@zenab:私のメールアドレスは私のプロフィールにあります。あなたが直接議論したいことがあれば、私には気をつけてください。 – gnovice

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); 
+0

注:ソートするには、次のように入力します。ファイル名(または任意の文字列)を指定すると、 '[〜、order] = sort({s.file});'、次に 'sortedStruct = s(order);'となります。 Matlabの将来のバージョンで実装されるまで、 '' descend''を使用することはできません。 –

関連する問題