gpt4 book ai didi

python - python中的3d sobel算法?

转载 作者:太空宇宙 更新时间:2023-11-03 15:23:25 24 4
gpt4 key购买 nike

我正在尝试在 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

但根据我对 wiki page 的理解为了计算 2d,我应该乘以 1d sobel 结果而不是 hypot :confused

无论如何,要转到 3d,我想我需要在每个轴上计算 1d sobel,然后乘以所有,但我不确定...是否有任何库可以更快地计算 3d sobel?

最佳答案

首先,引用你的wikipedia link : 那里的乘法指的是构造sobel卷积核的方式,不是最终的结果。

对于 2D sobel 滤波器,您需要一个内核来获取 x 方向的导数,以及另一个内核来获取 Y 方向的导数,例如 enter image description here

这基本上就是您的两个命令所做的,因此如果您使用的是 numpy,则无需自己构建这些内核。

dx = ndimage.sobel(preSobel, 0)  # horizontal derivative
dy = ndimage.sobel(preSobel, 1) # vertical derivative

现在对于 3D 情况,您需要 3 个操作和 3 个内核,一个用于 dx、dy、dz。链接的 wiki 部分告诉您如何通过乘以组件来构造内核。例如,dZ 的已完成 sobel 内核是一个 3x3x3 矩阵,如下所示:

enter image description here

要获得幅度,您仍然必须在之后对平方导数(斜边)求平方根。

我没有 numpy 但据我所知 the documentation ndimage sobel 命令可以处理任意数量的维度,因此内核已经提供:

dx = ndimage.sobel(your3Dmatrix, 0)  # x derivative
dy = ndimage.sobel(your3Dmatrix, 1) # y derivative
dz = ndimage.sobel(your3Dmatrix, 2) # z derivative

现在 hypotenuse 命令可能只需要 2 个参数,所以你必须找到另一种方法来有效地计算 mag = sqrt(dxdx + dydy + dz*dz) 。但是 NumPy 应该拥有您需要的一切。


更新

实际上,如果您只对震级感兴趣,there is a complete function in numpy for this :

 mag = generic_gradient_magnitude(your3Dmatrix, sobel)

关于python - python中的3d sobel算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11267994/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com