是否可以使用Python将DM4文件转换为HDF5文件?

问题描述 投票:0回答:1

我目前正在寻找一种方法,从DM4文件中提取图形和图像等数据,并将它们保存在具有分层结构的HDF5文件中。在我的搜索中,我尝试使用 Hyperspy,但效果并不顺利。数据没有以分层结构保存,并且存储了未知值。仅创建了一两个数据集。我希望能够直接在HDF5文件中查看DM4文件中的数据。简单来说,我想将现有的DM4文件转换为用户可以查看的HDF5文件。这可能吗?

这是通过Chargpt4获得的结果

import hyperspy.api as hs
import h5py

def convert_dm4_to_hdf5(dm4_file, hdf5_file):
    signals = hs.load(dm4_file)
    

    with h5py.File(hdf5_file, 'w') as hfile:

        for i, signal in enumerate(signals):

            data_array = signal.data
            hfile.create_dataset(f'data_{i}', data=data_array)

    print("complete")


convert_dm4_to_hdf5('STEM SI.dm4', 'output.h5')

enter image description here

DM4 文件中的实际数据似乎未正确转换为 HDF5。虽然 DM4 文件包含带有组和文件的分层结构,但生成的 HDF5 文件并不反映此结构。

python hdf5 h5py
1个回答
0
投票

原始数据转换为

hdf5
文件。上面的代码执行以下操作:

  1. 将 dm4 文件打开为hyperspy 信号结构。由于此
    dm4
    文件中有四个数据集,因此
    hs.load
    返回 4 个不同的超级间谍信号。
  2. 对于每个超级间谍信号,原始数据(此处为超级间谍信号的属性
    data
    )作为
    h5py 数据集
    保存到 h5py 文件中。

要查看 hdf5 文件,您将需要能够读取 hdf5 数据集的不同软件。

dm4
文件可以包含多维数据集,可以是光谱、图像、光谱图像等。如果
dm4
仅包含图像,您可以将其转换为
tif
图像的
jpg

import hyperspy.api as hs

signals = hs.load("dm4_file.dm4")

if not isinstance(signals, list):
   # when there is only dataset in the file, `hs.load` returns a signal
   # and not a list of signals
   signals = [signals]

for i, s in enumerate(signals):
   s.save(f"data{i}.jpg")

然后你可以使用任何可以读取图像的软件来打开数据。

© www.soinside.com 2019 - 2024. All rights reserved.