Ну, начните писать! Ешьте программного слона (даже самого маленького) по одному байту за раз!
Как мы формируем разницу двух изображений? Во-первых, преобразуйте их в двойные, если они являются изображениями 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, разбивая ее на управляемые части.
EDIT:
Во многих случаях люди хотят RMSE (среднеквадратичная ошибка), у которой единицы совпадают с вашими исходными числами. Это просто квадратный корень из MSE.