图像处理-梯度

参考:

(1) ​​​​​​Matlab中gradient函数(梯度计算原理)_夏菠-CSDN博客_matlab求梯度函数​​​​​

(2)数值梯度 - MATLAB gradient- MathWorks 中国 

问题:matlab中求取gradient(F)函数求的是数值上的梯度,那具体是怎么计算的呢?

处理二维数据场景下,假设F为矩阵,
 
>> x=[6,9,3,4,0;5,4,1,2,5;6,7,7,8,0;7,8,9,10,0]
x =
     6       9       3       4      0
     5       4       1       2      5
     6       7       7       8      0
     7       8       9       10    0
 
>> [Fx,Fy]=gradient(x)
Fx =
    3.0000    -1.5000    -2.5000    -1.5000    -4.0000
    -1.0000    -2.0000    -1.0000    2.0000    3.0000
    1.0000    0.5000    0.5000    -3.5000    -8.0000
    1.0000    1.0000    1.0000    -4.5000    -10.0000

Fy =
    -1.0000    -5.0000    -2.0000    -2.0000    5.0000
    0              -1.0000    2.0000       2.0000    0
    1.0000      2.0000    4.0000       4.0000    -2.5000
    1.0000      1.0000    2.0000       2.0000    0
 
计算规则:

1)[Fx,Fy]=gradient(F),Fx为其水平方向上的梯度,Fy为其垂直方向上的梯度,Fx的第一列元素为原矩阵第二列与第一列元素之差,Fx的第二列元素为原矩阵第三列与第一列元素之差除以2,以此类推:Fx(i,j)=(F(i,j+1)-F(i,j-1))/2。
2)最后一列则为最后两列之差。

python 代码

#%% 计算梯度
x = np.arange(0,16)
array = x.reshape((4,4))
print(array)
# 求取梯度
Fx = np.zeros_like(array)
Fy = np.zeros_like(array)

hight,width = array.shape

if hight <2 or width <2:
    raise Exception('矩阵的高度或宽度不合适,小于2')

Fx[:,0] = array[:,1]-array[:,0]
Fx[:,-1]= array[:,-1]-array[:,-2]

for xIdx in range(1,width-1):
    Fx[:,xIdx] = (array[:,xIdx+1]- array[:,xIdx-1]) /2
print(Fx)

Fy[0,:] = array[1,:]-array[0,:]
Fy[-1,:]= array[-1,:]-array[-2,:]

for yIdx in range(1,hight-1):
    Fy[yIdx,:] = (array[yIdx+1,:]- array[yIdx-1,:]) /2
print(Fy)

 输出结果:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值