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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM