как линейно интерполировать внутреннюю, промежуточную область границы изображения с помощью numpy или scipy или другой библиотеки, совместимой с python - PullRequest
0 голосов
/ 07 июня 2018

Я пытаюсь линейно интерполировать артефакт в следующем инфракрасном изображении: image to interpolate

Есть ли компактный способ сделать это с 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, но это не помогло.Вот изображение того, как выглядит «интерполированная» область верхней границы:

partially interpolated top border

В качестве примера, предполагая, что 0s означают артефакт черной границы, входные данные

11111
10001
10301
10001
11111

должен дать

11111
12221
12321
12221
11111
...