2D人体姿态识别-对Human3.6M数据集预处理(1):用python读取并处理cdf文件,cdflib包中各函数介绍,Human3.6M数据集2d关节点格式解读

本文介绍了Human3.6M数据集,包括其结构、预处理方法,特别是通过Python的cdflib库读取和处理cdf文件,提取2D关键点。详细讲解了cdflib的安装、使用及函数,如cdf_info()和varget(),并展示了如何处理存储2D关键点的cdf文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

一、Human3.6M数据集结构介绍

Human3.6M数据集有360万个3D人体姿势和相应的图像,共有11个实验者(Subject)(6男5女,论文一般选取1,5,6,7,8作为train,9,11作为test),和17个动作场景(Scenario),诸如讨论、吃饭、运动、问候等动作。该数据由4个数字摄像机,1个时间传感器,10个运动摄像机捕获。

我需要训练的网络输入应该为两个角度的人物照片(从视频中提取关键帧),2d关节的关键点作为监督(从cdf文件中提取)。从官网的以下分类中下载:
官方分类以及该下载的数据
大批量预处理Human3.6M数据集的方法可以参考:github: h36m-fetch
这次的小批量预处理先以S1(人物)的sitting1.55011271(人物右前方,观察者的左侧,下面用左来命名)和sitting.60457274(人物左前方,观察者的右侧,下面用右来命名)为例。
项目文件夹:所需用到的数据

二、处理cdf.文件

1.法一:使用nasa官方提供的CDF library

参考:使用python读取cdf数据

  • 第一步:下载CDF Library:nasa cdf 官网
  • 第二步:编译make OS=linux ENV=gnu CURSES=yes FORTRAN=no UCOPTIONS=-O2 SHARED=yes all
  • 第三步:安装sudo make INSTALLDIR=/usr/local/cdf install
  • 第四步:安装spacepy pip install spacepy
  • 第五步:使用代码如下实例
import os
from spacepy import pycdf
os.environ["CDF_LIB"] = "/usr/local/cdf/lib"
anno_Greeting=pycdf.CDF('/home/madd
<think>嗯,用户想了解如何用MATLAB读取处理CDF文件,特别是需要示例。我需要结合之前提供的引用内容来回答。首先,我得确认CDF文件是什么。根据引用[1],气象数据常存在NetCDF文件中,后缀是.nc。引用[2]提到CDF历元数据类型的处理,引用[3]详细说明了Matlab中的ncread函数用法。引用[4]虽然关于Excel,但可能无关。 用户的问题可能涉及两种CDF:NetCDF和通用数据格式?不过根据引用[1][3],NetCDF更常见。需要区分用户指的是哪种。引用[2]提到cdfread函数,可能对应通用CDF,而ncread用于NetCDF。所以可能需要分别给出两种情况的示例。 首先,处理NetCDF文件,使用ncread,如引用[3]中的vardata = ncread(source, varname)。例如读取温度变量。然后处理数据,比如计算平均值或者可视化。另外,引用[1]提到MATLAB读取NetCDF的方法,可能需要用ncdisp查看结构。 其次,如果是普通CDF,可能用cdfread函数,引用[2]中的内容,注意ConvertEpochToDatenum参数,用来转换时间数据。比如读取数据时处理时间戳,转换为MATLAB的日期格式。 用户可能需要具体的代码示例,所以分两部分:NetCDFCDF(如果适用)。同时注意代码的正确性,比如变量名需与实际文件中的一致。此外,要提醒用户检查文件路径,变量是否存在,以及数据类型转换的问题。 可能的问题:用户可能混淆两种CDF格式,需要明确说明。示例需要展示读取步骤,数据处理如计算统计量或绘图,处理时间变量(如引用[2]的epoch转换)。 最后,生成相关问题,比如如何选择函数处理时间数据,或常见错误处理,如文件无法读取时的解决方法。</think>### MATLAB读取处理CDF文件的步骤及示例 #### 一、读取NetCDF文件(后缀为.nc) NetCDF(Network Common Data Form)是气象、海洋等领域常用的数据格式。MATLAB提供了专门的函数进行读取处理[^1][^3]。 1. **查看文件结构** 使用`ncdisp`查看文件变量和元数据: ```matlab ncdisp(&#39;example.nc&#39;); ``` 2. **读取变量数据** 假设文件含变量`temperature`和`time`: ```matlab % 读取变量 temp = ncread(&#39;example.nc&#39;, &#39;temperature&#39;); time = ncread(&#39;example.nc&#39;, &#39;time&#39;); % 若需要指定读取范围(start起始索引,count读取数量,stride步长) temp_subset = ncread(&#39;example.nc&#39;, &#39;temperature&#39;, [1 1 1], [100 50 Inf], [2 2 1]); ``` 3. **处理时间变量** 若时间变量为CDF历元类型,需转换为MATLAB日期序列: ```matlab time_datenum = cdfepoch2datenum(time); % 自定义转换函数或使用内置工具 ``` 4. **数据可视化示例** ```matlab figure; contourf(temp(:,:,1)); % 绘制第一层温度等高线图 colorbar; title(&#39;温度分布&#39;); ``` --- #### 二、读取通用CDF文件(非NetCDF) 对于其他CDF格式文件(如空间物理数据),可使用`cdfread`函数[^2]: ```matlab % 读取文件转换时间戳 data = cdfread(&#39;data.cdf&#39;, &#39;ConvertEpochToDatenum&#39;, true); % 提取特定变量(假设变量名为&#39;Velocity&#39;) velocity = data{:, &#39;Velocity&#39;}; % 计算统计量 mean_vel = mean(velocity, &#39;omitnan&#39;); std_vel = std(velocity, &#39;omitnan&#39;); ``` --- #### 三、注意事项 1. **路径问题**:确保文件路径正确,必要时使用绝对路径(如`&#39;C:\data\example.nc&#39;`)。 2. **变量名匹配**:变量名需与文件中定义的一致,区分大小写。 3. **内存管理**:大型文件建议分块读取(通过`start`, `count`参数控制)。 ---
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值