24小时热门版块排行榜    

查看: 868  |  回复: 0

明00媛

金虫 (初入文坛)

[求助] matlab 多峰高斯拟合

各位大神,我有一份pgm文件,通过importdata转成数据进行分析
但是我现在只拟合出一个高斯图像,怎么才能在我的程序基础上编译多个拟合呢?
现给出我的程序和图像
function [ OutArr ] = Graph( NameFile, PlotOut, Angl)
InputVar = nargin;
DAT=importdata(NameFile);

    if (InputVar>2)
     Angle = Angl;
    else
        Angle = 0;
    end

DAT = imrotate(DAT, Angle, 'nearest');
IMG=medfilt2(DAT,[3,3]);      
[md, nd] = size(IMG);
disp({'M=' ,md , 'N=', nd});

Noise = mean(IMG(1:40));

i=0:nd-1;
X2D=i;

if (InputVar >1)&(PlotOut == 'Y')
    Hendl=figure;
    imagesc(IMG);
end
[Max, INmax] = max(IMG);
[Max, IMmax] = max(Max);
Nmax = INmax(IMmax);
disp({'Nmax = ', Nmax; 'Mmax = ', IMmax});      

Top=Nmax+20;   
Bottom=Nmax-20;   
   
Y2D(i+1)=mean(IMG(Bottom:Top,i+1));
Y2D = Y2D-Noise;
Y2D = Y2D/max(Y2D);

gaussEqn = 'a*exp(-((x-b)/c)^2)+d';
startPoints = [1, IMmax, 1, 0];
f = fit(X2D', Y2D', gaussEqn, 'Start', startPoints);
FitGaussD = f(X2D);
Cint = confint(f, 0.95);
OutArr = [f.c; Cint(:,3)];
disp({'averge = ', f.b; 'Sigma = ', f.c});

if (InputVar >1)&(PlotOut == 'Y')
Hendl = figure;
ax = gca;
ax.XTickMode = 'manual'; ax.XTick = 0:25:nd; ax.XLim = [0, nd];
ax.YTickMode = 'manual'; ax.YTick = 0:0.1:1; ax.YLim = [0, 1];

hold on;

plot(X2D, Y2D, ':', 'LineWidth', 2);
plot(X2D, FitGaussD, 'r', 'LineWidth', 2);
legend('Экспериментальные данные','Аппроксимация');
Pred = predint(f,X2D,0.95,'functional','on');

strmax = {['center of mass = ', num2str(f.b, 3)], ['{\sigma} = ', num2str(f.c, 5)]};
text(f.b, 0.2,...
   strmax,'HorizontalAlignment','center', 'FontSize',14);

xlabel('vertical axis  pixel', 'FontSize',12,'FontWeight','bold');
ylabel('intensity', 'FontSize',12,'FontWeight','bold');   
grid on;
hold off;
end

matlab 多峰高斯拟合
屏幕快照 2016-06-17 下午4.52.41.png
回复此楼

» 猜你喜欢

不骄不躁,脚踏实地
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 明00媛 的主题更新
信息提示
请填处理意见