可视化swc文件

https://blog.csdn.net/bigdudu/article/details/143231801

这个文章很好,说下补充.

什么是 Soma

在神经科学和 SWC 格式中,Soma(胞体 / 细胞体) 是神经元的核心部分,也是整个神经元结构的 “根节点”—— 它是神经元的代谢和信号整合中心,包含细胞核和大部分细胞器,所有轴突、树突都从胞体延伸而出。

Soma 在 SWC 文件中的具体体现

SWC 文件通过节点类型(Type)字段 明确标识 Soma,同时有固定的格式规则:

  1. 类型编码
    SWC 标准中,Type 字段的数值 1 专门代表 Soma(胞体),其他类型对应神经元的不同分支:
    Type 值 含义
    1 Soma(胞体)
    2 Axon(轴突)
    3 Dendrite(主树突)
    4 Apical dendrite(顶树突)
    5+ 自定义 / 未知类型
  2. 结构规则
    Soma 是神经元的根节点,其 父节点ID(Parent ID) 固定为 -1(表示无父节点);
    一个完整的神经元 SWC 文件中,有且仅有一个 Soma 根节点(ID 通常为 1),所有其他节点(轴突、树突)的父节点最终都会追溯到这个 Soma 节点;
    Soma 节点的 x/y/z 坐标是神经元的空间中心位置,radius(半径)通常大于其他节点(代表胞体的物理尺寸)。

特殊情况:多节点描述的 Soma

部分 SWC 文件会用多个 Type=1 的节点 拟合 Soma 的球形 / 椭球形轮廓(而非单个点):
plaintext
1 1 10.0 15.0 8.0 5.0 -1 # 核心Soma节点
2 1 10.5 15.0 8.0 5.0 1 # Soma轮廓节点1
3 1 9.5 15.0 8.0 5.0 1 # Soma轮廓节点2
4 1 10.0 15.5 8.0 5.0 1 # Soma轮廓节点3
这类文件中,所有 Type=1 的节点都属于 Soma 结构,且第一个 Type=1 节点仍是根节点(Parent=-1)。

要注意这个特殊情况. 有的情况下会认为多个soma是非法的导致报错.

More than one node found that is tagged “soma” in skeleton xxxx
导出时出现了这个问题,所以选择了mark root nodes as soma

可视化的代码, 用的plotly, 但效率并不高.5000个连线的情况下转动视角都费劲,很奇怪它的散点图大数据量效率很高. 结论不如用游戏引擎

importpandasaspdimportnumpyasnpimportplotly.graph_objectsasgodefread_swc_file(file_path):""" 读取并解析 SWC 文件 :param file_path: SWC 文件路径 :return: 包含节点数据的 DataFrame,节点连接列表 """# 定义 SWC 文件列名columns=['id','type','x','y','z','radius','parent_id']# 读取文件(跳过注释行,注释行以#开头)swc_data=[]withopen(file_path,'r',encoding='utf-8')asf:forlineinf:line=line.strip()ifnotlineorline.startswith('#'):continue# 分割每行数据并转换为数值类型parts=line.split()parts=[float(p)ifinotin[1,6]elseint(p)fori,pinenumerate(parts)]swc_data.append(parts)# 转为 DataFramedf=pd.DataFrame(swc_data,columns=columns)# 修正父节点ID(SWC中父节点ID为-1表示根节点)df['parent_id']=df['parent_id'].replace(-1,0)# 构建节点连接关系(子节点ID -> 父节点坐标)connections=[]id_to_coords=df.set_index('id')[['x','y','z']].to_dict('index')for_,rowindf.iterrows():node_id=row['id']parent_id=row['parent_id']ifparent_id==0orparent_idnotinid_to_coords:continue# 根节点无父节点,跳过# 获取子节点和父节点的坐标child_coords=(row['x'],row['y'],row['z'])parent_coords=id_to_coords[parent_id]parent_coords=(parent_coords['x'],parent_coords['y'],parent_coords['z'])connections.append((child_coords,parent_coords))returndf,connectionsdefplot_neuron_3d(df,connections,title="神经元3D结构可视化"):""" 使用 Plotly 绘制神经元的3D结构 :param df: 节点数据 DataFrame :param connections: 节点连接列表 :param title: 图表标题 """# 创建绘图对象fig=go.Figure()# 1. 添加神经元节点(散点)fig.add_trace(go.Scatter3d(x=df['x'],y=df['y'],z=df['z'],mode='markers',marker=dict(size=df['radius']*0.05,# 按半径缩放节点大小color=df['type'],# 按神经元类型着色colorscale='Viridis',opacity=0.8),name='神经元节点',hovertext=df.apply(lambdarow:f"ID:{row['id']}<br>类型:{row['type']}<br>坐标: ({row['x']:.2f},{row['y']:.2f},{row['z']:.2f})",axis=1)))# 2. 添加神经元连接线条forchild,parentinconnections:# 每条连线需要两个点(父节点 -> 子节点)x_line=[parent[0],child[0]]y_line=[parent[1],child[1]]z_line=[parent[2],child[2]]fig.add_trace(go.Scatter3d(x=x_line,y=y_line,z=z_line,mode='lines',line=dict(color='#666666',width=1),name='连接线条',showlegend=False# 线条不显示在图例中))# 设置图表布局fig.update_layout(title=title,scene=dict(xaxis_title='X 坐标 (μm)',yaxis_title='Y 坐标 (μm)',zaxis_title='Z 坐标 (μm)',aspectmode='data'# 按数据比例显示坐标轴),legend=dict(title='神经元类型',orientation='h',yanchor='bottom',y=1.02,xanchor='right',x=1))# 显示图表(也可保存为html文件:fig.write_html("neuron_3d.html"))fig.show()# 主函数:调用示例if__name__=="__main__":swc_file_path="neuron_data.swc"try:# 读取SWC文件neuron_df,neuron_connections=read_swc_file(swc_file_path)print(f"成功解析SWC文件:共{len(neuron_df)}个节点,{len(neuron_connections)}条连接")# 绘制3D可视化图plot_neuron_3d(neuron_df,neuron_connections)exceptFileNotFoundError:print(f"错误:未找到文件{swc_file_path},请检查文件路径是否正确")exceptExceptionase:print(f"解析/绘图出错:{str(e)}")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1159229.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

‌别再逼测试学Python了!2026年,低代码才是主流

低代码不是Python的替代品&#xff0c;而是测试角色的重构者‌2026年&#xff0c;软件测试行业已进入“‌无代码主导自动化‌”的新纪元。 你不再需要写 driver.find_element(By.ID, "login-btn").click()&#xff0c; 也不必调试 pytest 的并发冲突或处理 Selenium …

Matlab 基于迁移学习的滚动轴承故障诊断 1.运行环境Matlab2021b及以上

Matlab 基于迁移学习的滚动轴承故障诊断 1.运行环境Matlab2021b及以上&#xff0c;该程序将一维轴承振动信号转换为二维尺度图图像并使用预训练网络应用迁移学习对轴承故障进行分类&#xff0c;平均准确率在98%左右。 2.使用MATLAB自带的Squeezenet模型进行迁移学习&#xff0c…

基于单片机汽车尾灯控制系统设计

**单片机设计介绍&#xff0c;基于单片机汽车尾灯控制系统设计 文章目录一 概要二、功能设计设计思路三、 软件设计原理图五、 程序一 概要 基于单片机汽车尾灯控制系统设计概要如下&#xff1a; 一、设计目标 本设计旨在通过单片机技术实现对汽车尾灯的智能控制&#xff0c;…

全网最全8个一键生成论文工具,本科生搞定毕业论文!

全网最全8个一键生成论文工具&#xff0c;本科生搞定毕业论文&#xff01; AI 工具助力论文写作&#xff0c;告别手忙脚乱 在当今这个信息爆炸的时代&#xff0c;本科生的毕业论文写作早已不再是单纯的“写文章”那么简单。从选题、查资料、列大纲到撰写初稿、反复修改&#xf…

Python和Java哪个更好就业?

Python和Java作为编程领域的两大主流语言&#xff0c;就业前景一直是求职者关注的核心。Java深耕企业级开发、后端架构&#xff0c;Python则在数据分析、AI等新兴领域快速崛起&#xff0c;那么Python和Java哪个好就业?一起来探讨一下。小编认为&#xff0c;学习Python比学习Ja…

基于单片机汽车倒车防撞报警电路设计

**单片机设计介绍&#xff0c;基于单片机汽车倒车防撞报警电路设计 文章目录一 概要二、功能设计设计思路三、 软件设计原理图五、 程序一 概要 基于单片机汽车倒车防撞报警电路设计概要如下&#xff1a; 一、设计目标 本设计旨在通过单片机技术实现汽车倒车时的防撞报警功能…

中国邮政Java面试被问:Kafka的Log Compaction实现和删除策略

一、Log Compaction核心概念 1. 什么是Log Compaction&#xff1f; 图表 代码 复制 下载 全屏 graph TBA[原始Log] --> B[Key-Value消息流]B --> C{Log Compaction}C --> D[保留每个Key的最新值]C --> E[删除过期旧值]D --> F[压缩后的Log]subgraph "消…

基于单片机热敏PT100温度采集系统设计

**单片机设计介绍&#xff0c;基于单片机热敏PT100温度采集系统设计 文章目录一 概要二、功能设计设计思路三、 软件设计原理图五、 程序一 概要 基于单片机热敏PT100温度采集系统设计概要如下&#xff1a; 一、设计目标 该系统旨在通过单片机技术实现对温度的实时监测和精确控…

四大GIS框架坐标系详解

四大GIS框架坐标系详解 一、一句话总结 Leaflet/Mapbox/OpenLayers默认用Web墨卡托&#xff08;EPSG:3857&#xff09;&#xff0c;Cesium默认用WGS-84&#xff08;EPSG:4326&#xff09;&#xff0c;但都支持坐标系扩展。二、详细对比表框架默认坐标系显示方式内部计算坐标单位…

2026 年最值得普通人死磕的3个AI赛道

2026年最值得普通人死磕的3个AI赛道 文章目录 2026年最值得普通人死磕的3个AI赛道 目录 第1章 为什么99%的普通人在AI赛道注定失败? 认知误区:将AI视为风口而非生产工具 反直觉洞见:风口思维的数学本质 案例:盲目跟风的AI绘画创业者 代码模拟:风口思维的失败概率 能力错配…

深入理解 C++ 的 lvalue / xvalue / prvalue 及 decltype 推导规则

深入理解 C 的 lvalue / xvalue / prvalue 及 decltype 推导规则本文系统梳理 C11 之后的三大表达式值类别&#xff08;lvalue / xvalue / prvalue&#xff09;&#xff0c;并重点结合 decltype 与 decltype(auto) 说明其在真实工程代码中的行为差异与常见陷阱。一、为什么要理…

滚球老鼠标编码器识别上下左右移动方向的原理

滚球老鼠标编码器识别上下左右移动方向的原理 滚球老鼠标&#xff08;又称机械/光机鼠标&#xff09;的编码器通过“机械传动光学编码相位差解码”的组合逻辑&#xff0c;实现对上下、左右四个移动方向的识别。核心原理是将滚球的平面滚动分解为两个垂直轴的旋转运动&#xff0…

安防设备的网络安全实战指南:常见网络攻击手法剖析与防范技术演进

伴随着互联网的发展&#xff0c;它已经成为我们生活中不可或缺的存在&#xff0c;无论是个人还是企业&#xff0c;都离不开互联网。正因为互联网得到了重视&#xff0c;网络安全问题也随之加剧&#xff0c;给我们的信息安全造成严重威胁&#xff0c;而想要有效规避这些风险&…

滚球老鼠标编码器识别上下左右移动方向的原理2

滚球老鼠标编码器识别上下左右移动方向的原理 滚球老鼠标&#xff08;又称机械/光机鼠标&#xff09;的编码器通过“机械传动光学编码相位差解码”的组合逻辑&#xff0c;实现对上下、左右四个移动方向的识别。核心原理是将滚球的平面滚动分解为两个垂直轴的旋转运动&#xff0…

构建企业级安全防御架构:网络安全防范核心技术盘点与实施要点解析

伴随着互联网的发展&#xff0c;它已经成为我们生活中不可或缺的存在&#xff0c;无论是个人还是企业&#xff0c;都离不开互联网。正因为互联网得到了重视&#xff0c;网络安全问题也随之加剧&#xff0c;给我们的信息安全造成严重威胁&#xff0c;而想要有效规避这些风险&…

基于单片机无线公交车人数统计装置系统设计

**单片机设计介绍&#xff0c;基于单片机无线公交车人数统计装置系统设计 文章目录一 概要二、功能设计设计思路三、 软件设计原理图五、 程序一 概要 基于单片机无线公交车人数统计装置系统设计概要如下&#xff1a; 一、系统概述 本系统采用单片机作为核心控制器&#xff0…

网络安全从入门到精通:核心领域深度剖析与实战技术指南

网络安全技术虽然非常复杂&#xff0c;但是归纳起来&#xff0c;主要就是为了解决以下三方面问题&#xff1a; 1.数据的机密性&#xff1a;即如何令人们发送数据&#xff0c;即使被其他无关人员截取&#xff0c;他们也无法获知数据的含义。 2.数据的有效性&#xff1a;指数据不…

滚球老鼠标DIY改造成游戏光枪完整方案

滚球老鼠标DIY改造成游戏光枪完整方案 核心改造逻辑&#xff1a;复用滚球老鼠标的「X/Y轴编码器」&#xff08;负责瞄准方向识别&#xff09;和「信号传输模块」&#xff0c;新增「光定位模块」&#xff08;捕捉屏幕定位点&#xff09;、「射击按键」&#xff08;触发射击信号&…

基于单片机智能自动加料机控制系统设计

**单片机设计介绍&#xff0c;基于单片机智能自动加料机控制系统设计 文章目录一 概要二、功能设计设计思路三、 软件设计原理图五、 程序一 概要 基于单片机智能自动加料机控制系统设计概要如下&#xff1a; 一、系统概述 本设计旨在通过单片机技术实现一种智能自动加料机控…

基于单片机智能红外遥控密码锁系统设计

**单片机设计介绍&#xff0c;基于单片机智能红外遥控密码锁系统设计 文章目录一 概要二、功能设计设计思路三、 软件设计原理图五、 程序一 概要 基于单片机智能红外遥控密码锁系统设计概要如下&#xff1a; 一、系统概述 本系统采用单片机技术结合无线红外遥控技术&#xf…