Пространства R, G и B ортогональны.Таким образом, вы можете решить каждый из этих наборов независимо.Проблема здесь в том, что mtimes
, который является вашим оператором умножения матриц, не принимает входные данные 3D.
Чтобы решить эту проблему, вы можете перебрать все R, G и B и использовать linsolve для каждой из результирующих 2D матриц.Обычно я не рекомендовал бы циклы для чего-либо в MATLAB, но здесь не будет заметных накладных расходов, поскольку в цикле всего 3 итерации.
Ваш ответ не будет отличаться от того, который был бы, если бы вы решили их все за один раз (если бы это было возможно), потому что три пробела независимы.
EDIT
То, как вы написали свои уравнения, xi
образуют матрицу коэффициентов, а Ai
- неизвестные.Система уравнений может быть записана компактно как XY=Z
, где X
- трехмерная матрица, составленная из коэффициентов xi
для каждого цветового пространства, RGB
;Y
- это двумерная матрица с вектором [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
Вам придется настроить матрицы X
, Y
и Z
в соответствии с вашей проблемой,Полезно сохранить зацикленное измерение (в данном случае colorspace
) как самое внешнее измерение, в противном случае вам придется использовать squeeze
, чтобы удалить одноэлементные измерения.