• matlab练习程序(图像自动聚焦)


    自动聚焦需要评判图像的模糊或者清晰程度。

    当然,真正聚焦还需要配合硬件,我现在已经不搞硬件了,所以也就不去关心那一方面了。

    主要有三种评判方法:

    1.灰度方差法

    评判图像灰度的变化程度,我先使用了全局灰度方差,不过效果不好。又实验了局部灰度方差,不过由于运算量的问题,也没做出什么结果。

    2.边缘评判法

    这个很简单了,通过对图像进行边缘检测,比如sobel,prewitt,roberts等等各种边缘检测吧,然后找出边缘最丰富的那一张图片。

    3.能量法

    图像细节越丰富,傅里叶分解后的频率肯定越多,所以能量也能作为一种评判标准。

    我这里的实验图像序列在这里可以下到

    实验结果,图中红色是sobel评判,绿色是二阶拉普拉斯评判,蓝色是能量评判,最后结果是一样的。

    代码如下:

    clear all;
    close all;
    clc;
    re=[];
    ws=fspecial('sobel');
    wl=[1 -2 1]; %这里为二阶的,wl=[1 -1]一阶的也行
    for i=1:92
        s=[];
        filename=strcat(num2str(i),'.jpg');
        img=imread(filename);
        img=mat2gray(rgb2gray(img));
        [m n]=size(img);
        
        img1=imfilter(img,ws,'replicate');  %sobel方法聚焦
        img2=imfilter(img,ws','replicate');
        imgn=sqrt(img1.^2+img2.^2);
        s=[s sum(imgn(:))];
        
        img1=imfilter(img,wl,'replicate');   %二阶拉普拉斯方法聚焦
        img2=imfilter(img,wl','replicate');
        imgn=sqrt(img1.^2+img2.^2);
        s=[s sum(imgn(:))];
     %{                            
        %灰度方差聚焦,全局方差好像不行,局部的在这里,运行时间太长了没试
        imgn=zeros(m,n);
        for p=2:m-1
           for q=2:n-1 
                u=mean(mean(img(p-1:p+1,q-1:q+1)));
                imgn(p,q)=mean(mean((u-img(p-1:p+1,q-1:q+1)).^2));
           end
        end
        s=[s sum(imgn(:))];
     %}
        f=fft2(img);       %能量方法聚焦
        s=[s sum(sum(sqrt(imag(f).^2+real(f).^2)))]; 
        re=[re;s];
    end
    
    col=['r','g','b'];
    for i=1:3
        [junk index]=max(re(:,i));
        index
        plot(mat2gray(re(:,i)),col(i));  %为了合理显示,全部数据压缩到0-1之间
        hold on;
    end
  • 相关阅读:
    vs2005设置断点不能调试问题(方法三为首选项,一般都可以解决)
    SQL中内连接和外连接的问题!
    javascript读写删cookie的简单方法
    数据库语句 select * from table where 1=1 的用法和作用
    gridview 和repeater 添加序号的方法
    asp.net Forms身份验证详解(转载)
    Asp.net中的认证与授权(转载)
    ASP.NET中前台javascript与后台代码调用
    android 模拟器不能上网解决方法
    大数据量系统架构
  • 原文地址:https://www.cnblogs.com/tiandsp/p/3024324.html
Copyright © 2020-2023  润新知