图像清晰度评价

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.输入图片

图像清晰度评价_第1张图片

5.对两组结果归一化后如下所示:

 图像清晰度评价_第2张图片

     第14张图片最清晰,与人眼观察结果一致。


对另一组图片进行测试,结果如下:

图像清晰度评价_第3张图片



图像清晰度评价_第4张图片

图像清晰度评价_第5张图片



处理效果上边缘算子明显优于灰度差,但时间上消耗很大。

边缘算子:96.872847 seconds.
灰度差:     4.645993 seconds.





你可能感兴趣的:(图像清晰度评价)