Результирующие индексы преобразованных данных светового поля: ub, vb, sb, tb. Каждый из них зависит от переменных u, v, s, t.Как реализовать эту функцию в одной строке в MATLAB
Извините за то, что неясно, позвольте мне упомянуть, что я пытаюсь преобразовать 4D-набор данных через какую-то матрицу. В приведенном ниже коде M просто матрица трехмерного преобразования.
f=0.1;
n = 11;
[u,v,s,t] = ndgrid([1:Size(3)],[1:Size(4)],[1:Size(1)],[1:Size(2)]);
alpha = M(3,1)*s+M(3,2)*t+M(3,3)*nf;
beta1 = M(1,1)*u+M(1,2)*v+M(1,4);
beta2 = M(2,1)*u+M(2,2)*v+M(2,4);
C = M(3,1)*u+M(3,2)*v+M(3,4);
D1 = M(1,1)*s+M(1,2)*t+M(1,3)*nf;
D2 = M(2,1)*s+M(2,2)*t+M(2,3)*nf;
ub = -D1.*C./alpha+beta1;
vb = -D2.*C./alpha+beta2;
sb = nf*D1./alpha;
tb = nf*D2./alpha;
for s = 1:Size(1)
for t = 1:Size(2)
for u = 1:Size(3)
for v = 1:Size(4)
newLF(sb(u,v,s,t),tb(u,v,s,t),ub(u,v,s,t),vb(u,v,s,t)) = LF2(s,t,u,v);
end;
end;
end;
end;
Теперь, так как UB, VB, SB и ТБ в зависимости от U, V, S, T, следовательно, это не возможно, чтобы назначить его как newLF = LF2;
Теперь вопрос заключается в том, как минимизировать эти циклы для одной линии.
Немного неясно, пытаетесь ли вы ['переставить'] (http://www.mathworks.com/help/matlab/ref/permute.html)? 'newLF = перестановка (LF2, [3 4 1 2]);'? – Shai
Объясните словами, что вы пытаетесь достичь с помощью своей функции и каковы ее входы. – gire
Также укажите небольшой набор значений выборки и ожидаемый результат, чтобы мы знали, находимся ли мы на правильном пути. В противном случае вы просто тратите время. – kkuilla