Пользовательские функции в MATLAB - PullRequest
2 голосов
/ 16 июня 2009

Мне нужно написать функцию для imread изображения и преобразовать его в оттенки серого. Это правильно:

function trial()

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

end

или есть лучший способ написать это?

Ответы [ 4 ]

5 голосов
/ 16 июня 2009

Вы на правильном пути, но я согласен с Dan в том, что вы должны добавить входные аргументы, чтобы сделать его более удобным для использования. Необходимость менять жестко заданные имена файлов каждый раз, когда вы хотите их использовать, не идеальна.

Если эта функция предназначена для использования другими людьми, или даже если она предназначена только для вас, я бы предложил добавить строку H1 , текст справки и проверку типа ввода. Например:

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 для поиска функций, имена которых вы, возможно, забыли.

2 голосов
/ 16 июня 2009

Это решение работает, но вы можете сделать его более гибким, приняв аргументы:

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

Таким образом, вы можете пакетно запускать файлы.

1 голос
/ 16 июня 2009

Кроме того, вы можете разрешить функции возвращать что-то, чтобы вы могли использовать ее позже.

function out = trial(imageName)

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

Или любую другую функцию, которая вам нравится. Таким образом, вам не нужно вызывать его с диска в следующий раз, когда вам понадобится шкала серого. Вы можете использовать его намного проще в части кода, вызывающей функцию.

x = trial('image.png')

В большинстве случаев это может быть проще, чем запись на диск, так как я полагаю, вы будете использовать изображение в градациях серого сразу после.

0 голосов
/ 16 июня 2009

Как таковая, ваша функция бесполезна и может быть просто скриптом, поскольку функция не принимает аргументов.

вам не нужен конец в конце вашего файла - конец предназначен для завершения цикла, условных выражений и т. П.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...