我在用python计算一个3d的sobel过滤器。我有一个很好的二维图像代码如下。在
顺便说一句,我的原图是uint8型的。在
preSobel = preSobel.astype('int32')
dx = ndimage.sobel(preSobel, 0) # horizontal derivative
dy = ndimage.sobel(preSobel, 1) # vertical derivative
mag = numpy.hypot(dx, dy) # magnitude
mag *= 255.0 / numpy.max(mag) # normalize (Q&D)
img[i,:,:]=mag
但从我对计算2d的wiki page的理解来看,我应该乘以1d的sobel结果,而不是hypot:confussed
不管怎样,要想进入3d,我想我需要计算每个轴上的1d sobel,然后乘以所有的,但我不确定。。。有没有哪家图书馆能更快地计算出3d-sobel?在
首先,关于你的wikipedia link:乘法指的是构造sobel卷积核的方法,而不是最终结果。在
对于2D-sobel滤波器,需要一个内核来获得x方向的导数,而另一个内核则需要Y方向的导数,例如。
这基本上就是您的两个命令所做的,所以如果您使用的是numpy,您不需要自己构建这些内核。在
现在对于3D的情况,你需要3个操作和3个内核,一个用于dx,dy,dz。 linkedwiki部分告诉您如何通过将组件相乘来构造内核。例如,dZ的sobel内核是一个3x3x3矩阵,如下所示:
为了得到这个量值,你还需要求平方导数的平方根(斜边)。在
我没有numpy,但是从the documentation可以看出ndimage sobel命令可以处理任意数量的维,因此,内核已经提供了:
^{pr2}$现在斜边命令可能只需要两个参数,所以您必须找到另一种方法来有效地计算mag=sqrt(dxdx+dydy+dz*dz)。 但NumPy应该有你需要的一切。在
更新
实际上,如果你只对震级感兴趣,there is a complete function in numpy for this:
相关问题 更多 >
编程相关推荐