zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    生成Ipa安装包的plist文件后生成下载链接
    ssh_key登录服务器,免密码登录
    Ruby中类的进阶(继承,private, public, protect)
    Ruby中的类
    Redis- redis.conf
    Active Job 基础
    rails框架配置
    rails中使用CarrierWave实现文件上传的功能
    Flask-SQLAlchemy
    Linux自动共享USB设备:udev+Samba
  • 原文地址:https://www.cnblogs.com/tiandsp/p/3024324.html
Copyright © 2011-2022 走看看