PDA

查看完整版本 : 请帮忙改个错(用lsqcurvefit曲面拟合)


xsunrain
2008-06-17, 15:13
我初学matlab用于拟合曲面
曲面是高斯形式的 但我不会用二维的方法,就把矩阵转化为一维的数组然后用一维的方法做 程序如下

I=imread('E:/011.bmp'); %读取一个图片
J=rgb2gray(I); %将图片转为灰度格式
[m,n]=size(J);
reshape(J,1,m*n); %将图片的数据矩阵转化为一维的数组(我初学,不会用二维的,只能这样)
a=reshape(J,1,m*n);
f=inline('b(1)*exp(-((x-n*floor((x-1)/n)-b(2)).^2+(floor((x-1)/n)+1-b(3)).^2)/b(4)^2)','b','x');%拟合的目标的表达式
x=1:1.0:m*n;
y=double(a(x));
[xx,res]=lsqcurvefit(f,[1,1,1,1],x,y);
xx',res;


但运行出来后 出现错误
??? Error using ==> optim\private\lsqncommon
User supplied expression or inline function ==> b(1)*exp(-((x-n*floor((x-1)/n)-b(2)).^2+(floor((x-1)/n)+1-b(3)).^2)/b(4)^2)
failed with the following error:

Error using ==> inlineeval
Error in inline expression ==> b(1)*exp(-((x-n*floor((x-1)/n)-b(2)).^2+(floor((x-1)/n)+1-b(3)).^2)/b(4)^2)
??? Error using ==> eval
Undefined function or variable 'n'.

Error in ==> lsqcurvefit at 149
[x,Resnorm,FVAL,EXITFLAG,OUTPUT,LAMBDA,JACOB] = ...


有高手能帮忙解释下么?能帮忙改正确了就更好了,谢谢了 如果发错了版,请版主帮忙转一下,谢谢
qq 78264997
e-mail [email protected]

fanxing39
2008-06-19, 00:50
你把你的011.bmp 图 发上来,看下,如何?:lol: 你用的那个拟合方法是最小二乘拟合

xsunrain
2008-06-20, 11:35
图片就是一个光斑的图片 有点大,我不会上传。主要问题好像是我如果把 f 表达式中的 n 换成一个实际的数 就能得到结果。好像是这个地方出现问题了,希望能解释下

未注册
2010-11-25, 17:32
怎么没人回答呀,我也要处理这个问题