11种图像清晰度评价函数附MATLAB代码

                                  

本科毕业论文“基于图像处理的自动对焦技术研究”,对焦过程中的一个重要阶段是图像清晰度评价,我用MATLAB实现了4类清晰度评价函数:基于图像梯度的清晰度评价函数、频域评价函数、信息熵评价函数、统计学评价函数,总计11种。

其中基于图像梯度的清晰度评价函数我一部分借鉴他人上传的毕设代码,在此附上链接。

http://www.pudn.com/Download/item/id/1394579.html

一、基于图像梯度的清晰度评价函数 

这类算法的实质是图像处理知识

正焦的清晰图像比模糊的离焦图像边缘更加锐利清晰,边缘像素灰度值变化大,因而有更大的梯度值。在进行图像处理时,将图像看作二维离散矩阵,利用梯度函数获取图像灰度信息,以此来评判图像清晰度。在离散信号中梯度表现为差分形式。常用的梯度函数有:能量梯度函数EOG、Roberts函数、Tenengrad函数、Brenner函数、方差Variance函数、拉普拉斯Laplace函数等等。下面分别对其进行介绍,其中f(x,y)表示对应像素点的灰度值。

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调节函数的灵敏度。表达式如下式所示&#

评论 76
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值