图像梯度

0、图像梯度

梯度的方向是函数变化最快的方向, 当图像中存在边缘时,一定有较大的梯度值。相反,当图像中有比较平滑的部分时,灰度值变化较小,相应的梯度也较小。 图像处理中把梯度的模简称为梯度。 通常我们用小区域模板进行卷积来计算梯度,常用的梯度算子有Sobel算子,Robinson算子,Laplace算子等。

1、离散图像的梯度

图像是一个离散空间,无法真正的求导,只有通过多项式拟合图像中某一点的导数,然后将该点处的x,y方向的导数视为该点的梯度。
梯度计算公式:

grad(x,y) = dx*i + dy*j
dx(i,j) = I(i+1,j)  - I(i,j)  //X方向偏导,该行与上一行的差值
dy(i,j) = I(i,j+1) - I(i,j)  //Y方向偏导,该列与上一列的差值

图像的一阶导数通常会产生较粗的边缘
代码实现:

//////////////////////////////////////////////////////////////////////////
/// \brief  图像梯度求解原型
/// \remark 
/// \param[in]  src    源灰度图
/// \param[in]  width  源灰度图宽
/// \param[in]  height  源灰度图高
/// \param[in/out]  grad_x   x方向梯度
/// \param[in/out]  grad_y   y方向梯度
/// \return     void
//////////////////////////////////////////////////////////////////////////
void Calcul_Gradian(const unsigned char*  src, int width, int height, char *  grad_x, char* grad_y)
{
   int rows = 0, cols = 0;

   for (rows = 0; rows < height - 1; rows++)
   {
       int idx = rows * width;

       for (cols = 0; cols < width - 1; cols++)
       {
           grad_x[idx + cols] = src[idx + cols + 1] - src[idx + cols];
           grad_y[idx + cols] = src[idx + cols + width] - src[idx + cols];
       }
   }
}

2、输出

Y方向–水平边缘明显,垂直边缘不明显(窗户那边明显看得出)
在这里插入图片描述

X方向–垂直边缘明显,水平边缘不明显(窗户那边明显看得出)
在这里插入图片描述

3、参考

https://blog.youkuaiyun.com/image_seg/article/details/78790968
https://blog.youkuaiyun.com/xieyan0811/article/details/70882266
https://blog.youkuaiyun.com/Touch_Dream/article/details/62447801

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值