Как интерполировать неизвестные пиксели по заданным координатам? - PullRequest
0 голосов
/ 29 марта 2020

Я просто использовал Python для компьютерного зрения. Мне нужно много ссылок для интерполяции пикселей в изображениях, используя Python.

У меня есть изображение RGB, подобное следующему. На этой картинке у меня белый неизвестный пиксель. Я хочу интерполировать неизвестный пиксель, начиная с точки (x0, y0), используя информацию об интенсивности цвета вдоль синей линии. Может ли кто-нибудь предоставить примеры кода для интерполяции в точке (x0, y0) любым методом интерполяции? Входные данные представляют собой набор координат координат цвета x,y = np.where(np.all(img == [0,0,255],axis=2)) и координат пикселей (x0, y0). Выходные данные - это пиксели (x0, y0), которые были интерполированы.

enter image description here

1 Ответ

0 голосов
/ 29 марта 2020

Я решу эту проблему, используя кучу функций.

Сначала для заданной координаты (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))]

Вы должны по-разному интерполировать каждую полосу изображения в этом методе, который я показал выше.

Вам нужно будет повторить эти функции в вашем списке неизвестных координат пикселей (список кортежей), а затем индивидуально для каждой полосы в вашем изображении.

...