OpenCV: объединение подогнанных фигур

#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) минимизацию прямоугольника

<код> сумма | xi - ai|^ 2   сумма |xi - bi|^2</code>

Прямоугольник параметризуется как

<код>x_i = R q_i   c</code>

где R — 2D-матрица вращения и q_i является  -w,  -hматрицей с w и h неизвестным размером прямоугольника. p является неизвестным центром прямоугольника.

Общая формулировка формирует квадратичную задачу программирования с неизвестными w, h, R, p и квадратичными ограничениями R — это матрица вращения.