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

EMG肌电信号可视化系统【附源码】

项目概述

本项目是一个基于Python和Dash框架开发的肌电信号(EMG)数据可视化系统。该系统能够处理和展示多频率、多通道的肌电信号数据,提供了多种可视化方式,包括雷达图、柱状图、3D散点图和交互式人体肌肉图。

技术架构

核心技术栈

  • 后端框架: Python + Dash
  • 数据处理: NumPy, SciPy, Pandas
  • 可视化: Plotly
  • 前端交互: Dash Bootstrap Components, JavaScript
  • 数据格式: MATLAB .mat文件

项目结构

```

file/

├── main_dash.py          # 主应用程序,Dash服务器

├── Plot.py               # 绘图功能模块

├── load_mat.py           # 数据加载模块

├── assets/

│   ├── Muscles_front_and_back.svg    # 人体肌肉SVG图

│   └── svg_clientside.js             # 前端JavaScript交互

├── data/

│   └── summary_all_struct.mat        # EMG数据文件

└── __pycache__/          # Python缓存文件

核心功能模块

1. 数据加载模块 (load_mat.py)

  • 功能特点:
  • 自动解析MATLAB .mat格式的EMG数据文件
  • 动态识别多频率数据(f2, f20, f60等)
  • 过滤标记通道(L-Mrk, R-Mrk)
  • 计算全局归一化参数

  • 核心代码逻辑:

```python

def load_summary_all(mat_path):

    # 加载MATLAB文件

    mat_data = sio.loadmat(mat_path, struct_as_record=False, squeeze_me=True)

    # 动态识别频率字段

    for attr in dir(summary):

        if attr.startswith('f') and getattr(summary, attr):

            freq = int(attr[1:])  # 提取频率值

            # 存储pairStats, stimStats, sigStats, medianFreq

  • 数据结构:
  • `frequencies`: 各频率下的统计数据
  • `channel_map_file`: 刺激通道映射
  • `channel_map_signal`: 信号通道映射
  • `global_max_per_sigChan`: 全局归一化参数

2. 绘图模块 (Plot.py)

2.1 雷达图 (generate_radar_plot)

  • 功能:
  • 支持以刺激通道或肌肉为中心的雷达图
  • 多频率数据叠加显示
  • 数据归一化处理

  • 技术实现:

```python

def generate_radar_plot(data, selected_freqs, center_mode='stim', target_index=1):

    # 根据中心模式筛选数据

    if center_mode == 'stim':

        rows = [row for row in freq_data if row.stimCh == target_index]

    elif center_mode == 'muscle':

        rows = [row for row in freq_data if row.sigChan == target_index]

    # 归一化处理

    norm_val = row.medianDelta / global_muscle_max.get(row.sigChan, 1)

2.2 柱状图 (generate_bar_plot)

  • 功能:
  • 展示特定肌肉在指定频率下的刺激响应
  • 包含加权ΔARV、起效电流、最大响应电流等参数

2.3 3D散点图 (generate_3d_scatter_plot)

  • 功能:
  • 三维空间展示肌肉位置与EMG参数关系
  • 支持多种Z轴参数选择(ΔARV、起效电流等)
  • 频率颜色编码

2.4 SVG肌肉图 (build_svg_payload)

  • 功能:
  • 基于真实人体解剖结构的可视化
  • 颜色映射表示肌肉激活强度
  • 支持点击交互获取详细信息

  • 技术特点:
  • 使用LRU缓存优化性能
  • 线性颜色映射算法
  • 客户端-服务端协同渲染

3. 主应用程序 (main_dash.py)

3.1 应用架构

  • Dash应用结构:

```python

app = dash.Dash(__name__, external_stylesheets=[dbc.themes.BOOTSTRAP])

# 布局组件

app.layout = dbc.Container([

    html.H1("EMG 可视化"),

    dcc.RadioItems(id='plot-type-radio'),  # 图表类型选择

    html.Div(id='radar-controls'),         # 雷达图控制

    html.Div(id='bar-controls'),           # 柱状图控制

    html.Div(id='scatter3d-controls'),     # 3D图控制

    html.Div(id='svg-controls'),           # SVG图控制

    html.Div(id='plot-container')          # 图表容器

])

3.2 回调函数系统

  • 控制面板切换:

```python

@app.callback(

    Output('radar-controls', 'style'),

    Output('bar-controls', 'style'),

    Output('scatter3d-controls', 'style'),

    Output('svg-controls','style'),

    Input('plot-type-radio', 'value')

)

def toggle_control_visibility(plot_type):

    # 根据图表类型显示对应控制面板

  • 动态图表更新:

```python

@app.callback(

    Output('plot-container', 'children'),

    [Input('plot-type-radio', 'value'),

     Input('center-mode-radio', 'value'),

     Input('target-index-dropdown', 'value'),

     # ... 其他输入参数

    ]

)

def update_plot(plot_type, center_mode, target_index, ...):

    # 根据用户选择生成对应图表

3.3 客户端JavaScript集成

  • SVG交互处理:

```python

app.clientside_callback(

    ClientsideFunction(namespace='svgNS', function_name='paint'),

    Output("svg-paint-sink", "data"),

    Input("svg-payload-store", "data"),

    Input("plot-type-radio", "value"),

)

4. 前端交互 (svg_clientside.js)

4.1 SVG颜色渲染

  • 功能:
  • 接收服务端颜色数据
  • 动态更新SVG元素颜色
  • 性能优化的批量处理

```javascript

paint: function(payload, _trigger) {

    for (const id in payload) {

        const el = document.getElementById(id);

        if (el) {

            el.style.fill = payload[id];  // 直接设置颜色

        }

    }

}

4.2 点击事件处理

  • 功能:
  • 肌肉点击检测
  • 弹窗信息显示
  • 坐标计算和定位

```javascript

clickInfo: function(ev, details) {

    // 获取点击的肌肉ID

    let id = ev.target.id;

    // 创建信息弹窗

    const infoWindow = document.createElement('div');

    infoWindow.className = 'muscle-info-window';

    // 设置弹窗样式和内容

}

数据流程

1. 数据加载流程

```

MAT文件 → load_mat.py → 数据结构化 → 全局变量存储

2. 可视化流程

```

用户选择 → Dash回调 → Plot.py生成图表 → 前端渲染

3. SVG交互流程

```

用户点击SVG → JavaScript事件 → 服务端数据查询 → 弹窗显示

技术亮点

1. 性能优化

  • LRU缓存: SVG数据生成使用缓存机制
  • 客户端渲染: SVG颜色更新在客户端执行
  • 数据预处理: 启动时计算全局归一化参数

2. 用户体验

  • 响应式设计: 使用Bootstrap组件
  • 实时交互: 参数变化即时更新图表
  • 多视角展示: 四种不同的可视化方式

3. 代码架构

  • 模块化设计: 功能分离,便于维护
  • 配置灵活: 支持多频率、多通道数据
  • 扩展性强: 易于添加新的可视化类型

应用场景

1. 科研应用

  • 肌电信号分析研究
  • 神经肌肉功能评估
  • 康复医学数据分析

2. 临床应用

  • 患者肌肉功能评估
  • 治疗效果监测
  • 诊断辅助工具

3. 教学应用

  • 生物医学工程教学
  • 肌电信号原理演示
  • 数据可视化案例

技术挑战与解决方案

1. 大数据量处理

  • 挑战: 多频率、多通道数据量大
  • 解决方案:
  • 数据预处理和缓存
  • 按需加载机制
  • 客户端渲染优化

2. 实时交互性能

  • 挑战: 参数变化需要实时更新图表
  • 解决方案:
  • Dash回调优化
  • 客户端JavaScript处理
  • 数据结构优化

3. 跨平台兼容性

  • 挑战: 不同浏览器的SVG渲染差异
  • 解决方案:
  • 标准SVG格式
  • JavaScript兼容性处理
  • 渐进式增强设计

未来发展方向

1. 功能扩展

  • 添加更多统计分析功能
  • 支持实时数据流处理
  • 集成机器学习算法

2. 性能优化

  • 引入WebGL加速渲染
  • 实现数据流式处理
  • 优化内存使用

3. 用户体验

  • 添加数据导出功能
  • 支持自定义配色方案
  • 实现协作分享功能

总结

本EMG可视化系统成功地将复杂的肌电信号数据转化为直观的可视化展示,通过多种图表类型和交互方式,为用户提供了全面的数据分析工具。系统采用现代Web技术栈,具有良好的扩展性和维护性,在科研、临床和教学领域都有广泛的应用前景。

通过模块化的代码架构、高效的数据处理算法和优秀的用户交互设计,该系统展示了Python在科学计算和数据可视化领域的强大能力,为类似项目的开发提供了有价值的参考。


文章转载自:

http://SPQ51jBO.bcngs.cn
http://yA297MIr.bcngs.cn
http://G6JveTzW.bcngs.cn
http://H1UlLr1F.bcngs.cn
http://qykEbeYf.bcngs.cn
http://QMA2huMZ.bcngs.cn
http://voaemmvm.bcngs.cn
http://K7o82n76.bcngs.cn
http://UO4Yk4un.bcngs.cn
http://BiuAROiI.bcngs.cn
http://RLVxPneQ.bcngs.cn
http://xEWRtg8F.bcngs.cn
http://lZaIMjoX.bcngs.cn
http://0ynkBfQu.bcngs.cn
http://Bf3yze2O.bcngs.cn
http://2OPNpYBG.bcngs.cn
http://O4OLJFnW.bcngs.cn
http://zelsIBOm.bcngs.cn
http://hhAydNdw.bcngs.cn
http://naH7jsgM.bcngs.cn
http://m6etANBl.bcngs.cn
http://8igJxzpz.bcngs.cn
http://HPnSdFGa.bcngs.cn
http://MLY06mNx.bcngs.cn
http://c8HfUGC3.bcngs.cn
http://VapUrgMf.bcngs.cn
http://ZBSnJ6XG.bcngs.cn
http://c80ndvM5.bcngs.cn
http://ve31mjkY.bcngs.cn
http://5oVYDrxo.bcngs.cn
http://www.dtcms.com/a/381022.html

相关文章:

  • 解读HRV与认知负荷
  • 打工人日报#20250912
  • 有度新版本:待办全新升级、企业互联、自带数据库...协作体验更佳!
  • 日语学习-日语知识点小记-构建基础-JLPT-N3阶段(29):文法運用第9回3+(考え方11)
  • 【Vue2 ✨】Vue2 入门之旅 · 进阶篇(八):Vuex 内部机制
  • 【LeetCode】33. 搜索旋转排序数组
  • 【代码随想录day 25】 力扣 46. 全排列
  • Java JUC并发集合详解:线程安全容器完全指南
  • 流畅的Python(二) 丰富的序列
  • DPO vs PPO,偏好优化的两条技术路径
  • clickhouse的UInt64类型(countIf() 函数返回)
  • 算法之线性基
  • GlobalBuildingAtlas 建筑物白模数据下载
  • 用pywin32连接autocad 写一个利用遗传算法从选择的闭合图形内进行最优利用率的排版 ai草稿
  • 性能测试工具JvisualVM/jconsole使用
  • 面试题:Redis要点总结(性能和使用)
  • 无卡发薪系统:灵活用工全链条协同的核心枢纽( “数据互通、流程联动” 为核心,将人力招聘、劳务结算、电子合同签约、保险投保深度整合,构建灵活用工管理闭环。)
  • 万物皆可PID:深入理解控制算法在OpenBMC风扇调速中的应用
  • Centos修改主机明后oracle的修改
  • 使用 nanoVLM 训练一个 VLM
  • 2025年- H135-Lc209. 长度最小的子数组(字符串)--Java版
  • 数据库建表练习
  • 使用tree命令导出文件夹/文件的目录树(linux)
  • 【SQL】指定日期的产品价格
  • 在WPF项目中使用阿里图标库iconfont
  • 新能源知识库(91)《新型储能规模化行动方案》精华摘引
  • 51c自动驾驶~合集29
  • Arbess V2.0.7版本发布,支持Docker/主机蓝绿部署任务,支持Gradle构建、Agent运行策略
  • 中科米堆CASAIM自动化三维检测系统-支持批量测量工件三维尺寸
  • 【学习K230-例程19】GT6700-TCP-Client