是否可以将3x3矩阵(颜色变换)与秩3张量/ 3D矩阵(彩色图像)相乘?

时间:2014-08-18 23:03:00

标签: matlab matrix

当读入图像时,它们被转换为尺寸(x,y,3)的矩阵/张量,其中最后一个用于R,G,B通道。

我希望应用颜色空间转换,这是我想要应用于每个像素的3x3矩阵。所以我在这里要做的是一个“组件明智的”矩阵向量乘法。

这可以用matlab / octave完成吗?我正在使用八度音,但似乎有一种方法与matlab我应该有八度的战斗机会。

我只是得到这样的东西:

octave:15> B
B =

   0.9465229   0.2946927  -0.1313419
  -0.1179179   0.9929960   0.0073716
   0.0923046  -0.0464579   0.9946464

octave:16> B * Y
error: invalid conversion of NDArray to Matrix

我想我只需要手动执行嵌套for循环。但即使我尝试这个:

Blena = lena; %// copy the structure -- here lena is a rgb image of type double
for i=1:rows(lena)
  for j=1:columns(lena)
    Blena(i,j) = B * lena(i,j,:);
  endfor
endfor

lena(i,j,:)仍然是NDArray。

1 个答案:

答案 0 :(得分:1)

不确定。你只需要一些reshape

im = rand(100,150,3); %// example "image"
T = rand(3,3); %// example transform matrix
result = reshape((T * reshape(im, [], 3).').', size(im));

这基本上将原始图像排列成3行矩阵(每行是一个颜色分量,每列是一个像素),矩阵乘法,然后重新变形。