Python affine_transform не переводит? - PullRequest
1 голос
/ 12 февраля 2012

У меня есть изображение (сохраненное как numpy-массив), и я хочу преобразовать его с помощью матрицы преобразования. допустим, трансформационная матрица:

[[  0.99729046  -0.07356456  22.57990962]
 [  0.07356456   0.99729046 -12.99879896]
 [  0.           0.           1.        ]]

Я хотел сделать это с помощью `scipy.ndimage.interpolation.

image = affine_transform(image, matrix, mode="reflect")

если я просто поверну его:

[[  0.99729046  -0.07356456 0.]
 [  0.07356456   0.99729046 0.]
 [  0.           0.         1.]]

все работает нормально, но когда я хочу повернуть И перевести, просто перевести, результат выглядит довольно странно. и я не знаю почему: S

оригинальное изображение: http://img408.imageshack.us/img408/9373/eiffel.jpg

преобразованное изображение: http://img861.imageshack.us/img861/8971/blatm.jpg

1 Ответ

3 голосов
/ 15 февраля 2012

Я думаю, что на самом деле ndimage не обрабатывает цветные изображения. Он обрабатывает последнее (3,) измерение вашего массива как третье пространственное измерение.

Матрица, которую вы вводите, на самом деле является только матрицей вращения, а не аффинной матрицей. Документация, кажется, не ясно об этом. Вы должны передать вектор сдвига через параметр offset. Вектор сдвига также включает в себя «сдвиг цвета» в качестве третьего элемента.

То же самое относится к методу shift, который описан в комментарии Тревиса Вота выше. Правильный синтаксис: ndimage.shift(img, (10.0, 10.0, 0.0), mode="wrap") --- конечно, если только вы не хотите сделать забавное изменение цвета.

В принципе, вы можете указать ndimage не сдвигать и т. Д. Изображение вдоль цветовой оси, как указано выше, но работа с каждым цветным элементом в отдельности должна быть немного быстрее.

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