我目前正在寻找一种方法,从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')
DM4 文件中的实际数据似乎未正确转换为 HDF5。虽然 DM4 文件包含带有组和文件的分层结构,但生成的 HDF5 文件并不反映此结构。
原始数据转换为
hdf5
文件。上面的代码执行以下操作:
dm4
文件中有四个数据集,因此 hs.load
返回 4 个不同的超级间谍信号。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")
然后你可以使用任何可以读取图像的软件来打开数据。