2009-06-16 17 views
2

画像をimreadに書き込んでグレースケールに変換する必要があります。これは正しいですか:MATLABのユーザ定義関数

function trial() 

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

end 

またはそれを書き込むための良い方法はありますか?

答えて

0

あなたの関数は役に立たず、スクリプトになります。なぜなら、関数は引数を取らないからです。

ファイルの最後には終わりが必要ではありません。最後はループや条件文などを終了するためのものです。

+1

実際には、ネストされた関数を使用すると、関数定義でENDが必要になることがあります。この場合はオプションですが、一部の関数構造では必要です。 – MatlabDoug

2

ソリューションは動作しますが、あなたは引数を受け入れることにより、それをより柔軟にすることができたの:

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

この方法では、ファイルの実行まで一括することができます。

+0

ディレクトリ内のすべてのファイルを処理する場合は、このビデオチュートリアルのMATLABのテクニックに従ってください。 http://blogs.mathworks.com/videos/2008/09/09/advanced-matlab-file-name-processing-from-directory-listing/ – MatlabDoug

5

あなたは正しい軌道に乗っていますが、私はDanに、入力引数を追加してより一般的に使用できるようにすることに同意します。ハードコードされたファイル名を使用するたびに変更することは理想的ではありません。

この機能を他人が使用できるように設計されている場合、または自分のためだけであっても、H1 line,help textと入力タイプのチェックを追加することをおすすめします。例:

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 

多くの人がこれらの有用性を過小評価しています。関数を数ヶ月間脇に置いておくと、それを書いた方法を正確に忘れてしまうのは簡単です。ヘルプはあなた(または他の人)にどのように使用するかを思い出させ、エラーチェックは何か間違ったことがあったときに役立つ情報を提供します。また、説明的なH1行を使用すると、LOOKFORを使用して名前を忘れてしまった可能性のある機能を見つけることができます。

1

また、後で使用できるように関数が何かを返すようにしたい場合があります。

function out = trial(imageName) 

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

好きな機能を選択してください。この方法では、次にグレースケールが必要なときにディスクから呼び出す必要はありません。この関数を呼び出すコードの一部で、はるかに簡単に使用できます。

x = trial('image.png') 

すぐにグレースケールイメージを使用すると思われるので、ほとんどの場合、ディスクに書き込むよりも簡単かもしれません。

関連する問題