in pytouch/tasks/contact_area.py [0:0]
def _compute_contact_area(self, contours, contour_threshold):
for contour in contours:
if len(contour) > contour_threshold:
ellipse = cv2.fitEllipse(contour)
poly = cv2.ellipse2Poly(
(int(ellipse[0][0]), int(ellipse[0][1])),
(int(ellipse[1][0] / 2), int(ellipse[1][1] / 2)),
int(ellipse[2]),
0,
360,
5,
)
center = np.array([ellipse[0][0], ellipse[0][1]])
a, b = (ellipse[1][0] / 2), (ellipse[1][1] / 2)
theta = (ellipse[2] / 180.0) * np.pi
major_axis = np.array(
[center[0] - b * np.sin(theta), center[1] + b * np.cos(theta)]
)
minor_axis = np.array(
[center[0] + a * np.cos(theta), center[1] + a * np.sin(theta)]
)
major_axis_end = 2 * center - major_axis
minor_axis_end = 2 * center - minor_axis
return poly, major_axis, major_axis_end, minor_axis, minor_axis_end