当读入图像时,它们被转换为尺寸(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。
答案 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行矩阵(每行是一个颜色分量,每列是一个像素),矩阵乘法,然后重新变形。