Tenegrad评价函数

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;
}
时间: 2024-12-29 04:18:24

Tenegrad评价函数的相关文章

xgboost 自定义评价函数(metric)与目标函数

比赛得分公式如下: 其中,P为Precision , R为 Recall. GBDT训练基于验证集评价,此时会调用评价函数,XGBoost的best_iteration和best_score均是基于评价函数得出. 评价函数: input: preds和dvalid,即为验证集和验证集上的预测值, return  string 类型的名称 和一个flaot类型的fevalerror值表示评价值的大小,其是以error的形式定义,即当此值越大是认为模型效果越差. 1 from sklearn.met

机器学习基础题目

1. 在深度学习中,涉及到大量矩阵相乘,现在需要计算三个稠密矩阵A,B,C的乘积ABC,假设三个矩阵的尺寸分别为m*n,n*p,p*q,且m<n<p<q,以下计算顺序效率最高的是: (AB)C 解析:首先,根据简单的矩阵知识,因为 A*B , A 的列数必须和 B 的行数相等.因此,可以排除C 选项. m*n 的矩阵 A 和 n*p 的矩阵 B 的乘积,得到 m*p 的矩阵 A*B ,而 A*B 的每个元素需要 n 次乘法和 n-1 次加法,忽略加法,共需要 m*n*p 次乘法运算. 同

蒙特卡洛树搜索介绍

原帖地址:蒙特卡洛搜索树原文 2015年9月7日周一 由Jeff Bradberry留 与游戏AI有关的问题一般开始于被称作完全信息博弈的游戏.这是一款对弈玩家彼此没有信息可以隐藏的回合制游戏且在游戏技术里没有运气元素(如扔骰子或从洗好的牌中抽牌),    井字过三关,四子棋,跳棋,国际象棋,黑白棋和围棋用到了这个算法的所有游戏.因为在这个游戏类型中发生的任何事件是能够用一棵树完全确定,它能构建所有可能的结果,且能分配一个值用于确定其中一名玩家的赢或输.尽可能找到最优解,然而在树上做一个搜索操作

降维中的特征选择

在数据挖掘过程中,高维数据是非常棘手的研究对象.特别是在文本挖掘.图像处理和基因数据分析中,维度过高使很多学习器无法工作或效率降低,所以降维也是数据预处理过程的一项必要任务.降维大致有两大类别,一类是从原始维度中提取新的维度,例如主成分分析或因子分析,再或者是奇异值分解或是多维标度分析.另一类是从原始维度中选择一些子集,即称为特征选择(Feature Selection),或者叫作最佳子集选择.特征选择本质上继承了Occam's razor的思想,从一组特征中选出一些最有效的特征,使构造出来的模

【转】人工智能基本术语(中英文对照)

转自:http://blog.163.com/chenqingshuang_2/blog/static/54409195200710247110161/ 自适应交叉adaptive crossover 自适应变异adaptive mutation 等位基因allele 算术交叉arithmetic crossover 人工生命artificial life 装箱问题Bin Packing 二进制编码基因binary genes 边界变异boundary mutation 基因块假设,积木块假设b

各种分类算法比较

1决策树(Decision Trees)的优缺点 决策树的优点: 一.           决策树易于理解和解释.人们在通过解释后都有能力去理解决策树所表达的意义. 二.           对于决策树,数据的准备往往是简单或者是不必要的.其他的技术往往要求先把数据一般化,比如去掉多余的或者空白的属性. 三.           能够同时处理数据型和常规型属性.其他的技术往往要求数据属性的单一. 四.           决策树是一个白盒模型.如果给定一个观察的模型,那么根据所产生的决策树很容易

特征选择常用算法综述

特征选择的一般过程: 1.生成子集:搜索特征子集,为评价函数提供特征子集 2.评价函数:评价特征子集的好坏 3.停止准则:与评价函数相关,一般是阈值,评价函数达到一定标准后就可停止搜索 4.验证过程:在验证数据集上验证选出来的特征子集的有效性 1.生成子集 搜索算法有 完全搜索.启发式搜索.随机搜索 三大类. (1)完全搜索 <1>宽搜(Breadth First Search):时间复杂度高,不实用 <2>分支界限搜索(Branch and Bound):其实就是宽搜加上深度的限

粒子群算法 Particle Swarm Optimization, PSO(转贴收藏)

粒子群算法(1)----粒子群算法简介 http://blog.csdn.net/niuyongjie/article/details/1569671 粒子群算法(2)----标准的粒子群算法 http://blog.csdn.net/niuyongjie/article/details/1572814 粒子群算法(3)----标准的粒子群算法(局部版本) http://blog.csdn.net/niuyongjie/article/details/1584946 粒子群算法(4)----粒子

使用nodeitk进行角点检测

前言 东莞,晴,33至27度.今天天气真好,学生陆续离开学校.忙完学生答辩事情,终于可以更新一下nodeitk.本文继续介绍node的特征识别相关内容,你会看到,采用nodeitk实现角点检测是一件十分简单的事情. 本文你将学到使用nodeitk进行角点检测: 1.        特征包含有哪些?为什么它们这么重要 2.        使用函数cornerHarris,利用Harris-Stephens方法检测角点 理论 什么是特征? 1.        在机器视觉中,通常我们在一个环境下的不同