gpt4 book ai didi

python - 使用 GDAL 和 Python 的最小距离算法

转载 作者:太空狗 更新时间:2023-10-30 00:57:39 24 4
gpt4 key购买 nike

我正在尝试使用 GDAL 和 Python 实现图像分类的最小距离算法。在计算样本区域的平均像素值并将它们存储到数组列表(“sample_array”)后,我将图像读入一个名为“values”的数组中。使用以下代码循环遍历此数组:

values = valBD.ReadAsArray()

# loop through pixel columns
for X in range(0,XSize):

# loop thorugh pixel lines
for Y in range (0, YSize):

# initialize variables
minDist = 9999
# get minimum distance
for iSample in range (0, sample_count):
# dist = calc_distance(values[jPixel, iPixel], sample_array[iSample])

# computing minimum distance
iPixelVal = values[Y, X]
mean = sample_array[iSample]
dist = math.sqrt((iPixelVal - mean) * (iPixelVal - mean)) # only for testing

if dist < minDist:
minDist = dist
values[Y, X] = iSample

classBD.WriteArray(values, xoff=0, yoff=0)

对于大图像,此过程需要很长时间。这就是为什么我想问问是否有人知道更快的方法。我不太了解python中不同变量的访问速度。或者也许有人知道我可以使用的图书馆。提前致谢,马里奥

最佳答案

您绝对应该使用 NumPy。我处理一些非常大的栅格数据集,NumPy 会遍历它们。在我的机器上,使用下面的代码对于 1000 x 1000 阵列没有明显的延迟。代码后面解释了它是如何工作的。

import numpy as np
from scipy.spatial.distance import cdist

# some starter data
dim = (1000,1000)
values = np.random.randint(0, 10, dim)

# cdist will want 'samples' as a 2-d array
samples = np.array([1, 2, 3]).reshape(-1, 1)

# this could be a one-liner
# 'values' must have the same number of columns as 'samples'
mins = cdist(values.reshape(-1, 1), samples)
outvalues = mins.argmin(axis=1).reshape(dim)

<a href="http://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.distance.cdist.html" rel="noreferrer noopener nofollow">cdist()</a>计算与 values 中每个元素的“距离” samples 中的每个元素.这会生成一个 1,000,000 x 3 的数组,其中每一行 n与像素的距离 n原始数组中的每个样本值 [1, 2, 3] . argmin(axis=1)为您提供每行最小值的索引,这就是您想要的。快速整形可为您提供图像所需的矩形格式。

关于python - 使用 GDAL 和 Python 的最小距离算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5903867/

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