Точность эллипса от 2D точек - PullRequest
0 голосов
/ 03 апреля 2019

У меня есть эллипс, который я обнаружил по изображению, используя opencv, где elipse определяется как (x_centre,y_centre),(minor_axis,major_axis),angle.У меня также есть список точек в форме [(x1, y1), (x2,y2), ...], которые определяют, где эллипс должен быть на изображении.

Как я могу найти точность найденного эллипса по эллипсу, определенному точками?

Обновление

Для лучшего понимания это результат моего реального сценария: Обнаружение эллипса .Красный эллипс был обнаружен по изображению, а зеленые точки только что загружены из файла.

Менее точный пример: обнаружение эллипса 2

Мне нужен какой-то метод, чтобы проверить, насколько точен эллипс к внешним точкам.

1 Ответ

0 голосов
/ 03 апреля 2019

Этот ответ описывает один способ выяснить, насколько точно найденный эллипс соответствует эллипсу, как определено списком точек.

Первый шаг - создать изображение маски и нарисовать на нем эллипс.

mask = np.zeros((img.shape[0], img.shape[1]), np.uint8)
mask = cv2.ellipse(mask, ellipse, 255, 5)

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

hit, miss = 0,0
for point in cnt:
    if mask[point[0][1], point[0][0]] == 0: miss += 1
    else: hit += 1

Это эллипс, который идеально подходит: good fit

Вот эллипс, который не очень хорошо вписывается: bad fit

Этот RMSE можно найти с помощью функции cv2.pointsPolygonTest:

_,ellipse_contours,hierarchy = cv2.findContours(mask, 1, 2)
ellipse_contour = ellipse_contours[0]
for point in cnt:
    total_dist += cv2.pointPolygonTest(ellipse_contour, tuple(point[0]), True)**2
rmse = math.sqrt(total_dist/len(cnt))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...