典型無參考圖像清晰度評價(可用作對焦評價函數)


Tenengrad評價函數

Tenengrad函數是一種由Tenenbaum提出的,基於梯度的常用圖像清晰度評價函數。特南梯度。
在圖像處理中,一般認為對焦好的圖像具有更尖銳的邊緣,故具有更大的梯度函數值。
Tenengrad函數使用Sobel算子提取水平和垂直方向的梯度值,求其平方和作為評價函數。

具體過程如下:

設Sobel卷積核為,則圖像在點處的梯度

定義該圖像的Tenengrad值為:(其中為圖像中像素總數)這個求了平均

或不求平均:評價函數F(k):

其中:T是給定的邊緣檢測閾值。

#include <cv.h>
#include <highgui.h>
#include<iostream>
using namespace std;
 
double Tenegrad(IplImage* src)//Tenegrad 標准
{ 
    assert(src->nChannels==8);
    int row=src->height;//height對應行數
    int col=src->width; //width對應行數
    int widthstep=src->widthStep;
    char *data=src->imageData;
    double S=0;
    for(int x = 1;x<row-1;x++)
    {
        char *pre_row=data +(x-1)*widthstep;
        char *cur_row=data +x*widthstep; 
        char *nex_row=data +(x+1)*widthstep;
        int Sx,Sy;
        for(int y = 1;y<col-1;y++)
        {
          //**********************************************/
          //當前鄰域:
          //pre_row[y-1],pre_row[y],pre_row[y+1];
          //cur_row[y-1],cur_row[y],cur_row[y+1];
          //nex_row[y-1],nex_row[y],nex_row[y+1];
 
          //Gx =-1,0,1       Gy =1, 2, 1
          //    -2,0,2           0, 0, 0
          //    -1,0,1          -1,-2,-1
          //**********************************************/
          Sx=(uchar)pre_row[y+1]+2*(uchar)cur_row[y+1]+(uchar)nex_row[y+1]//一定要轉為uchar
            -(uchar)pre_row[y-1]-2*(uchar)cur_row[y-1]-(uchar)nex_row[y-1];
          Sy=(uchar)nex_row[y-1]+2*(uchar)nex_row[y]+(uchar)nex_row[y+1]
            -(uchar)pre_row[y-1]-2*(uchar)pre_row[y]-(uchar)pre_row[y+1];
          S+=Sx*Sx+Sy*Sy;
        }
    }
    return S/(row-2)/(col-2);
}
 
int main()
{
    IplImage* src = cvLoadImage("d:\\lena.bmp",0);
    cvNamedWindow("src");
    cvShowImage("src",src);
    cout<<Tenegrad(src);
    cvWaitKey(0);
    cvReleaseImage(&src);
    cvDestroyWindow("src");
    return 0;
}
View Code

 

 Laplacian 梯度函數

利用Laplacian算子對圖像進行模板卷積得到圖像的高頻分量,然后可以對圖像的高頻分量求和,用高頻分量和作為圖像的清晰度評價標准。

對於一個M×N像素的圖像,每個像素的亮度為g(x,y),進行濾波模板卷積后每個像素點值為z(x,y)。則圖像清晰度評價函數:

Laplacian算子:z(x,y)=g(x-1,y)+g(x+1,y)+g(x,y-1)+g(x,y+1)一4g(x,y)

梯度算子為水平方向和垂直方向兩個,高通濾波算子只有一個

SMD(灰度差分絕對值之和,Sum of Modulus of gray Difference )函數

 用差分絕對值代替乘方和開方,即對點(x,y)及其鄰近點的灰度作差分運算,提取該點灰度值的變化大小,得出圖像灰度差分絕對值之和算子。

灰度差分絕對值之和具有較好的計算性能,但其缺點也很明顯,即在焦點附近靈敏度不高,即該函數在極值點附近過於平坦,從而導致聚焦精度難以提高。

在文章《一種快速高靈敏度聚焦評價函數》中提出了一種新的評價函數,稱之為灰度差分絕對值乘積法,即對每一個像素領域兩個灰度差相乘后再逐個像素累加。

 

【參考文獻】

Tenengrad評價函數 - CSDN博客 https://blog.csdn.net/u010839382/article/details/41049895

圖像清晰度的評價指標 - CSDN博客 https://blog.csdn.net/charlene_bo/article/details/72673490

SMD相關光學顯微鏡自動聚焦的技術研究_百度學術 

 一種基於高通濾波評價函數的自動對焦方法_百度學術 


免責聲明!

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



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