2011-04-06 30 views
0

我需要使用矩阵的每个连续行的傅立叶函数来避免使用for循环。我尝试使用单元格数组,但不知道如何合适地使用它。 我的计划是如何将matlab拟合函数应用于矩阵的每一行

I=imread('test.tif','tif'); 
I=double(I); 
nat=num2cell(I,1); 
wy_I=cellfun(@size,nat, 'UniformOutput', false); 
we_I=cellfun(@(x)1:x(1), wy_I, 'UniformOutput', false); 
wyn=cellfun(@(x,y)fit(x',y,'fourier1'), we_I, nat); 

它给??? Error using ==> cellfun cfit type is not currently implemented.大概单元阵列是不是这个问题的解决方案。 如何解决这个问题? 感谢

更新

wyn=cellfun(@(x,y)fit(x',y,'fourier1'), we_I, nat, 'UniformOutput',false); 

作品没有错误,但WYN只有空单元格
我测试了一行

j=cell2mat(we_I(1,1)) 
k=cell2mat(nat(1,1)) 
z=fit(j',k,'fourier1') 

z包含模型
我良好的价值观在cellfun中使用语法做错了什么,但不知道什么

+1

对一个图像的每一行拟合一个函数是一个非常好的for循环。只要调用'cellfun',你就会失去可读性,但不会有明显的性能提升。 – Jonas 2011-04-06 20:37:27

回答

1

在本例中,FIT函数返回cfit类型的对象。该错误似乎表明CELLFUN无法将这些对象收集到类型为cfit的数组中以作为输出返回。我会尝试通过将'UniformOutput',false添加到最后一行来尝试返回cfit对象的单元阵列

+0

thx帮助设置UniformOutput对于错误工作正常,但cellfun返回空单元阵列 – bartek 2011-04-06 21:14:47

+0

@bartek:奇怪的是,它对我来说工作正常(MATLAB R2010b)。你使用什么版本?你的图像是2D还是3D? – gnovice 2011-04-07 18:06:10

相关问题