1.灰度差
function out_val=difference_absolute(img);
I=rgb2gray(img);
[m,n]=size(I);
f=0.0;
I=double(I);
for x=1:m-1;
for y=1:n-1;
Ix=I(x+1,y)-I(x,y);
Iy=I(x,y+1)-I(x,y);
f=f+abs(Ix)+abs(Iy);
end
end
out_val=f/m/n;
2.边缘强度
function outval = edge_intensity(img)
% OUTVAL = EDGE_INTENSITY(IMG)
if nargin == 1
img=rgb2gray(img);
img = double(img);
% Create horizontal sobel matrix
w = fspecial('sobel');
% Get the size of img
[r c ] = size(img);
gx = imfilter(img,w,'replicate');
gy = imfilter(img,w','replicate');
for m = 1 : r
for n = 1 : c
g(m,n) = sqrt(gx(m,n)*gx(m,n) + gy(m,n)*gy(m,n));
end
end
outval = mean(mean(g));
else
error('Wrong number of input!');
end
3.main
clear all;
close all;
clc;
PathName = '.\2\';
FileName = '.jpg' ;
n=20
tic
for ii=1:n
imageName=strcat(PathName,num2str(ii),FileName);
im = imread(imageName);
a(ii)=difference_absolute(im);
b(ii)=edge_intensity(im);
end
toc;
a=a/max(a);
b=b/max(b);
figure(1);plot(a,'-r+');hold on
plot(b,'-b*');hold on
xlabel('len.s position');
ylabel('value');
title('清晰度评价函数');
4.输入图片
5.对两组结果归一化后如下所示:
第14张图片最清晰,与人眼观察结果一致。
对另一组图片进行测试,结果如下:
处理效果上边缘算子明显优于灰度差,但时间上消耗很大。
边缘算子:96.872847 seconds.
灰度差: 4.645993 seconds.
关于数据的来源:笔者在一台伺服机器上按照固定距离移动相机镜头拍摄得到,以共享到下面的链接,可自由使用
测试样本:图像清晰度评价测试样本-其它其他资源-CSDN下载