Skimage: определение вертикального сдвига - PullRequest
0 голосов
/ 14 ноября 2018
Пакет

Python skimage имеет функцию transform.AffineTransform(), где одним из параметров является shear, что делает горизонтальный сдвиг .

Очевидно, я могу сделать вертикальный сдвиг, переключая оси назад и вперед. Вот что я делаю:

from skimage import data, transform
import matplotlib.pyplot as plt
import numpy as np

img = data.astronaut()/255

v = 0.3

tf = transform.AffineTransform(shear=-v)
img2 = transform.warp(img, tf, order=1, preserve_range=True, mode='constant')

img3 = np.swapaxes(img, 0, 1)
img3 = transform.warp(img3, tf, order=1, preserve_range=True, mode='constant')
img3 = np.swapaxes(img3, 0, 1)

plt.imshow(np.hstack([img, img2, img3]))
plt.show()

shear

В любом случае, я удивлен, что нет более прямого способа определить вариант вертикального сдвига ... Я ошибаюсь?

1 Ответ

0 голосов
/ 14 ноября 2018

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

from skimage import data, transform
import matplotlib.pyplot as plt
import numpy as np

img = data.astronaut()/255

v = 0.3

tf = transform.AffineTransform(shear=-v)
img2 = transform.warp(img, tf, order=1, preserve_range=True, mode='constant')

img3 = np.swapaxes(img, 0, 1)
img3 = transform.warp(img3, tf, order=1, preserve_range=True, mode='constant')
img3 = np.swapaxes(img3, 0, 1)

plt.imshow(np.hstack([img, img2, img3]))

# Using the transformation matrix directly...

tf_h = transform.AffineTransform(
    np.array([[1, 0.3, 0], [0, 1, 0], [0, 0, 1]]))
img4 = transform.warp(img, tf, order=1, preserve_range=True, mode='constant')
tf_v = transform.AffineTransform(
    np.array([[1, 0, 0], [0.3, 1, 0], [0, 0, 1]]))
img4 = transform.warp(img, tf_h, order=1, preserve_range=True, mode='constant')
img5 = transform.warp(img, tf_v, order=1, preserve_range=True, mode='constant')

plt.figure()
plt.imshow(np.hstack([img, img4, img5]))

plt.show()

Вы должны увидеть две фигуры с одинаковым набором изображений.

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