2017-03-15 3 views
0

Ich habe Arbeit an einem Programm erstellt, das ein Bild von einer Münze aufnimmt und dann das Gesicht zu den besten Matlab-Fähigkeiten herauszieht (Beispiel unten). Mit diesem Programm möchte ich mit der Bildverarbeitung experimentieren, ähnlich wie Google Bilder es Benutzern ermöglicht, nach Bildern zu suchen und Ergebnisse zu erhalten, von denen sie glaubt, dass sie ähnlich sind.Matlab - Ergebnisse automatisch generieren

Application Image | Further Application Image Example

Dafür würde ich eine Menge Daten benötigen, um dies zu erreichen und manuell den Schieberegler in meiner Anwendung zu verwenden und 50-100 Ergebnisse für jedes Bild zu generieren würde zu lange dauern. Also habe ich beschlossen, eine neue Schaltfläche zu erstellen, die 100 Ergebnisse generiert, wobei jedes Ergebnis ein anderes gezeichnetes Beispiel liefert.

function slider2_Callback(hObject, eventdata, handles) 
% hObject handle to slider2 (see GCBO) 
% eventdata reserved - to be defined in a future version of MATLAB 
% handles structure with handles and user data (see GUIDATA) 

% Hints: get(hObject,'Value') returns position of slider 
%  get(hObject,'Min') and get(hObject,'Max') to determine range of slider 
global coins_gray; 
global num; 
val=0.5*get(hObject,'Value')-0.5; %Adjusts the intensity of the slider's brightness setting 
imbrightness = coins_gray+val; 
axes(handles.axes3); 
imshow(imbrightness); 
title('Altered Coin Image', 'fontweight', 'bold'); 

[~, threshold] = edge(imbrightness, 'Canny'); 
fudgeFactor = num; 
img_edge = edge(imbrightness, 'Canny', threshold * fudgeFactor); 
axes(handles.axes4) 
imshow(img_edge); 
title('User Drawn Image', 'fontweight', 'bold'); 

oben zeigt, wie die Schieber funktioniert, aber ich bin mir nicht sicher, wie es passen sich automatisch zu arbeiten, wie, wie ich erwähnt habe.

function gatherbutton_Callback(hObject, eventdata, handles) 
% hObject handle to gatherbutton (see GCBO) 
% eventdata reserved - to be defined in a future version of MATLAB 
% handles structure with handles and user data (see GUIDATA) 

%Prompts the user to enter a title for the image gathering process 
prompt = ('Please Enter The Image Name (Do Not Include File Extension): '); 
userInput = input(prompt, 's'); 

counter = 0 
while counter < 100: 
    processFolder = sprintf('M:/Project/MatLab/Coin Image Processing/Image Processing/%s_%s.jpg', userInput, counter); 

    referenceImagePrep = getframe(handles.axes3); 
    drawnImagePrep = getframe(handles.axes4); 
    counter = counter + 1; 
end 

Dies ist, was ich bisher habe. Die Schleife sollte also 100-mal laufen und jedes Mal, wenn sie ausgeführt wird, wird ein neues Bild in das angegebene Verzeichnis gespeichert und sollte weiterlaufen, bis die while-Schleife abgeschlossen ist. Wie passe ich nun meine While-Schleife an, um automatisch die Helligkeit des Referenzbildes zu ändern und dieses Bild dann in den angegebenen Ordner zu speichern.

Antwort

0

Es gibt eine relativ einfache Lösung für Ihr Problem.
Ich kann nicht grantee, dass der Code, nachdem es ...

in gatherbutton_Callback
  1. Set slider2 Wert innerhalb while Schleife Anwendung perfekt funktionieren wird.
  2. Rufen Sie nach dem Einstellen des Werts slider2_Callback auf (simulieren Sie das Schieben des Benutzers).
  3. Hinzufügen drawnow Befehl zum Aktualisieren der GUI.

Hier ist die modifizierte while Schleife:

while counter < 100: 
    %1. Set slider value. 
    set(handles.slider2, 'Value', counter/100); 

    %2. Call `slider2_Callback` (simulate user sliding). 
    slider2_Callback(handles.slider2, eventdata, handles); 

    %3. Call drawnow for refreshing the GUI. 
    drawnow 

    processFolder = sprintf('M:/Project/MatLab/Coin Image Processing/Image Processing/%s_%s.jpg', userInput, counter); 

    referenceImagePrep = getframe(handles.axes3); 
    drawnImagePrep = getframe(handles.axes4); 

    %Save image to file... 

    counter = counter + 1; 
end 

paar Empfehlungen:

  • Verwenden for Schleife statt while Schleife (elegantere in Ihrem Fall): for counter = 0:99.
  • Ersetzen Sie mit getframe durch getimage (besser arbeiten mit Bildern als Frames).
  • Speichern Sie Bilder in tif oder png Format (jpg Format schafft verlustreiche Bildkompression Artefakte).
  • Verwenden Sie imwrite Funktion zum Speichern von Bildern.
Verwandte Themen