如果我使用的是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
之间最合适的椭圆?
“平均”的定义可能含糊不清,为您提供不同的解决方案。如果这对您来说无关紧要,因为您只想以任何方式平均形状,下面是如何平均两个矩形的简单解决方案:
表示两个矩形(a1, a2, a3, a4)
和(b1, b2, b3, b4)
。让我们说我们想找到矩形(x1, x2, x3, x4)
最小化
矩形参数化为
其中R
是2D旋转矩阵,q_i
是w
和h
未知矩形大小之一。 p
是未知的矩形中心。
总体公式形成二次规划问题,未知数w, h, R, p
和二次约束R
是一个旋转矩阵。