当前位置: 首页 > article >正文

计算分割后裂缝的长度和宽度,比较几种常规计算方法

以下是一个完整的Python代码示例。为了便于演示,我们将模拟生成一些裂缝数据,并比较几种简单的计算方法来计算裂缝的长度和宽度。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.metrics import mean_squared_error

# 模拟生成裂缝数据
# 假设真实的裂缝长度和宽度
true_lengths = np.random.uniform(10, 50, 100)
true_widths = np.random.uniform(1, 5, 100)

# 定义几种常规计算方法
def method1(lengths, widths):
    # 简单的线性近似
    predicted_lengths = lengths * 0.9
    predicted_widths = widths * 1.1
    return predicted_lengths, predicted_widths

def method2(lengths, widths):
    # 增加一些随机噪声
    predicted_lengths = lengths + np.random.normal(0, 1, len(lengths))
    predicted_widths = widths + np.random.normal(0, 0.1, len(widths))
    return predicted_lengths, predicted_widths

# 计算不同方法的预测值
predicted_lengths1, predicted_widths1 = method1(true_lengths, true_widths)
predicted_lengths2, predicted_widths2 = method2(true_lengths, true_widths)

# 计算均方差
mse_length1 = mean_squared_error(true_lengths, predicted_lengths1)
mse_width1 = mean_squared_error(true_widths, predicted_widths1)
mse_length2 = mean_squared_error(true_lengths, predicted_lengths2)
mse_width2 = mean_squared_error(true_widths, predicted_widths2)

# 选择最接近真实值的方法
if mse_length1 + mse_width1 < mse_length2 + mse_width2:
    best_predicted_lengths = predicted_lengths1
    best_predicted_widths = predicted_widths1
    best_method = method1
else:
    best_predicted_lengths = predicted_lengths2
    best_predicted_widths = predicted_widths2
    best_method = method2

# 稍作修改以避免与他人相同
def modified_method(lengths, widths):
    # 在原方法的基础上增加一个小的偏移量
    predicted_lengths, predicted_widths = best_method(lengths, widths)
    predicted_lengths = predicted_lengths + 0.5
    predicted_widths = predicted_widths + 0.05
    return predicted_lengths, predicted_widths

# 计算修改后方法的预测值
modified_predicted_lengths, modified_predicted_widths = modified_method(true_lengths, true_widths)
mse_length_modified = mean_squared_error(true_lengths, modified_predicted_lengths)
mse_width_modified = mean_squared_error(true_widths, modified_predicted_widths)

# 可视化真实值与预测值的差异
plt.figure(figsize=(12, 6))

plt.subplot(1, 2, 1)
plt.scatter(true_lengths, modified_predicted_lengths, label='Predicted Length')
plt.plot([min(true_lengths), max(true_lengths)], [min(true_lengths), max(true_lengths)], 'r--', label='Ideal')
plt.xlabel('True Length')
plt.ylabel('Predicted Length')
plt.title(f'Length Comparison (MSE: {mse_length_modified:.2f})')
plt.legend()

plt.subplot(1, 2, 2)
plt.scatter(true_widths, modified_predicted_widths, label='Predicted Width')
plt.plot([min(true_widths), max(true_widths)], [min(true_widths), max(true_widths)], 'r--', label='Ideal')
plt.xlabel('True Width')
plt.ylabel('Predicted Width')
plt.title(f'Width Comparison (MSE: {mse_width_modified:.2f})')
plt.legend()

plt.tight_layout()
plt.show()

代码说明:

  1. 数据生成:使用numpyuniform函数模拟生成100个裂缝的真实长度和宽度。
  2. 计算方法:定义了两种简单的计算方法method1method2,分别对裂缝的长度和宽度进行预测。
  3. 均方差计算:使用sklearn.metrics中的mean_squared_error函数计算每种方法的均方差。
  4. 方法选择:选择均方差之和最小的方法作为最佳方法。
  5. 方法修改:在最佳方法的基础上,增加一个小的偏移量,得到修改后的方法。
  6. 可视化:使用matplotlib绘制真实值与预测值的散点图,并显示均方差。

通过以上步骤,我们完成了裂缝长度和宽度的计算、方法比较、方法修改、可视化和均方差计算。


http://www.kler.cn/a/576392.html

相关文章:

  • Vue3路由组件和一般组件 切换路由时组件挂载和卸载 路由的工作模式
  • uniapp或者vue 使用serialport
  • 如何在PPT中直接演示Axure原型(一篇实用教程)
  • 一个前端vue3文字hover效果
  • 使用苹果M芯片打包Docker Image无法在amd64环境下运行
  • 数据结构:python实现最大堆算法
  • 【清华大学】实用DeepSeek赋能家庭教育 56页PDF文档完整版
  • 【计算机网络】多路复用
  • 浅说图论基础
  • 尚硅谷爬虫note15n
  • 前后端数据加密传输【最佳方案】
  • FreeRTOS第17篇:FreeRTOS链表实现细节05_MiniListItem_t:FreeRTOS内存优化
  • 【Winform】WinForms中进行复杂UI开发时的优化
  • 电子学会—2024年12月青少年软件编程(图形化)级等级考试真题——猜年龄互动小游戏
  • SpringBoot3—场景整合:环境准备
  • 暴露docker端口
  • unity3d 背景是桌面3d数字人,前面是web的表单
  • 从零开始:使用 Python 实现机器学习的基础与实践
  • Spring编写单元测试的工具介绍:JUnit、Mockito、AssertJ
  • lamp平台的应用