Я решу эту проблему, используя кучу функций.
Сначала для заданной координаты (x_i, y_i)
я получаю список координат пикселей по обе стороны от него в определенном окне с размером = window_size
т.е.
def derive_adjacent_coords(coord, window_size):
# Coord is a tuple (row, column)
assert (window_size % 2) != 0, "Window size must be odd"
mid_idx = (window_size - 1) / 2)
return [(r, coord[1]) for r in range(coord[0] - mid_idx, coord[0] + mid_idx + 1)]
Затем я извлеку значения, которые соответствуют этим местам на изображении, используя функцию ниже:
def derive_adjacent_pixels(list_of_coord_tuples, image):
# Image is your image, list_of_coord_tuples is the output of the first function
return [ image[*i] for i in list_of_coord_tuples]
Функция выше вернет список. Затем я интерполирую список:
from scipy.interpolate import interp1d
import math
def interpol(list):
# list is the output of the derive_adjacent_pixels(list_of_coord_tuples, image) function
x = [i for i in range len(list)]
interpolated_list = interp1d(x, list, kind='cubic')
return interpolated_list[int(math.floor(len(interpolated_list)/2))]
Вы должны по-разному интерполировать каждую полосу изображения в этом методе, который я показал выше.
Вам нужно будет повторить эти функции в вашем списке неизвестных координат пикселей (список кортежей), а затем индивидуально для каждой полосы в вашем изображении.