scipy.ndimage.

affine_transform#

scipy.ndimage.affine_transform(входные данные, матрица, смещение=0.0, output_shape=None, вывод=None, порядок=3, mode='constant', cval=0.0, prefilter=True)[источник]#

Применить аффинное преобразование.

Для заданного вектора индексов пикселей выходного изображения o, значение пикселя определяется из входного изображения в позиции np.dot(matrix, o) + offset.

Это выполняет 'pull' (или 'обратное') передискретизирование, преобразуя выходное пространство во входное для поиска данных. Аффинные преобразования часто описываются в 'push' (или 'прямом') направлении, преобразуя вход в выход. Если у вас есть матрица для 'push' преобразования, используйте её обратную (numpy.linalg.inv) в этой функции.

Параметры:
входные данныеarray_like

Входной массив.

матрицаndarray

Матрица обратного преобразования координат, отображающая выходные координаты во входные. Если ndim это количество размерностей input, заданная матрица должна иметь одну из следующих форм:

  • (ndim, ndim): матрица линейного преобразования для каждой выходной координаты.

  • (ndim,): предполагается, что матрица 2-D преобразования диагональна, с диагональю, заданной указанным значением. Затем используется более эффективный алгоритм, который использует разделимость задачи.

  • (ndim + 1, ndim + 1): предполагается, что преобразование задано с использованием однородных координат [1]. В этом случае любое значение, переданное в offset игнорируется.

  • (ndim, ndim + 1): как и выше, но нижняя строка матрицы однородного преобразования всегда [0, 0, ..., 1], и может быть опущено.

смещениеfloat или sequence, опционально

Смещение в массиве, где применяется преобразование. Если float, смещение одинаков для каждой оси. Если последовательность, смещение должен содержать одно значение для каждой оси.

output_shapeкортеж целых чисел, необязательный

Кортеж формы.

выводмассив или dtype, опционально

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

порядокint, необязательный

Порядок сплайн-интерполяции, по умолчанию 3. Порядок должен быть в диапазоне 0-5.

mode{‘reflect’, ‘grid-mirror’, ‘constant’, ‘grid-constant’, ‘nearest’, ‘mirror’, ‘grid-wrap’, ‘wrap’}, опционально

The mode параметр определяет, как входной массив расширяется за пределы его границ. По умолчанию 'constant'. Поведение для каждого допустимого значения следующее (см. дополнительные графики и детали на граничные режимы):

‘reflect’ (d c b a | a b c d | d c b a)

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

'grid-mirror'

Это синоним для 'reflect'.

‘constant’ (k k k k | a b c d | k k k k)

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

‘grid-constant’ (k k k k | a b c d | k k k k)

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

‘nearest’ (a a a a | a b c d | d d d d)

Входные данные расширяются путём репликации последнего пикселя.

‘mirror’ (d c b | a b c d | c b a)

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

‘grid-wrap’ (a b c d | a b c d | a b c d)

Входные данные расширяются путём обёртывания вокруг противоположного края.

‘wrap’ (d b c d | a b c d | b c a b)

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

cvalскаляр, опционально

Значение для заполнения за краями ввода, если mode равно 'constant'. По умолчанию равно 0.0.

prefilterbool, необязательно

Определяет, предварительно ли отфильтрован входной массив с помощью spline_filter перед интерполяцией. По умолчанию True, что создаст временный float64 массив отфильтрованных значений, если order > 1. Если установить это значение в False, вывод будет слегка размыт, если order > 1, если только входные данные не предварительно отфильтрованы, т.е. они являются результатом вызова spline_filter на исходных входных данных.

Возвращает:
affine_transformndarray

Преобразованный вход.

Примечания

Заданная матрица и смещение используются для нахождения для каждой точки выхода соответствующих координат во входных данных с помощью аффинного преобразования. Значение входных данных в этих координатах определяется сплайн-интерполяцией заданного порядка. Точки за границами входных данных заполняются в соответствии с заданным режимом.

Изменено в версии 0.18.0: Ранее точная интерпретация аффинного преобразования зависела от того, была ли матрица предоставлена как 1-D или 2-D массив. Если 1-D массив был предоставлен параметру matrix, выходное значение пикселя по индексу o был определен из входного изображения в позиции matrix * (o + offset).

Для комплекснозначных входные данные, эта функция преобразует вещественную и мнимую части независимо.

Добавлено в версии 1.6.0: Добавлена поддержка комплексных значений.

Ссылки

Примеры

Используйте affine_transform для растяжения изображения:

>>> from scipy.ndimage import affine_transform
>>> from scipy.datasets import face
>>> from matplotlib import pyplot as plt
>>> import numpy as np
>>> im = face(gray=True)
>>> matrix = (0.5, 2)
>>> im2 = affine_transform(im, matrix)
>>> plt.imshow(im2)
>>> plt.show()
../../_images/scipy-ndimage-affine_transform-1_00_00.png

Повернуть изображение на 90 градусов и спроецировать его на расширенный холст:

>>> matrix = ((0, 1), (1, 0))
>>> im3 = affine_transform(im, matrix, output_shape=(1024, 1024))
>>> plt.imshow(im3)
>>> plt.show()
../../_images/scipy-ndimage-affine_transform-1_01_00.png

Сместить вращение так, чтобы изображение было центрировано:

>>> output_shape = (1200, 1200)
>>> offset = (np.array(im.shape) - output_shape) / 2
>>> im4 = affine_transform(im, matrix, offset=offset, output_shape=output_shape)
>>> plt.imshow(im4)
>>> plt.show()
../../_images/scipy-ndimage-affine_transform-1_02_00.png