Если вы хотите отобразить изменения «между каждым пикселем», то то, что вы показываете, больше не означает квадратов ошибок - усреднение не происходит. (Если вы не намерены усреднять значения по всем трем цветам, но я не рекомендую: изменения в R, G, B не одинаково заметны для зрительной системы человека. Если вы действительно должны это сделать, вы можете взвесить их скажем, 2: 4: 1 для чего-то более репрезентативного, но это все еще нерегулярно и вряд ли даст очень точное представление о том, какие различия будут выглядеть самыми большими.)
Конечно, вполне разумно хотеть видеть ошибки на пиксель, но я бы не рекомендовал использовать линейный график для их отображения; это скорее сбивает с толку, чем информативно. Скорее отобразите их как изображение:
errs = (double(A)-double(B)).^2;
image(errs / max(errs(:)));
axis image;
, который вы можете затем сравнить на глаз с A
и B
, чтобы увидеть, какие области / особенности / ... изображения соответствуют худшим ошибкам. Яркость и цвет каждого пикселя указывают количество ошибок и то, как они распределяются по плоскостям R, G и B.
С другой стороны, возможно, что вам действительно нужно, это среднеквадратическая ошибка по отдельным строкам или столбцам изображения. В этом случае после создания errs
, как указано выше, используйте mean
для вычисления значения строки или столбца; это даст вам изображение размером 256 на 1 на 3 или изображение 1 на 200 на 3; теперь я бы предложил построить кривые R, G, B отдельно, если вы (возможно, глупо, на мой взгляд, как упоминалось выше) не настаиваете на усреднении плоскостей.
row_errs = mean(errs,2); % this is now of size [n,1,3]
сейчас row_errs(:,:,1)
- это вектор красных ошибок MS-между строками, row_errs(:,:,2)
- вектор зеленых ошибок MS-между строками и т. Д. Вы можете передать их в plot
.