正宗的 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);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zqx951102

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值