gpt4 book ai didi

python - 查找图像中所有像素对之间的距离

转载 作者:行者123 更新时间:2023-12-04 15:13:57 25 4
gpt4 key购买 nike


我有一个 numpy.array形状(H, W) ,存储图像的像素强度。我想生成一个新的形状数组 (H, W, H, W) ,它存储图像中每对像素之间的欧几里德距离(像素之间的“空间”距离;而不是它们的强度差异)。
解决方案尝试
以下方法完全符合我的要求,但速度非常慢。我正在寻找一种快速的方法来做到这一点。

d = numpy.zeros((H, W, H, W)) # array to store distances.
for x1 in range(H):
for y1 in range(W):
for x2 in range(H):
for y2 in range(W):
d[x1, y1, x2, y2] = numpy.sqrt( (x2-x1)**2 + (y2-y1)**2 )
额外的细节
这是我的问题的更多详细信息。上面更简单问题的解决方案可能足以让我弄清楚其余的问题。
  • 就我而言,该图像实际上是 3D 医学图像(即形状 numpy.array(H, W, D) )。
  • 3D 像素可能不是立方体(例如,每个像素可能代表 1mm x 2mm x 3mm 的体积)。
  • 最佳答案

    我们可以使用 1D 设置开放网格使用 np.ogrid 的范围数组,可以在矢量化解决方案的相同迭代器符号中对其进行操作,这将利用 broadcasting 对于性能。促进 :

    X1,Y1,X2,Y2 = np.ogrid[:H,:W,:H,:W]
    d_out = numpy.sqrt( (X2-X1)**2 + (Y2-Y1)**2 )
    要保存在两个开放网格上:
    X,Y = np.ogrid[:H,:W]
    d_out = numpy.sqrt( (X[:,:,None,None]-X)**2 + (Y[:,:,None,None]-Y)**2 )
    如果我们正在处理大型数组,请考虑使用 numexpr进一步提升:
    import numexpr as ne

    d_out = ne.evaluate('sqrt( (X2-X1)**2 + (Y2-Y1)**2 )')

    关于python - 查找图像中所有像素对之间的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64683408/

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