梯度求法和sobel之类的算子雷同,甚至更简单,就是一个离散差分,不清楚的童鞋可以百度,一大堆资料呢,从源码也可清晰的看出原理。

// 方向导数,求梯度
/*
* @parameter sz: 图像大小
* @parameter pGray: 图像灰度值
* @parameter pGradx: 图像x轴梯度
* @parameter pGrady: 图像y轴梯度
* @parameter pMag : 图像梯度幅值
*/

void Grad(SIZE sz, LPBYTE pGray,int *pGradX, int *pGradY, int *pMag)
{
LONG y,x;

//中间变量
double dSqt1;
double dSqt2;

//x方向的方向导数
for(y=1;y<sz.cy-1;y++)
{
for(x=1;x<sz.cx-1;x++)
{
pGradX[y*sz.cx +x] = (int)( pGray[y*sz.cx+x+1]-pGray[y*sz.cx+ x-1] );
}
}

//y方向方向导数
for(x=1;x<sz.cx-1;x++)
{
for(y=1;y<sz.cy-1;y++)
{
pGradY[y*sz.cx +x] = (int)(pGray[(y+1)*sz.cx +x] - pGray[(y-1)*sz.cx +x]);
}
}

//求梯度
for(y=0; y<sz.cy; y++)
{
for(x=0; x<sz.cx; x++)
{
//二阶范数求梯度
dSqt1 = pGradX[y*sz.cx + x]*pGradX[y*sz.cx + x];
dSqt2 = pGradY[y*sz.cx + x]*pGradY[y*sz.cx + x];
pMag[y*sz.cx+x] = (int)(sqrt(dSqt1+dSqt2)+0.5);//四舍五入
}
}
}

用到的类型:

typedef struct {
int cy;
int cx;
} SIZE;

typedef unsigned char *LPBYTE;

typedef long LONG;

http://blog.csdn.net/crzy_sparrow/article/details/6999133

最新文章

  1. selenium:org.openqa.selenium.WebDriverException: f.QueryInterface is not a function
  2. JS中创建函数的三种方式及区别
  3. linux下python调用c模块
  4. day8-多进程和多线程
  5. 关于Tcp,为什么一定要进行三次握手呢?
  6. jqGrid初次使用遇到的问题及解决方法
  7. I2S和PCM
  8. jquery 核心
  9. java设计模式之——代理模式
  10. Amabri添加YDB报错
  11. 201521123053《Java课程设计》第七周学习总结
  12. asp.net网站管理工具 遇到错误。请返回上一页并重试。
  13. Python之线程
  14. WiFi安全网桥探讨
  15. k-近邻(KNN)算法改进约会网站的配对效果[Python]
  16. 使用JS获取input值
  17. js递归算法1+ 2+3.....100的和
  18. Print Article(斜率DP入门+单调队列)
  19. Golang &amp; GitLab-CI 详细实例步骤
  20. MongoDB 数据查询

热门文章

  1. DBCP连接池与c3p0连接池
  2. AC日记——Oulipo poj 3461
  3. 如何证明一个数的数根(digital root)就是它对9的余数?
  4. BZOJ1088(SCOI2005)
  5. ARM, X86和MIPS
  6. mysql事物中行锁与表锁
  7. 为Zepto添加Slide动画效果
  8. shell中eval的使用问题
  9. Fresco框架SimpleDraweeView控件的简单使用
  10. 压缩软件Snappy的安装