Ну, начинай писать! Съешьте слона программирования (даже самого маленького) по одному байту за раз!
Как мы образуем разность двух изображений? Во-первых, конвертируйте их в двойники, если они являются изображениями uint8, как это обычно бывает. СДЕЛАЙ ЭТО! ПОПРОБУЙ ЭТО! Научитесь писать код Matlab, делая это, и делайте это по частям, чтобы вы могли следовать тому, что вы сделали.
Прежде всего, вы не сказали нам, будет ли это MSE по всем трем каналам. Ваша формула говорит, что мы должны получить разные MSE для каждого из красного, зеленого и синего каналов.
double(M1) - double(M2)
Теперь, как бы вы образовали квадрат каждой разности? Используйте оператор .^.
(double(M1) - double(M2)).^2
Далее, среднеквадратическая ошибка подразумевает, что мы берем среднее значение по всем строкам и столбцам. Простой способ сделать это с помощью функции среднего. Этот вызов принимает среднее значение по строкам.
mean((double(M1) - double(M2)).^2,2)
И следующий берет среднее значение по столбцам.
mean(mean((double(M1) - double(M2)).^2,2),1)
Результатом будет вектор 1x1x3. Преобразуйте это в вектор 1x3, используя функцию изменения формы. (Функция сжатия также может помочь.) Упаковав все это в одну строку, мы получим это...
MSE = reshape(mean(mean((double(M1) - double(M2)).^2,2),1),[1,3]);
Если это кажется вам сложным, то лучше всего разбить его на несколько строк с комментариями, которые напомнят вам, что вы сделали на потом.
Но дело в том, что вы создаете операцию в Matlab, разбивая ее на управляемые части.
РЕДАКТИРОВАТЬ:
Во многих случаях людям нужна RMSE (среднеквадратичная ошибка), единицы измерения которой совпадают с вашими исходными числами. Это просто квадратный корень из MSE.
11.09.2010