python - 使用 Scipy.ndimage 迭代高程数组

标签 python for-loop tiff scipy.ndimage

我有一个来自 .tif LiDAR 表面的高程数组。下面的示例数组。

Existing_example_arrayV0 = [[ 0, 0, 1, 0, 0, 0, 0], 
                            [ 0, 1, 1, 1, 0, 0, 0], 
                            [ 0, 1, 1, 1, 1, 0, 0], 
                            [ 1, 1, 1, 1, 1, 0, 0], 
                            [ 0, 1, 1, 1, 1, 0, 0], 
                            [ 0, 1, 1, 0, 0, 0, 0]]

我正在尝试使用 scipy.ndimage 迭代数组并向数组添加 100。

Existing_example_arrayV0[binary_erosion(Existing_example_arrayV0 >=1, structure=[[1,1,1]])] += 100

产生第一次迭代。

Existing_example_arrayV1 = [[ 0,  0,   1,   0,  0, 0, 0], 
                            [ 0,  1,  100,  1,  0, 0, 0], 
                            [ 0,  1,  100, 100, 1, 0, 0], 
                            [ 1, 100, 100, 100, 1, 0, 0], 
                            [ 0,  1,  100, 100, 1, 0, 0], 
                            [ 0,  1,   1,   0,  0, 0, 0]]

我不熟悉二值侵 eclipse ,因此我很难迭代创建第二次迭代:

Existing_example_arrayV2 = [[ 0,  0,   1,   0,  0, 0, 0], 
                            [ 0,  1,  100,  1,  0, 0, 0], 
                            [ 0,  1,  100, 100, 1, 0, 0], 
                            [ 1, 100, 200, 100, 1, 0, 0], 
                            [ 0,  1,  100, 100, 1, 0, 0], 
                            [ 0,  1,   1,   0,  0, 0, 0]]

我尝试创建一个 for 循环来创建下一步,但在使其正确运行时遇到问题。

import scipy.ndimage as binary_erosion
for i in range(0,1):
    binary_erosion(Existing_example_arrayV1>=1, structure=[[1,1,1]], iterations = i + 1)

我认为该范围只会运行下一次迭代来生成 Existing_example_arrayV2,但事实并非如此。 我试图在完成的 numpy 数组(V0 -> V1、V1 -> V2 等)之上添加一个迭代,以继续循环,无论我需要运行多少次迭代。

最佳答案

对我来说,这段代码执行您所描述的操作:

example_V2 = example_V0.copy()
for i in range(1, 3):
    mask = binary_erosion(example_V0, iterations=i)
    example_V2[mask] += 100

每次迭代,它都会向下一层添加 100。

但是您的示例步骤似乎您不想为第一步添加 100,而是添加 99。在这种情况下,您可以在末尾添加一行:

example_V2[binary_erosion(example_V2)] -= 1

如果您想要执行一个产生第 n 次迭代的完整函数:

def elevation_array(flat_array, n):
    out = flat_array.copy()

    for i in range(1, n+1):
        mask = binary_erosion(flat_array, iterations=i)
        out[mask] += 100

    if n > 0:
        out[binary_erosion(out)] -= 1

    return out

关于python - 使用 Scipy.ndimage 迭代高程数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76460209/

相关文章:

python - 获取所选值的索引

python - 如何使用 scipy stats 打印线方程

javascript - 使用 for 循环、break 和 continue 查找字母 "x"在句子中出现的次数

java - 将 PDF 转换为多页 tiff(第 4 组)

c# - 在 C# 中加载 .tiff 文件

python - 是否有用于将文件夹中的多个图像读入单个数组的 python 函数

Python Twilio 消息被阻止(错误 - 30004)

python - 有没有办法在 python 中使用断点?

python - C 中的 For 循环没有明显原因提前中断 - 可能与函数指针(回调)有关

java - 生成随机日期