用CCD可以采集任意位置的激光光斑。
采集到的结果大概类似下图。然后可以用MATLAB或者其他工具处理光斑数据,分析其半径尺寸。
为了分析尺寸,要知道光斑半径的定义是振幅下降到最大值1/e的横向尺寸。
数据处理时候只需要把光斑图像矩阵的中心一行数据提取出来,然后做高斯拟合,得到的均方根值就是光斑半径。
如果你用MATLAB处理图像,给你一个指导学生毕设时候写好的程序。
function [radius] = radius_calculate( image )
% [radius] = radius_calculate( image )
% 计算光斑图像(image)的光斑半径(radius)
a=double(image);
a=a(:,:,1); %a为单层待处理图像数据
%去除高斯本底
reshape_a=reshape(a,1,[]);
sorta=sort(reshape_a);
meana=mean(sorta(1:size(sorta,2)*2/3));
a=a-meana;
a_signal=a;
a_signal(a_signal<20)=0; %a_signal为提取的光斑部分信号,提取阈值选20
%求a_signal质心
a_sum=sum(a_signal,2); %a_signal逐行加和
b_sum=1:size(a_sum);
b_sum=b_sum';
cc=a_sum.*b_sum;
centroid=sum(cc)/sum(a_sum);
centroid=round(centroid);
%求光斑半径
aa=a(centroid,

; %处理a的质心行。
bb=1:size(aa,2);
fx=@(k,x)k(1)*exp(-((x-k(2))./k(3)).^2);
%设定初值
a1=max(aa); %设为数据最大值
b1=mean(bb(aa==max(aa))); %设为最大值对应的横坐标
c1=20; %预估弥散半径
k=[a1 b1 c1 ];
lb=[-100 -100 -10];
ub=[500 1300 100]; %拟合上下限
k=lsqcurvefit(fx,k,bb,aa,lb,ub);
pixel_size=7; %CCD每个像素对应的尺寸(单位:微米),根据设备参数设置。
radius=k(3)*sqrt(2)*pixel_size; %单位um
end