Почему функция поворота skimage получает метод интерполяции в качестве аргумента?

Используя функцию поворота скимаджа, я заметил, что у нее есть необязательный параметр интерполяции (порядка), но я не мог понять почему.
В документе не указано, как оно использовалось, и я подумал, что поворот изображения заканчивается простым сдвигом индексов.
Вот картинка, повернутая на 30 градусов и с билинейной, и с NN-интерполяцией, я, конечно, не могу сказать о разнице.
введите описание изображения здесь введите описание изображения здесь

1 ответ

Чтобы повернуть изображение на угол тета, необходимо сопоставить каждый пиксель P = (x, y) с новой точкой P' = (x', y'). Как P отображается в P ', зависит от оси вращения и если тета выражается в градусах или радианах, но это будет примерно так:

  • x '= x * cos (тета) - y * sin(тета)
  • y '= x * sin (тета) + y * cos(тета)

проблема в том, что это приводит к нецелочисленным значениям, здесь и появляется интерполяция. Чтобы заполнить пиксель (x, y) в повернутом изображении, потребуется использовать пиксель с нецелочисленными координатами исходного изображения., интерполяция аппроксимирует эту нецелую точку с использованием ближайших точек.

То, что вы делаете, это деформирует изображение.

Например, представьте, что вы хотите повернуть вышеуказанное изображение, но убедитесь, что ни одно из вращающихся изображений не выходит за пределы. Вы хотели бы вращать, но также деформировать оси, чтобы вы могли видеть все изображение.

См. http://scikit-image.org/docs/dev/api/skimage.transform.html для деталей и других вариантов использования.

Другие вопросы по тегам