版权声明:本文为博主原创文章,未经博主允许不得转载。
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);
}