Если вы не уверены, что возвращает функция MATLAB или почему, вы всегда должны сначала выполнить одно из следующих действий:
Введите help >functionName<
или doc >functionName<
в командном окне, в вашем случае: doc max
. Это покажет вам необходимую обязательную информацию об этой конкретной функции, например, что нужно вставить и что будет выводиться.
В случае функции max
это дает следующие результаты:
M = max (A) возвращает максимальное количество элементов массива.
Если A - вектор, то max (A) возвращает максимум A.
Если A - матрица, то max (A) - это вектор строки, содержащий максимум
значение каждого столбца.
Если A - многомерный массив, то max (A) действует вдоль первого
измерение массива, размер которого не равен 1, рассматривая элементы как
векторы. Размер этого измерения становится равным 1, а размеры всех
другие размеры остаются прежними. Если A пустой массив, первый
измерение имеет нулевую длину, тогда max (A) возвращает пустой массив с
такой же размер как A
Другими словами, если вы используете max()
для матрицы, она выведет вектор, который содержит максимальное значение каждого столбца (первое не-одноэлементное измерение). Если вы используете max()
для матрицы A
размера m x n x 3
, это приведет к матрице максимальных значений размера 1 x n x 3
. Так что это отвечает на ваш вопрос:
Я не совсем уверен, что он возвращает (другой многомерный массив?)
Двигаемся дальше:
Я думал, что это работает нормально. Точно так же я использовал мин трижды. Моя логика заключалась в том, что я получал минимальное значение пикселя во всех трех цветовых плоскостях.
Это правильно. Кроме того, вы можете использовать max(A(:))
и min(A(:))
, что эквивалентно, если вы просто ищете значение.
И после выполнения описанной выше операции я получил изображение, которое, казалось, имело только 0 или 1 значение, и между ними нет значения, которое кажется неправильным. Это как-то связано с округлением до целого числа / с плавающей точкой?
Мы не можем знать, почему это происходит, если вы не публикуете минимальный, полный и проверяемый пример вашего кода. Это может быть потому, что ваши переменные имеют определенный тип, или это может быть из-за ошибки в ваших вычислениях.
Другой подход, который я пробую, - это работать на всех цветовых плоскостях отдельно, как здесь. Но так ли это правильно?
Это зависит от того, каков конечный результат. Нормализация каждого цвета (красный, зеленый, синий) приведет к другому результату по сравнению с одновременной нормализацией значений (во всяком случае, в 99% случаев).