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 2

1 ответ:

Это фонетическое письмо является проективным преобразованием. Таким образом, он может только сопоставлять прямые линии с прямыми линиями. Прямые стороны вашего входного криволинейного четырехугольника правильно выпрямлены, но вы не можете выпрямить кривые стороны с помощью проективного преобразования.

На фотографии, которую вы разместили, может быть разумно предположить, что общая геометрия приблизительно равна цилиндру, а "вертикальные" линии параллельны оси цилиндра. Так что они примерно прямые, а проективное преобразование (проекция камеры) сопоставит их с прямыми линиями. "Горизонтальные" линии-это изображения кругов или эллипсов, если цилиндр раздавлен. Проективное преобразование преобразует эллипсы (в частности, окружности) в эллипсы. Таким образом, вы можете продолжить, установив эллипсы. Смотритеэтот другой ответ для подсказок.