python中convolve2d函数,python scipy convolve2d似乎不正确

我的目标是创建和可视化图像的偏导数(2D).我将用第一个有限中心差分方程做到这一点

wikipedia

F相对于x的偏导数是

df(x,y)/ dx = f(x 1,y)-f(x-1,y)

我们可以把它写成一个卷积内核H = [ – 1,0,1]并且应该得到相同的结果

通过将图像与内核进行卷积

DFX = F * H

这是我的源代码:

from numpy import *

from pylab import *

from PIL import *

from scipy import signal as sg

#create artifical image with constant positive slope

myImage=zeros((5,5),dtype=float)

for y in range(5):

for x in range(5):

myImage[y,x]=y+x

首先,我通过scolveyd(短路)的convolve2d函数为x和y创建第一个中心有限差分

kernel=array([[-1,0,1]]) #create first central finite difference kernel

pdx=sg.convolve2d(myImage,kernel,"same") #dI(x,y)/dx

现在我创建相同的使用循环

H,W=myImage.shape[0:2]

pdx=zeros((H,W),dtype=float)

for y in range(1,H-1):

for x in range(1,W-1):

pdx.itemset(y,x,im.item(y,x+1)-im.item(y,x-1))

我们来看看结果:

pdx – convolve2d的内核方法

array([[-1., -2., -2., -2., 3.],

[-2., -2., -2., -2., 4.],

[-3., -2., -2., -2., 5.],

[-4., -2., -2., -2., 6.],

[-5., -2., -2., -2., 7.]])

pdx – 循环的有限差分

array([[ 0., 0., 0., 0., 0.],

[ 0., 2., 2., 2., 0.],

[ 0., 2., 2., 2., 0.],

[ 0., 2., 2., 2., 0.],

[ 0., 0., 0., 0., 0.]])

我对结果感到困惑.为什么内核方法是负斜率?

为了得到相同的结果,我必须将内核翻转到H = [1,0,-1],但这在数学上是不正确的.

有人能帮我吗 ?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值