2009-06-16 31 views
2

Ich muss eine Funktion auf imread ein Bild schreiben und es in Graustufen konvertieren. Ist das korrekt:Benutzerdefinierte Funktionen in MATLAB

function trial() 

O = imread('m1.png'); 
G = rgb2gray(O); 
imwrite(G,'s','jpg'); 

end 

oder gibt es eine bessere Möglichkeit, es zu schreiben?

Antwort

0

Wie es ist, ist Ihre Funktion irgendwie nutzlos und könnte nur ein Skript sein, da die Funktion kein Argument benötigt.

Sie brauchen nicht Ende am Ende Ihrer Datei - Ende ist für Endlosschleife, Bedingungen und dergleichen.

+1

Tatsächlich kann END bei der Verwendung verschachtelter Funktionen in der Funktionsdefinition benötigt werden. In diesem Fall ist es optional, aber für einige Funktionsstrukturen wird es benötigt. – MatlabDoug

2

Diese Lösung funktioniert, aber man konnte durch die Annahme Argumente es flexibler machen:

function trial(inputName, outputName) 
    o = imread(inputName); 
    g = rgb2gray(o); 
    imwrite(g, outputName, 'jpg') 

Auf diese Weise können Sie Batch-up-Datei ausgeführt.

+0

Wenn Sie alle Dateien in einem Verzeichnis verarbeiten möchten, sollten Sie diesem Video-Lernprogramm zur Technik in MATLAB folgen. http://blogs.mathworks.com/videos/2008/09/09/advanced-matlab-file-name-processing-from-directory-listing/ – MatlabDoug

5

Sie sind auf dem richtigen Weg, aber ich stimme mit Dan überein, dass Sie Eingabeargumente hinzufügen sollten, um es allgemein verwendbar zu machen. Es ist nicht ideal, die fest codierten Dateinamen jedes Mal zu ändern, wenn Sie sie verwenden möchten.

Wenn diese Funktion für andere zu verwenden ist, oder wenn es nur für Sie selbst ist, würde ich vorschlagen, H1 line, help text, und Eingangstyp Überprüfung hinzufügen. Zum Beispiel:

function make_grayscale(inFile,outFile) 
% MAKE_GRAYSCALE Converts an RGB image to grayscale 
% MAKE_GRAYSCALE(INFILE,OUTFILE) converts a truecolor RGB image stored in 
% INFILE to a grayscale intensity image and writes it to OUTFILE. 

    if ~ischar(inFile) || ~ischar(outFile), 
    error('File name arguments must be character strings!'); 
    end 

    ...(rest of function)... 

end 

Viele Menschen unterschätzen, wie nützlich diese Dinge sind. Wenn Sie eine Funktion für ein paar Monate beiseite legen, ist es leicht zu vergessen, genau wie Sie es geschrieben haben, um sich zu verhalten. Die Hilfe erinnert Sie (oder andere) daran, wie Sie sie verwenden können, und die Fehlerprüfung hilft Ihnen dabei, nützliche Informationen zu geben, wenn Sie etwas falsch gemacht haben. Mit einer beschreibenden H1-Zeile haben Sie außerdem die Möglichkeit, LOOKFOR zu verwenden, um Funktionen zu finden, bei denen Sie die Namen vergessen haben könnten.

1

Zusätzlich können Sie die Funktion etwas zurückgeben lassen, damit Sie sie später verwenden können.

function out = trial(imageName) 

O = imread(imageName); 
G = rgb2gray(O); 
%imwrite(G,'s','jpg'); 
out = G; 
end 

Oder welche Funktion Sie auch mögen. Auf diese Weise müssen Sie es beim nächsten Mal, wenn Sie die Graustufen benötigen, nicht von Ihrer Festplatte aus aufrufen. Sie können es viel einfacher in einem Teil des Codes verwenden, der die Funktion aufruft.

In den meisten Fällen ist es einfacher als das Schreiben auf die Disc, da ich davon ausgehe, dass Sie das Graustufenbild sofort verwenden werden.