zoukankan      html  css  js  c++  java
  • 图像处理之canny---求梯度

     梯度求法和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

  • 相关阅读:
    测试项目框架搭建
    项目实战(一)
    接口和HTTP协议(二)
    接口和http协议(一)
    什么是DFX测试
    完美解决安装在虚拟机中的CentOS7无法联网的问题
    RIP动态路由协议
    ensp实验--------RIP动态路由实验
    ensp实验--------telnet登录认证
    CSMA/CD协议
  • 原文地址:https://www.cnblogs.com/pengkunfan/p/4139636.html
Copyright © 2011-2022 走看看