code: def ellipse_from_second_moments(image, labels, indexes, wants_compactness = False):
      
      if len(indexes) == 0:
          return (np.zeros((0,2)), np.zeros((0,)), np.zeros((0,)), 
                  np.zeros((0,)),np.zeros((0,)))
      i,j = np.argwhere(labels != 0).transpose()
      return ellipse_from_second_moments_ijv(i,j,image[i,j], labels[i,j], indexes, wants_compactness)
docs: Calculate measurements of ellipses equivalent to the second moments of labels
      
      image  - the intensity at each point
      labels - for each labeled object, derive an ellipse
      indexes - sequence of indexes to process
      
      returns the following arrays:
         coordinates of the center of the ellipse
         eccentricity
         major axis length
         minor axis length
         orientation
         compactness (if asked for)
      
      some definitions taken from "Image Moments-Based Structuring and Tracking
      of Objects", LOURENA ROCHA, LUIZ VELHO, PAULO CEZAR P. CARVALHO,
      http://sibgrapi.sid.inpe.br/col/sid.inpe.br/banon/2002/10.23.11.34/doc/35.pdf
      particularly equation 5 (which has some errors in it).
      These yield the rectangle with equivalent second moments. I translate
      to the ellipse by multiplying by 1.154701 which is Matlab's calculation
      of the major and minor axis length for a square of length X divided
      by the actual length of the side of a square of that length.
      
      eccentricity is the distance between foci divided by the major axis length
      orientation is the angle of the major axis with respect to the X axis
      compactness is the variance of the radial distribution normalized by the area