Предполагая, что ваша матрица 3x3 M
должна быть умножена на значение вашего пикселя p
следующим образом:
new_p = M * p;
(с p
вектором столбца), тогда вы можете преобразоватьn
x m
x3 матрица изображения выглядит следующим образом:
m = 1920;
n = 1080;
img = rand(n, m, 3);
tmp = reshape(img, [], 3); % no copy made
tmp = tmp * M.';
new_img = reshape(tmp, n, m, 3);
Обратите внимание, что здесь мы преобразовали M * p
в p.' * M.'
, поэтому нам не нужно транспонировать изображение, что потребовало быкопирование всех своих данных в новый массив.Транспонирование M
намного дешевле, чем транспонирование tmp
.
Вы можете сделать выше в одной строке, избегая необходимости в массиве tmp
:
new_img = reshape(reshape(img, [], 3) * M.', n, m, 3);