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

相关文章:

  • 2021-11-21
  • 2022-12-23
  • 2021-10-16
  • 2022-12-23
  • 2021-08-21
  • 2022-12-23
猜你喜欢
  • 2021-10-08
  • 2022-12-23
  • 2022-12-23
  • 2021-11-18
  • 2021-10-04
  • 2021-11-08
相关资源
相似解决方案