Я хотел бы повернуть изображение на основе второго изображения. Оба изображения являются спутниковыми изображениями, однако они не повернуты в одном и том же направлении (в одном изображение вершина находится в северном направлении, а в другом поворот не известен). Но у меня есть как минимум три пары пикселей в каждом из изображений (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