本科毕业论文“基于图像处理的自动对焦技术研究”,对焦过程中的一个重要阶段是图像清晰度评价,我用MATLAB实现了4类清晰度评价函数:基于图像梯度的清晰度评价函数、频域评价函数、信息熵评价函数、统计学评价函数,总计11种。
其中基于图像梯度的清晰度评价函数我一部分借鉴他人上传的毕设代码,在此附上链接。
http://www.pudn.com/Download/item/id/1394579.html
一、基于图像梯度的清晰度评价函数
这类算法的实质是图像处理知识
正焦的清晰图像比模糊的离焦图像边缘更加锐利清晰,边缘像素灰度值变化大,因而有更大的梯度值。在进行图像处理时,将图像看作二维离散矩阵,利用梯度函数获取图像灰度信息,以此来评判图像清晰度。在离散信号中梯度表现为差分形式。常用的梯度函数有:能量梯度函数EOG、Roberts函数、Tenengrad函数、Brenner函数、方差Variance函数、拉普拉斯Laplace函数等等。下面分别对其进行介绍,其中表示对应像素点的灰度值。
1.能量梯度函数(Energy of Gradient,EOG)
将 x 方向和 y 方向的相邻像素的灰度值之差[]的平方和作为每个像素点的梯度值,对所有像素梯度值累加作为清晰度评价函数值,表达式如下所示:
matlab代码如下:
%EOG(Energy Of Grad)
N1 = 5; %要处理的图片张数
A = zeros(1,N1); %存储每一幅图像清晰度评价值
X = zeros(1,N1); %存储做归一化处理后的评价值
tic %计时
for L=1: N1
I=imread([int2str(L),'.jpg']); %连续读取图片
I=double(I);
[M N]=size(I);
FI=0;
for x=1:M-1
for y=1:N-1
% x方向和y方向的相邻像素灰度值只差的的平方和作为清晰度值
FI=FI+(I(x+1,y)-I(x,y))*(I(x+1,y)-I(x,y))+(I(x,y+1)-I(x,y))*(I(x,y+1)-I(x,y));
end
end
A(1,L) = FI;
end
time=toc
%--------------------------------
%对图像清晰度值做归一化处理,线性函数归一化公式
for W = 1:N1
C = max(A);
D = min(A);
E = C-D;
R = (A(1,W) - D)/(E);
X(1,W) = R;
end
%做曲线拟合输出函数曲线
x1=[-20 -10 0 10 20 ];
y1 = [X(1,1) X(1,2) X(1,3) X(1,4) X(1,5)];
[p,S]=polyfit(x1,y1,2);
Y=polyconf(p,x1,y1);
plot(x1,y1,'y');
hold on;
2.Roberts函数
Roberts函数与能量梯度函数相似,它是利用对角方向像素点灰度值之差。将4个相邻像素点的灰度值交叉相减的平方和作为每个像素点的梯度值,对所有像素梯度值累加作为清晰度评价函数值,表达式如下式所示:
%Roberts
N1 = 5;
A = zeros(1,N1);
X = zeros(1,N1);
tic
for L=1: N1
I=imread([int2str(L),'.jpg']);
I=double(I);
[M N]=size(I);
FI=0;
%Robert算子原理,对角方向相邻的两像素之差
for x=1:M-1
for y=1:N-1
FI= FI + (abs(I(x,y)-I(x+1,y+1))+abs(I(x+1,y)-I(x,y+1)));
end
end
A(1,L) = FI;
end
time=toc
for W = 1:N1
C = max(A);
D = min(A);
E = C-D;
R = (A(1,W) - D)/(E);
X(1,W) = R;
end
x1=[-20 -10 0 10 20 ];
y1 = [X(1,1) X(1,2) X(1,3) X(1,4) X(1,5)];
[p,S]=polyfit(x1,y1,2);
Y=polyconf(p,x1,y1);
plot(x1,y1,'c');
hold on;
3.Tenengrad函数
采用Sobel算子提取像素点水平方向和垂直方向的梯度值,Tenengrad函数定义为像素点梯度的平方和,并为梯度设置一个阈值T调节函数的灵敏度。表达式如下式所示&#