如何在MATLAB中的单行中实现此功能(修订版)

如何在MATLAB中的单行中实现此功能(修订版),matlab,optimization,Matlab,Optimization,请帮我把这个for循环减少到一行 我有一组数据集,表示为4D光场数据。这四个指数是u、v、s和t。从数学上讲,我找到了一种将4D光场数据转换到另一个坐标系的方法。新坐标将是先前系统的三维旋转和平移版本 转换光场数据的结果指数为ub、vb、sb、tb。 它们都取决于变量u、v、s、t 很抱歉不清楚,让我提一下,我正在尝试通过某种矩阵转换4D数据集。在下面的代码中,M只是一个3D变换矩阵 f=0.1; n = 11; [u,v,s,t] = ndgrid([1:Size(3)],[1:Size(

请帮我把这个for循环减少到一行

我有一组数据集,表示为4D光场数据。这四个指数是u、v、s和t。从数学上讲,我找到了一种将4D光场数据转换到另一个坐标系的方法。新坐标将是先前系统的三维旋转和平移版本

转换光场数据的结果指数为ub、vb、sb、tb。 它们都取决于变量u、v、s、t

很抱歉不清楚,让我提一下,我正在尝试通过某种矩阵转换4D数据集。在下面的代码中,M只是一个3D变换矩阵

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和tb依赖于u、v、s、t,因此不可能像newLF=LF2那样分配它


现在的问题是如何将这些for循环最小化为一条直线。

图像(或4D数据集)上的坐标变换最好通过源数据的逆坐标变换和插值来处理。也就是说,迭代目标像素值,将这些(整数)坐标转换为(分数)源坐标,然后从源数据中查找值,在像素之间插值


因此,您的第一项工作是反转坐标变换。然后,您只需在数据集上调用
interpn
,再加上ndgrid生成的源像素位置,再加上转换后的像素位置。

在没有数字的情况下运行代码,我不能确定,但是,请在两组输入上尝试
sub2ind