具有多维矩阵的线性方程[修改]

时间:2011-03-15 15:05:15

标签: matlab image-processing

有一个由矩阵组成的3个线性方程组,由RGB图像表示。说

A = A1*x1 + A2*x2 + A3*x3    ......(Eq 1)
B=  A1*x4 + A2*x5 + A3*x6   ........(Eq 2)
C=  A1*x7 + A2*x8 + A3*x9   ........(Eq 3)

每个都是相同维度的3D。我执行了以下

A11=rgb2gray(A1);
x11=rgb2gray(x1);
A11 =double(A1) ; x11 = double(x11); b = A1*x1;

opts.UT = true; opts.TRANSA = false;
y1 = linsolve(x1,b,opts); 
imshow(y1);

%目标是获得A1,A2,A3 在这样做时,以下问题浮出水面: 1.错误 输出y1与A1不一样,应该是A1。为什么会这样?请帮忙

1 个答案:

答案 0 :(得分:0)

R,G和B空间是正交的。因此,您可以独立地解决每个集合。这里的问题是mtimes,它是您的矩阵乘法运算符,不接受3D输入。

要解决此问题,您可以遍历R,G和B中的每一个,并对每个生成的2D矩阵使用linsolve。通常情况下,我不建议在MATLAB中使用任何循环,但是在这里,由于循环中只有3次迭代,所以不会有任何可辨别的开销。

如果您一次性解决所有这些问题(如果可能的话),您的答案将与您的答案没有任何不同,因为这三个空格是独立的。

修改

你编写方程的方式,xi形成系数矩阵,Ai是未知数。方程组可以紧凑地编写为XY=Z,其中X是由系数组成的3D矩阵,xi用于每个颜色空间RGB; Y是一个2D矩阵,每个颜色空间中都有一个向量[A1, A2, A3]',而Z也是每个颜色空间中带有向量[A, B, C]'的二维矩阵。

假设色彩空间是最后一个维度,您可以尝试

[xPixels,yPixels,colorSpace]=size(X);
Y=zeros(yPixels,colorspace);
opts.UT=true; opts.TRANSA=false;

for i=1:colorspace
    Y(:,i)=linsolve(X(:,:,i),Z(:,i),opts);
end

您必须根据您的问题设置矩阵XYZ。保持循环维度(在本例中为colorspace)作为最外层维度是有帮助的,否则,您必须使用squeeze来删除单例维度。