🔨 refactor(data_processing.py): rename function parameter to improve semantics

The function parameter `update_progress_bar` has been renamed to `progressbar_placeholder` to improve the semantics of the function. This change does not affect the functionality of the code.

 feat(data_processing.py): add new morphological indicators to the output of the `get_advanced_data` function
The `get_advanced_data` function now calculates and returns the following morphological indicators:
- MI_mR: the ratio of the maximum radius to the mean radius
- MI_mH: the ratio of the maximum radius to the height of the object
- V_scan: the volume of the scanned object
- R_V_scan: the radius of a sphere with the same volume as the scanned object
- S_V_scan: the surface area of a sphere with the same volume as the scanned object
- R_h: the hydraulic radius of the object
- HI: the hydraulic index of the object
This commit is contained in:
Djalim Simaila 2023-05-10 15:43:01 +02:00
parent 16f43c2126
commit aeb8c6ed44

View File

@ -107,7 +107,7 @@ def get_discrete_data(obj:ScannedObject, ndigits:int, delta_z:float=1, update_pr
progress += 1 progress += 1
return data return data
def get_advanced_data(discrete_data:dict, update_progress_bar= progressbar_placeholder)->dict: def get_advanced_data(discrete_data:dict, V_scan = 0, update_progress_bar= progressbar_placeholder)->dict:
""" """
Calculates morphological indicators from the given discrete data Calculates morphological indicators from the given discrete data
@ -122,20 +122,20 @@ def get_advanced_data(discrete_data:dict, update_progress_bar= progressbar_place
- Tortuosite - Tortuosite
- Volume en mm3 - Volume en mm3
- Surface en mm2 - Surface en mm2
- Moyenne des rayons moyens - Moyenne des rayons moyens R
- Ecart-type des rayons moyens - Ecart-type des rayons moyens σ_R
- Sigma r tot - σ_R^tot
- MI_l - MI_l
- MI_p - MI_p
- Rayon hydraulique R_h
""" """
all_R = discrete_data["Rayon moyen (en mm)"]
# Tortusity # Tortusity
l = 0 l = 0
L = 0 L = 0
vertices = list(zip(discrete_data["X moy (en mm)"], vertices = list(zip(discrete_data["X moy (en mm)"],
discrete_data["Y moy (en mm)"], discrete_data["Y moy (en mm)"],
discrete_data["Z moy (en mm)"])) discrete_data["Z moy (en mm)"]))
for index in range(len(vertices)-1): for index in range(len(vertices)-1):
l += de.get_distance_between_two_vertices(vertices[index], vertices[index+1]) l += de.get_distance_between_two_vertices(vertices[index], vertices[index+1])
L = de.get_distance_between_two_vertices(vertices[0], vertices[-1]) L = de.get_distance_between_two_vertices(vertices[0], vertices[-1])
@ -144,26 +144,44 @@ def get_advanced_data(discrete_data:dict, update_progress_bar= progressbar_place
# Volume and surface # Volume and surface
H = discrete_data["Z moy (en mm)"][-1] - discrete_data["Z moy (en mm)"][0] H = discrete_data["Z moy (en mm)"][-1] - discrete_data["Z moy (en mm)"][0]
R = de.get_mean([np.power(r,2) for r in discrete_data["Rayon moyen (en mm)"]]) R2_mean = de.get_mean([np.power(r,2) for r in all_R])
V = np.pi * R * H V = np.pi * R2_mean * H
S = 2 * np.pi * R * H S = 2 * np.pi * R2_mean * H
update_progress_bar(30) update_progress_bar(30)
# Morphological indicators # Morphological indicators
R_mean = de.get_mean(discrete_data["Rayon moyen (en mm)"]) R_mean = de.get_mean(all_R)
R_mean_std = de.get_standard_deviation(discrete_data["Rayon moyen (en mm)"]) R_mean_std = de.get_standard_deviation(all_R)
mean_sigma_r_squared = de.get_mean([np.power(r,2) for r in discrete_data["Rayon ecart type (en mm)"]]) mean_sigma_r_squared = de.get_mean([np.power(r,2) for r in discrete_data["Rayon ecart type (en mm)"]])
sigma_r_tot = np.sqrt(np.power(R_mean_std,2) + mean_sigma_r_squared ) sigma_r_tot = np.sqrt(np.power(R_mean_std,2) + mean_sigma_r_squared )
MI_l = R_mean_std/R_mean MI_l = R_mean_std/R_mean
MI_p = np.sqrt(mean_sigma_r_squared)/R_mean MI_p = np.sqrt(mean_sigma_r_squared)/R_mean
R_max = max(all_R)
MI_mR = R_max/R_mean
MI_mH = R_max/H
#MI_mr_in = R_max/R_in
# TODO understand what is R_in
R_V_scan = np.sqrt(V_scan/np.pi*H)
S_V_scan = 2 * np.sqrt(np.pi * H * V_scan)
R_h = R2_mean/ R_mean
HI = R_mean * R_V_scan / R2_mean
update_progress_bar(100) update_progress_bar(100)
return { return {
"Tortuosité":T, "Tortuosité":T,
"Volume en mm3":V, "Volume en mm3":V,
"Surface en mm2":S, "Surface en mm2":S,
"Moyenne des rayons moyens":R_mean, "Moyenne des rayons moyens 〈R〉":R_mean,
"Ecart-type des rayons moyens":R_mean_std, "Ecart-type des rayons moyens σ_〈R〉":R_mean_std,
"Sigma r tot":sigma_r_tot, "σ_〈R〉^tot":sigma_r_tot,
"MI_l":MI_l, "MI_l":MI_l,
"MI_p":MI_p "MI_p":MI_p,
"MI_mR":MI_mR,
"MI_mH":MI_mH,
# "MI_mr_in":MI_mr_in,
"V_scan":V_scan,
"R_V_scan":R_V_scan,
"S_V_scan":S_V_scan,
"Rayon hydraulique R_h":R_h,
"HI":HI
} }