在八度中线性转换RGB图像的色彩空间

时间:2019-04-08 20:27:39

标签: octave color-space

我有一个用于线性变换RGB颜色的3x3矩阵。如何使用该矩阵转换RGB图像的色彩空间?我应该遍历所有像素并一一转换吗?

1 个答案:

答案 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);