Python使用插值对2d Numpy重采样

ac1kyiln  于 2023-08-05  发布在  Python
关注(0)|答案(1)|浏览(104)

给定一个大小为(width=x,height=y)的2d数组,其中每行包含具有以米为单位的高度信息的条目。一行中两个水平相邻的条目之间的距离(以米为单位)随y位置而变化。因此,在一行中,两个入口之间的距离为30m,而在距离上方的行中,例如,31m。
我如何重新采样和插值的2d数组有像素之间的水平距离等于一个给定的值为每一行?如果可能,是否有多种插值选项?

83qze16e

83qze16e1#

我认为你可以用四个步骤来解决这个问题:
1.根据目标距离计算每行所需的像素数。
1.选择插值方法(线性、三次等)
1.使用NumPy和SciPy库进行插值。
1.使用所选的插值方法对每一行重新采样以获得新的像素值。

import numpy as np
    from scipy import interpolate
    
    original_array = ...  # your 2D array
    
    # Step 1: 
    target_distance = 1.0
    num_pixels_per_row = []

    for row in original_array:
        original_distance = sum(np.diff(row))
        num_pixels = int(original_distance / target_distance)
        num_pixels_per_row.append(num_pixels)
    
    # Step 2:   
    interpolation_method = 'linear'
    
    # Step 3:
    resampled_array = np.zeros((original_array.shape[0],
                                max(num_pixels_per_row)))

    for i, (row, num_pixels) in enumerate(zip(original_array, num_pixels_per_row)):
        x_original = np.arange(row.size)
        x_new = np.linspace(0, row.size - 1, num=num_pixels)
    
        interpolator = interpolate.interp1d(x_original, row,
                                            kind=interpolation_method)
        resampled_array[i] = interpolator(x_new)

字符串
插值是一种估计技术,重采样数据的精度取决于原始数据集的特征和所选的插值方法。可视化结果并检查它们是否对您的特定应用程序有意义总是一个好主意。此外,如果您有一个大型数据集,请考虑使用更有效的算法或优化来加速该过程。

相关问题