今天在调试程序的过程中发现我用VC++写的Gradient计算后得到的值与matlab中的gradient()函数得到的值并不相同。于是调试测试了一下结果,发现matlab中gradient的计算流程如下:
先说,gradient()求x方向上的吧
1。判断是不是第一列或者最后一列,如果是执行2,如果不是执行3
2。后一个数减去当前数赋给当前数:f(Pos) = f(Pos+1) - f(Pos);
3。后一个数减去当前数 + 当前数减去前一个数 /2: f(Pos) = (f(Pos+1) -f(Pos) + f(Pos) -f(Pos-1))/2 = f(Pos+1)-f(Pos-1)/2;
也就是后一个数减去前一个数的和除以二。
如果是gradient()求y方向上的值:
就是把Pos -1 = Pos - Colunm; Pos + 1 = Pos + Colunm;