clear
close all
clc
%计算亮度均匀性,适合双激光图
rootFolder = fullfile('D:\20160112光电所测试\20160112光电所测试-同为&精英', '平直度&均匀性测试');
imgSets = imageSet(rootFolder);
Index=imgSets.ImageLocation(:);%存储顺序图像遍历目录
X=15;%观察实验条件下的平均背景灰度,不同实验条件的数据需要根据实际图像修正X值
Date = zeros(imgSets.Count(1,1),1);
for g=1:imgSets.Count(1,1);
I0=read(imgSets,g);
[m,n]=size(I0);
%初步滤除背景噪音
for j=1:n;
for i=1:m;
if I0(i,j)<=X
I0(i,j)=0;
end
end
end
I=I0;I1=I0;I2=I0;
%分离上下两道激光,同时作单调性规定
for j=1:n
aa=0;A=zeros(2);
for i=2:m-1
if I(i,j)>=I(i-1,j)&&I(i,j)>=I(i+1,j)&&I(i,j)-X>max(I(:,j))*0.3
aa=aa+1;
A(aa)=i;
if aa==2
if abs(A(2)-A(1))<15
A(2)=0;
aa=1;
else
break
end
end
end
end
if A(1)==0&&A(1)==m
I1(:,j)=zeros(m,1);
end
for i=A(1)-1:-1:2
if I1(i-1,j)>I1(i,j)
I1(i-1,j)=I1(i,j);
end
end
for i=A(1)+1:m-1
if I1(i+1,j)>I1(i,j)
I1(i+1,j)=I1(i,j);
end
end
if A(2)==0&&A(2)==m
I2(:,j)=zeros(m,1);
end
for i=A(2)-1:-1:2
if I2(i-1,j)>I2(i,j)
I2(i-1,j)=I2(i,j);
end
end
for i=A(2)+1:m-1
if I2(i+1,j)>I2(i,j)
I2(i+1,j)=I2(i,j);
end
end
end
%截取激光中心
a=zeros(0);
for j=1:n;
if max(I1(:,j))<=0.5*sum(max(I1))/n
a=[a,j];
end
end
I1(:,a)=[];
a=[1:round(0.1*length(I1(1,:))),round(0.9*length(I1(1,:))):length(I1(1,:))];
I1(:,a)=[];
a=zeros(0);
for j=1:n;
if max(I2(:,j))<=0.5*sum(max(I2))/n
a=[a,j];
end
end
I2(:,a)=[];
a=[1:round(0.1*length(I2(1,:))),round(0.9*length(I2(1,:))):length(I2(1,:))];
I2(:,a)=[];
[~,M]=max(I1);
y=M;
x = 1:length(I1(1,:));
p=polyfit(x,y,1);
x1 = x;
y1 = polyval(p,x1);
N=y-y1;
a=[];
for i=1:length(N);
if N(i)>15
a=[a,i];
end
end
N(a)=[];
Date(g,1)=100*(max(N)-min(N))/length(I(1,:));
[~,M]=max(I2);
y=M;
x = 1:length(I2(1,:));
p=polyfit(x,y,1);
x1 = x;
y1 = polyval(p,x1);
N=y-y1;
a=[];
for i=1:length(N);
if N(i)>15
a=[a,i];
end
end
N(a)=[];
Date(g,2)=100*(max(N)-min(N))/length(I(1,:));
end