Линейные уравнения с многомерными матрицами [Modified] - PullRequest
0 голосов
/ 15 марта 2011

Существует система из 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, который должен был быть,Почему это так?Пожалуйста, помогите

1 Ответ

0 голосов
/ 15 марта 2011

Пространства 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, чтобы удалить одноэлементные измерения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...