Open CV Python-искажение изображения радиальное и перспективное-
У меня есть искаженная картина, где без искажения точки A, B C и D образуют квадрат 1 см * 1 см.
Я попытался использовать омографию, чтобы исправить это, но она искажает линию AD и BC, как вы можете видеть на рисунке.У вас есть идея, как я могу это исправить?
Большое спасибо!
Мари - кодер начинающий
PS: Для информации изображение снимается в трубке с эндоскопической камерой, имеющей большую поле зрения, позволяющее сделать снимок трубки практически вокруг камеры. Я буду использовать квадрат 1*1 см, чтобы оценить рост корней с помощью нескольких снимков, сделанных с течением времени.
Вот мой код:
import cv2
import numpy as np
import matplotlib.pyplot as plt
if __name__ == '__main__' :
# Read source image.
im_src = cv2.imread('points2.jpg', cv2.IMREAD_COLOR)
# Four points of the miniR image
pts_src = np.array([[742,223],[806,255],[818,507],[753,517]], dtype=float)
# Read destination image.
im_dst = cv2.imread('rectangle.jpg', cv2.IMREAD_COLOR)
# Four points of the square
pts_dst = np.array([[200,200],[1000,200],[1000,1000],[200,1000]], dtype=float)
# Calculate Homography
h, status = cv2.findHomography(pts_src, pts_dst)
# Warp source image to destination based on homography
im_out = cv2.warpPerspective(im_src, h, (im_dst.shape[1],im_dst.shape[0]))
cv2.imwrite('corrected2.jpg', im_out)
# Display images
cv2.imshow("Source Image", im_src)
cv2.imshow("Destination Image", im_dst)
cv2.imshow("Warped Source Image", im_out)
cv2.waitKey(0)
1 ответ:
Это фонетическое письмо является проективным преобразованием. Таким образом, он может только сопоставлять прямые линии с прямыми линиями. Прямые стороны вашего входного криволинейного четырехугольника правильно выпрямлены, но вы не можете выпрямить кривые стороны с помощью проективного преобразования.
На фотографии, которую вы разместили, может быть разумно предположить, что общая геометрия приблизительно равна цилиндру, а "вертикальные" линии параллельны оси цилиндра. Так что они примерно прямые, а проективное преобразование (проекция камеры) сопоставит их с прямыми линиями. "Горизонтальные" линии-это изображения кругов или эллипсов, если цилиндр раздавлен. Проективное преобразование преобразует эллипсы (в частности, окружности) в эллипсы. Таким образом, вы можете продолжить, установив эллипсы. Смотритеэтот другой ответ для подсказок.