Повернуть изображение так, чтобы оно совпадало со вторым изображением - PullRequest
0 голосов
/ 27 марта 2020

Я хотел бы повернуть изображение на основе второго изображения. Оба изображения являются спутниковыми изображениями, однако они не повернуты в одном и том же направлении (в одном изображение вершина находится в северном направлении, а в другом поворот не известен). Но у меня есть как минимум три пары пикселей в каждом из изображений (x1, y1, x2, y2). Поэтому моя идея состоит в том, чтобы выяснить их относительное положение и получить из этого угол поворота.

В настоящее время я оцениваю угол следующим образом:

def angle_between(v1, v2):
    """ Returns the angle in radians between vectors 'v1' and 'v2'::

            >>> angle_between((1, 0, 0), (0, 1, 0))
            1.5707963267948966
            >>> angle_between((1, 0, 0), (1, 0, 0))
            0.0
            >>> angle_between((1, 0, 0), (-1, 0, 0))
            3.141592653589793
    """
    v1_u = unit_vector(v1)
    v2_u = unit_vector(v2)
    angle_rad = np.arccos(np.clip(np.dot(v1_u, v2_u), -1.0, 1.0))
    return (angle_rad*180)/math.pi

с такими входными данными:

v1 = [points[0][0] - points[1][0], points[0][1] - points[1][1]] #hist

v2 = [points[0][2] - points[1][2], points[0][3] - points[1][3]] #ref

Однако здесь используются только две пары пикселей вместо трех. Поэтому вращение несколько раз некорректно. Кто-нибудь может показать мне, как использовать все три пикселя?

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

РЕДАКТИРОВАТЬ :

Я не могу добавить исходные изображения, поскольку они защищены авторским правом, поскольку содержание изображения не очень важно, я добавил отбеленные изображения. Первое - это входное изображение с тремя нарисованными точками, второе - повернутое изображение (где дополнительно (неправильная, из-за поворота) область выреза отмечена прямоугольником), а третье - историческое изображение.

Очки следующие:

567.01,144,1544.4,4581.8
1182.6,1568.1,2934.1,3724.3
938.97,1398.1,2795.8,4002.5

с:

x_historical, y_historical, x_presentday, y_presentday

Original image Original image rotated Historical image

...