Я пытаюсь сделать панораму, и, поскольку существует общий метод поиска преобразования ч / б двух изображений, а затем выполнить деформацию в зависимости от преобразования в координатах предыдущего изображения.
H1 - матрица гомографии 3x3
image1Frame = H1 * image2Frame
(image2Frame = [x2, y2, 1], image1Frame = [x1, y1, 1], учитывая это, нам нужно разделить H1 * image2Frame [: 2] / H1 * image2Frame [2])
Из этой методологии я пытался преобразовать несколько изображений в мои координаты 1-го изображения, а для определения матриц гомографии я использовал линейное преобразование.
image1Frame = H1 * H2 * image3Frame
учитывая: - image2Frame = H2 * image3Frame
после выполнения этой задачи для всех моих изображений я преобразовал координаты (x, y) (то есть координаты пикселей) и получил диапазон (x, y) координирует и затем устанавливает finalImageShape = (макс у-мин у, макс х-мин х) .
Использование здесь -ve знака для мин х и у, потому что я получил их -ve .
и установите матрицу перевода для перевода -ve координат изображения, чтобы я мог получить всю панораму, но даже тогда я получаю большую часть моего изображения пустым, а также некоторую часть моего базового изображения (image1) также вырезают, хотя Я установил это H матрица np.eye (3).
Мой код для создания панорамы: -
`
imgBase = np.zeros((dsize[0], dsize[1], 3), dtype='uint8')
for i in finalData[1:]:
# i = [index of image, H]
# H = multiplication of corrsponding H as describes above
img = cv2.warpPerspective(Data['DataCV'][i[0]], i[1]@shiftMat,(dsize[1],dsize[0]))
print(img.shape)
imgBase = cv2.addWeighted(img, 5, imgBase, 0.5, 1)
cv2.imshow('img',imgBase)
cv2.waitKey()
cv2.destroyAllWindows()
`
Вот некоторые строки кода из документации opencv, которые я использую с некоторыми изменениями.
H, mask = cv2.findHomography(imgAccRejPts, imgBasePts, cv2.RANSAC)
, пожалуйста, помогите мне, а также предложите любую другую технику, поскольку я просто использую побитовые операции opencv для ее достижения.
Спасибо,