私はボタン(SAVE)を押すと、いくつかのフィールドの値をとり、特定の関数を計算し、その結果をデータに保存する簡単なGUIを作成しました構造。 私はこのデータ構造をプログラムの外部にしたい、つまりMatlabの出口に残しておき、プログラムの次のオープニングでこのデータ構造を利用可能でアップグレード可能でなければなりません。入れ子なしで既存の.matファイルにデータ構造を保存する
これを行うには、必要に応じて保存して読み込む変数data
を使用しました。
問題は正しく動作しないということです。data
の構造が不思議に満ちています。
あなたが見ることができるように、他のではなく、リストの中の構造があります:
保存された構造はこれです:
は、私はあなたにおそらくもっと説明であるGIFを表示します要素。どうして?
Iは、(nは画像の数である)、n個の要素を含むdata
構造を有したいと各要素は9つのフィールド(name
、category
、siftOctaves
、siftLevels
、siftPeak
、siftEdge
、numFeatures
、siftFeatures
、siftDescriptors
から成り)。
%% SAVE BUTTON
function pushSiftSave_Callback(hObject, eventdata, handles)
% hObject handle to pushSiftSave (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global data;
try
% Vector of string = name of all possible images
imgs = createListOfImages('../img/');
% Get selected image
imgName = get(handles.listbox, 'Value');
imgPath = strcat('../img/', imgs(imgName));
imgPath = imgPath{1};
I_or = imread(imgPath);
I = single(rgb2gray(I_or));
% Get some parameters enter by user
[siftOctaves, siftLevels, siftPeak, siftEdge] = takeSiftParameters(handles.editSiftOctaves, handles.editSiftLevels, handles.editSiftPeakTh, handles.editSiftEdgeTh, I_or);
% Sift function
[f, d] = vl_sift(I, 'Octaves', siftOctaves, 'Levels', siftLevels, 'PeakThresh', siftPeak, 'EdgeThresh', siftEdge);
% Number of features
perm = randperm(size(f, 2));
numFeatures = size(perm, 2);
% Check if file exists
if exist('../data/data.mat', 'file') == 2
data = load('../data/data');
else
data = struct;
end
% Insert information in data structure
data = saveSiftInformation(data, imgs, imgPath, siftOctaves, siftLevels, siftPeak, siftEdge, f, d, numFeatures);
catch
ErrorMessage = lasterr;
msgbox(ErrorMessage);
disp(ErrorMessage);
end
function [data] = saveSiftInformation(data, imgs, imgPath, siftOctaves, siftLevels, siftPeak, siftEdge, features, descriptors, numFeatures)
imgPath = imgPath(8 : end);
% Find index of image
i = find((ismember(imgs, imgPath)));
% Update data structure
data(i).name = imgPath;
data(i).category = imgPath(1 : end-6);
data(i).siftOctaves = siftOctaves;
data(i).siftLevels = siftLevels;
data(i).siftPeak = siftPeak;
data(i).siftEdge = siftEdge;
data(i).numFeatures = numFeatures;
data(i).siftFeatures = features;
data(i).siftDescriptors = descriptors;
% Save data
save('../data/data', 'data');
end
%% SAVE & QUIT BUTTON.
function pushQuit_Callback(hObject, eventdata, handles)
% hObject handle to pushQuit (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global data;
assignin('base', 'data', data);
ありがとう:
これは、コードの一部です!
OPは、構造体配列の場合と協力しています。この場合、 '-struct'オプションはデータを保存するときには使用できません。 –
@il_raffa、そうです。ありがとうございました。しかし、一時変数は必要ありません! – thewaywewalk