Я пытаюсь линейно интерполировать артефакт в следующем инфракрасном изображении:
Есть ли компактный способ сделать это с Python-совместимой библиотекой, предпочтительно numpy или scipy?
Я пробовал пешеходный подход, интерполируя каждую сторону в отдельности.Следующий код должен вычислять интерполяцию верхней границы:
top_up = np.copy(image[border - 3:border - 2, border:-border])
top_down = np.copy(image[border:border + 1, border:-border])
dif_top = (top_up - top_down) / 3
image[border - 2:border - 1, border:-border] = top_up - dif_top
image[border - 1:border, border:-border] = top_down + dif_top
Примечание: 'border' - это расстояние от верха / низа / влево / вправо до КОНЦА (внутри) артефакта.Например, row [border] - это первая строка, правильная после артефакта.Для этого изображения артефакт имеет ширину два пикселя.
По какой-то причине приведенный выше код работает только для нескольких пикселей, но не для всей строки.Я думал, что ошибка может быть потому, что нарезка только создает представление.Поэтому я добавил np.copy, но это не помогло.Вот изображение того, как выглядит «интерполированная» область верхней границы:
В качестве примера, предполагая, что 0s означают артефакт черной границы, входные данные
11111
10001
10301
10001
11111
должен дать
11111
12221
12321
12221
11111