Быстрое преобразование 2D твердого тела в numpy / scipy

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

К сожалению, похоже, что affine_transform в scipy.ndimage.interpolation не выполняет перевод. Я знаю, что я мог бы использовать комбинацию shift и rotate , но это довольно беспорядочно и вовлекает интерполяцию вывода несколько раз.

Я также попытался использовать generic geometric_transformation следующим образом:

 import numpy as np from scipy.ndimage.interpolation import geometric_transformation # make the affine matrix def maketmat(xshift,yshift,rotation,dimin=(0,0)): # centre on the origin in2orig = np.identity(3) in2orig[:2,2] = -dimin[0]/2.,-dimin[1]/2. # rotate about the origin theta = np.deg2rad(rotation) rotmat = np.identity(3) rotmat[:2,:2] = [np.cos(theta),np.sin(theta)],[-np.sin(theta),np.cos(theta)] # translate to new position orig2out = np.identity(3) orig2out[:2,2] = xshift,yshift # the final affine matrix is just the product tmat = np.dot(orig2out,np.dot(rotmat,in2orig)) # function that maps output space to input space def out2in(outcoords,affinemat): outcoords = np.asarray(outcoords) outcoords = np.concatenate((outcoords,(1.,))) incoords = np.dot(affinemat,outcoords) incoords = tuple(incoords[0:2]) return incoords def rbtransform(source,xshift,yshift,rotation,outdims): # source --> target forward = maketmat(xshift,yshift,rotation,source.shape) # target --> source backward = np.linalg.inv(forward) # now we can use geometric_transform to do the interpolation etc. tformed = geometric_transform(source,out2in,output_shape=outdims,extra_arguments=(backward,)) return tformed 

Это работает, но он ужасно медленный, поскольку он по существу зацикливается на пиксельных координатах! Каков хороший способ сделать это?

2 Solutions collect form web for “Быстрое преобразование 2D твердого тела в numpy / scipy”

Я думаю, что affine_transform делает перевод — есть параметр offset .

Можете ли вы использовать изображение scikit ? Если это так, вы можете попытаться применить гомографию. Кабина гомографии, используемая для одновременного представления и перевода и вращения через матрицу 3×3. Вы можете использовать функцию skimage.transform.fast_homography.

 import numpy as np import scipy import skimage.transform im = scipy.misc.lena() H = np.asarray([[1, 0, 10], [0, 1, 20], [0, 0, 1]]) skimage.transform.fast_homography(im, H) 

Преобразование заняло около 30 мс на моем старом Core 2 Duo.

О гомографии: http://en.wikipedia.org/wiki/Homography

  • Ошибка загрузки DLL с помощью scipy.optimize?
  • Минимизация функций с большими градиентами с помощью `scipy.optimize.minimize`
  • SciPy SVD против Numpy SVD
  • поиск ближайших элементов в двух списках / массивах в Python
  • Эффективно вычитает вектор из матрицы (Scipy)
  • инициализировать матрицу float32 со случайными числами в numpy / scipy
  • Вычисление корреляции и значимости Пирсона в Python
  • Как создать ссылку view / python на scipy разреженной матрице?
  •  
    Interesting Posts for Van-Lav

    Что делать с «Неожиданным отступом» в python?

    Как избежать использования метода AppConfig.ready (), выполняющегося дважды в Django

    Python: Как преобразовать массив строк в массив чисел?

    Можно ли печатать на stdout или stderr в переносах данных Django? Если да, то как?

    Почему экземпляры python не имеют атрибута __name__?

    Как использовать drawImage reportlab с URL-адресом изображения?

    Python 2.7 Прекрасная очистка электронной почты BeautifulSoup до завершения полной базы данных

    Соглашение об именах переменных Python

    Что означает «вес» результатов поиска в PyPI при выборе пакета?

    pandas roll computation с окном на основе значений вместо отсчетов

    pyspark Линейная регрессия Пример из официальной документации – Плохие результаты?

    структура проекта для переноса многих классов c ++ в cython на один общий объект

    setup.py требует MySQL-python

    pylint: Class 'message' не имеет члена 'startswith'

    Создание указателя PyCObject в Cython

    Python - лучший язык программирования в мире.