Source code for ellipse_fitting

import cv2
import pandas as pd
import numpy as np

[docs]def fit_ellipse(xcoord, ycoord): """ Fit an ellipse to the given cluster points and extract ellipse parameters. Authors: Ethan Fang Version: v0_1 (Jul 10 2023) :param xcoord: X-coordinates of the cluster points. :type xcoord: list or numpy.ndarray :param ycoord: Y-coordinates of the cluster points. :type ycoord: list or numpy.ndarray :return: DataFrame containing ellipse information sorted by increasing major axis length. :rtype: pandas.DataFrame """ # Create a list to store ellipse information ellipse_data = [] # Iterate over each cluster for cluster_idx in range(len(xcoord)): # Get the coordinates for the current cluster coordinates = np.column_stack((xcoord[cluster_idx], ycoord[cluster_idx])) center = (1023, 1023) # Fit an ellipse to the coordinates ellipse = cv2.fitEllipse(coordinates) # Extract the ellipse parameters center, axes, angle = ellipse major_axis_length = max(axes) minor_axis_length = min(axes) # Calculate the eccentricity of the ellipse a = major_axis_length / 2.0 b = minor_axis_length / 2.0 eccentricity = np.sqrt(1 - (b**2 / a**2)) # Store the ellipse information in a dictionary ellipse_info = { 'Cluster': cluster_idx, 'Eccentricity': eccentricity, 'Center': center, 'Major Axis Length': major_axis_length, 'Minor Axis Length': minor_axis_length, 'Angle': angle } # Append the dictionary to the ellipse_data list ellipse_data.append(ellipse_info) # Create a DataFrame from the ellipse_data list df_ellipse = pd.DataFrame(ellipse_data) # Sort the DataFrame by increasing major axis length df_ellipse = df_ellipse.sort_values('Major Axis Length') return df_ellipse