zoukankan      html  css  js  c++  java
  • Tenegrad评价函数 分类: 图像处理 Opencv 2014-11-12 20:46 488人阅读 评论(0) 收藏

    Tenegrad函数式一种常用的图像清晰度评价函数,是一种基于梯度的函数。
    在图像处理中,一般认为对焦好的图像具有更尖锐的边缘,故具有更大的梯度函数值。
    Tenegrad函数使用Sobel算子提取水平和垂直方向的梯度值。具体过程如下:

    设Sobel卷积核为,则图像在点处的梯度


    定义该图像的Tenegrad值为

    其中为图像中像素总数。


    实现代码如下:

    #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;
    }

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    3配置
    1开机初始化配置
    shell <<EOF
    Sun SPARC Enterprise M5000 启动步骤
    CISCO MDS – Useful ‘Show’ Commands
    oracle 内存不足处理
    mysql 日志类型
    MySQL 学习
    抓取进程中包括其所有线程的iowait时间
    每天网络半小时(MAC数据包在哪里合并的)
  • 原文地址:https://www.cnblogs.com/luo-peng/p/4646234.html
Copyright © 2011-2022 走看看