#python #opencv #computer-vision
#python #opencv #компьютерное зрение
Вопрос:
Если я использую OpenCV (Python) и подгоняю две фигуры, например:
a = cv2.fitEllipse(contours)
b = cv2.minAreaRect(contours)
Оба a
и b
представлены в виде Box2D
объектов, которые выглядят примерно так:
center: (x, y)
size: (width, height)
rotation: angle
a
и b
часто будут довольно похожими, но не точными из-за разных методов подгонки. Как я могу найти форму (эллипс), которая является «средним значением» a
и b
? То есть эллипс, который лучше всего подходит между a
и b
?
Комментарии:
1. Непонятно, чего вы пытаетесь достичь, IMO. Рассмотрите возможность добавления примера изображения с результатами
a
b
и чертежом того, как должен выглядеть желаемый результат в этом конкретном случае.2. Можете ли вы предоставить некоторые примерные значения для
a
иb
вместе с ожидаемым результатом?3. Можете ли вы описать / уточнить, что вы подразумеваете под «средним» и «наилучшим образом подходящим», это по области?
Ответ №1:
Определение «среднего» может быть неоднозначным и дает вам разные решения. Если для вас это не имеет большого значения, поскольку вы просто хотите каким-либо образом усреднить фигуру, ниже приведено простое решение о том, как усреднить два прямоугольника:
Обозначим два прямоугольника (a1, a2, a3, a4)
и (b1, b2, b3, b4)
. Допустим, мы хотим найти (x1, x2, x3, x4)
минимизацию прямоугольника
Прямоугольник параметризуется как
где R
— 2D-матрица вращения и q_i
является матрицей с w
и h
неизвестным размером прямоугольника. p
является неизвестным центром прямоугольника.
Общая формулировка формирует квадратичную задачу программирования с неизвестными w, h, R, p
и квадратичными ограничениями R
— это матрица вращения.