我有一个用于线性变换RGB颜色的3x3矩阵。如何使用该矩阵转换RGB图像的色彩空间?我应该遍历所有像素并一一转换吗?
答案 0 :(得分:2)
假定您的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);