This commit is contained in:
kaiza_hikaru 2025-11-03 10:31:14 +08:00
parent 9f3ef716fb
commit fd7a9dba2e

View File

@ -61,7 +61,7 @@ def calculate_advanced_statistics(df_result):
return pd.Series(result_stats)
def process_autofocus_results(input_file, output_type="distance", group_size=30):
def process_autofocus_results(input_file, dataset_type, group_size=30):
# ========== 图片级统计数据 ==========
# 读取原始数据
df_original = pd.read_excel(input_file)
@ -139,42 +139,23 @@ def process_autofocus_results(input_file, output_type="distance", group_size=30)
df_result["dof"] = ((550.0 * df_result["rix"]) / (df_result["na"] ** 2)) + ((df_result["rix"] * 3450.0) / (df_result["mag"] * df_result["na"]))
# 计算绝对/带符号误差/景深比
if output_type == "ratio":
df_result["error_mean"] = np.abs(df_result["label"] / df_result["dof"] - df_result["pred_mean"])
df_result["error_median"] = np.abs(df_result["label"] / df_result["dof"] - df_result["pred_median"])
df_result["error_z_mean"] = np.abs(df_result["label"] / df_result["dof"] - df_result["pred_z_mean"])
df_result["error_z_median"] = np.abs(df_result["label"] / df_result["dof"] - df_result["pred_z_median"])
df_result["serror_mean"] = df_result["label"] / df_result["dof"] - df_result["pred_mean"]
df_result["serror_median"] = df_result["label"] / df_result["dof"] - df_result["pred_median"]
df_result["serror_z_mean"] = df_result["label"] / df_result["dof"] - df_result["pred_z_mean"]
df_result["serror_z_median"] = df_result["label"] / df_result["dof"] - df_result["pred_z_median"]
df_result["error_mean"] = np.abs(df_result["label"] - df_result["pred_mean"])
df_result["error_median"] = np.abs(df_result["label"] - df_result["pred_median"])
df_result["error_z_mean"] = np.abs(df_result["label"] - df_result["pred_z_mean"])
df_result["error_z_median"] = np.abs(df_result["label"] - df_result["pred_z_median"])
df_result["serror_mean"] = df_result["label"] - df_result["pred_mean"]
df_result["serror_median"] = df_result["label"] - df_result["pred_median"]
df_result["serror_z_mean"] = df_result["label"] - df_result["pred_z_mean"]
df_result["serror_z_median"] = df_result["label"] - df_result["pred_z_median"]
df_result["error_ratio_mean"] = df_result["error_mean"]
df_result["error_ratio_median"] = df_result["error_median"]
df_result["error_ratio_z_mean"] = df_result["error_z_mean"]
df_result["error_ratio_z_median"] = df_result["error_z_median"]
df_result["serror_ratio_mean"] = df_result["serror_mean"]
df_result["serror_ratio_median"] = df_result["serror_median"]
df_result["serror_ratio_z_mean"] = df_result["serror_z_mean"]
df_result["serror_ratio_z_median"] = df_result["serror_z_median"]
else:
df_result["error_mean"] = np.abs(df_result["label"] - df_result["pred_mean"])
df_result["error_median"] = np.abs(df_result["label"] - df_result["pred_median"])
df_result["error_z_mean"] = np.abs(df_result["label"] - df_result["pred_z_mean"])
df_result["error_z_median"] = np.abs(df_result["label"] - df_result["pred_z_median"])
df_result["serror_mean"] = df_result["label"] - df_result["pred_mean"]
df_result["serror_median"] = df_result["label"] - df_result["pred_median"]
df_result["serror_z_mean"] = df_result["label"] - df_result["pred_z_mean"]
df_result["serror_z_median"] = df_result["label"] - df_result["pred_z_median"]
df_result["error_ratio_mean"] = df_result["error_mean"] / df_result["dof"]
df_result["error_ratio_median"] = df_result["error_median"] / df_result["dof"]
df_result["error_ratio_z_mean"] = df_result["error_z_mean"] / df_result["dof"]
df_result["error_ratio_z_median"] = df_result["error_z_median"] / df_result["dof"]
df_result["serror_ratio_mean"] = df_result["serror_mean"] / df_result["dof"]
df_result["serror_ratio_median"] = df_result["serror_median"] / df_result["dof"]
df_result["serror_ratio_z_mean"] = df_result["serror_z_mean"] / df_result["dof"]
df_result["serror_ratio_z_median"] = df_result["serror_z_median"] / df_result["dof"]
df_result["error_ratio_mean"] = df_result["error_mean"] / df_result["dof"]
df_result["error_ratio_median"] = df_result["error_median"] / df_result["dof"]
df_result["error_ratio_z_mean"] = df_result["error_z_mean"] / df_result["dof"]
df_result["error_ratio_z_median"] = df_result["error_z_median"] / df_result["dof"]
df_result["serror_ratio_mean"] = df_result["serror_mean"] / df_result["dof"]
df_result["serror_ratio_median"] = df_result["serror_median"] / df_result["dof"]
df_result["serror_ratio_z_mean"] = df_result["serror_z_mean"] / df_result["dof"]
df_result["serror_ratio_z_median"] = df_result["serror_z_median"] / df_result["dof"]
# 计算方向预测正确性
df_result["direction_mean"] = (df_result['label'] * df_result['pred_mean'] >= 0).astype(int)
@ -258,11 +239,11 @@ def main():
# 确定超参数
model_type = cfg["model_type"]
output_type = cfg["output_type"]
dataset_type = cfg["dataset_type"]
result_path = f"results/{model_type}_{output_type}.xlsx"
result_path = f"results/{model_type}_{dataset_type}.xlsx"
_ = process_autofocus_results(result_path, output_type)
_ = process_autofocus_results(result_path, dataset_type)
if __name__ == "__main__":