正宗的 Tenengrad 梯度函数

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

Tenengrad 梯度函数

Tenengrad 梯度函数采用Sobel算子分别提取水平和垂直方向的梯度值,基与Tenengrad 梯度函数的图像清晰度定义如下:
这里写图片描述
G(x,y)如下:
这里写图片描述
其计算梯度的模板如下:
这里写图片描述

梯度模板我没有乘以前面的1/4,直接用后面的矩阵进行计算的。

具体计算一张图象的Tenengrad值,代码如下所示:

这个仅仅是 Tenengrad梯度函数调用部分 还需要在添加上 main函数才是一个完全的 函数!
double Tenengrad(Mat &img)
{double Grad_value = 0;double Sx, Sy;for (int i = 1; i < img.rows-1; i++){//定义行指针uchar *current_ptr = (uchar*)img.data + i * img.cols;//当前行uchar *pre_ptr = (uchar*)img.data + (i - 1)*img.cols;//上一行uchar *next_ptr= (uchar*)img.data + (i +1)*img.cols;//下一行for (int j = 1; j < img.cols-1; j++){Sx = pre_ptr[j - 1] * (-1) + pre_ptr[j + 1] + current_ptr[j - 1] * (-2) + current_ptr[j + 1] * 2 + next_ptr[j - 1] * (-1) + next_ptr[j + 1];//x方向梯度Sy = pre_ptr[j - 1] + 2 * pre_ptr[j] + pre_ptr[j + 1] - next_ptr[j - 1] - 2 * next_ptr[j] - next_ptr[j + 1];//y方向梯度//求总和Grad_value += Sx * Sx + Sy * Sy;}}return Grad_value / (img.cols - 2) / (img.rows - 2);
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部