读写 .mrc 和 .dv (deltavision) 图像文件格式
项目描述
mrc
读写 .dv (deltavision) 和一些 mrc 图像文件格式。
注意,此模块旨在读取由 deltavision 显微镜使用的 MRC 变体 (.dv) 和 UCSF 的 IVE 库。有关常用于结构生物学的 MRC2014 文件格式,请参阅 mrcfile
(尽管 dv 和 mrc 格式非常相似,但从 UCSF 的 IVE 库演变而来的 priism/dv 文件具有略微不同的头格式,这阻止了 mrcfile 的工作)。
安装
pip install mrc
用法和API
新API:2021年10月
DVFile
是读者的重写,并将是未来唯一维护的读者。它不写入文件(有关旧API,请参阅)。
from mrc import DVFile, imread
import numpy as np
my_array = imread('some_file.dv') # read to numpy array
my_array = imread('some_file.dv', dask=True) # read to dask array
my_array = imread('some_file.dv', xarray=True) # read to xarray
my_array = imread('some_file.dv', xarray=True, dask=True) # read to dask-xarray
# or open a file with DVFile
f = DVFile('some_file.dv')
# attributes: # example output
f.path # 'some_file.dv'
f.shape # (10, 2, 256, 256)
f.ndim # 4
f.dtype # np.dtype('uint16')
f.sizes # {'T': 10, 'C': 2, 'Y': 256, 'X': 256}
# array output
f.asarray() # in-memory np.ndarray
np.asarray(f) # alternative to f.asarray()
f.to_dask() # delayed dask.array.Array
f.to_xarray() # in-memory xarray.DataArray, with labeled axes/coords
f.to_xarray(delayed=True) # delayed xarray.DataArray
# metadata
f.hdr # Header as a named tuple
f.ext_hdr # (optional) extended header info
f.voxel_size # VoxelSize(x=0.65, y=0.65, z=1.0)
f.close() # don't forget to close when done!
f.closed # boolean, whether the file is closed
# ... or you can use it as a context manager
with DVFile('some_file.dv') as dvf:
xarr = dvf.to_xarray()
旧API
以下较旧的API仍然存在于本包的 mrc 命名空间下。
此模块是从由 Sebastian Haase 编写的 priithon 包中提取的。
import mrc
import numpy as np
# Read a dv file
arr = mrc.imread('/path/to/file.dv')
# just a numpy array with the data...
isinstance(arr, np.ndarray) # True
# additional info in stored in the arr.Mrc object.
# print it
arr.Mrc.info()
# or access particular fields:
print(arr.Mrc.header)
# dv files may have additional info in the extended header:
arr.Mrc.extended_header
# for instsance, timestamps for each channel at each timepoint:
arr.Mrc.extended_header['timeStampSeconds']
# or you can write a numpy array to DV format
arr = np.random.rand(23,3,256,256).astype('single')
mrc.imsave("/path/to/output.dv", arr,
metadata={
'dx': 0.08,
'dy': 0.08,
'dz': 0.125,
'wave': [445, 528, 615, 0, 0]
}
)
Priism (DV) MRC 头格式
此信息是从不再存在的页面 http://www.msg.ucsf.edu/IVE/IVE4_HTML/priism_mrc_header.html 存档的
MRC 头为 1024 字节,布局如下。每个字段都是以下格式之一
n
是一个 2 字节有符号整数 (NPY_INT16)
i
是一个 4 字节有符号整数 (NPY_INT32)
f
是一个 4 字节 IEEE 格式的浮点值 (NPY_FLOAT32)
cn
是一个长度为 n 个字符的字符串。
字节数 | 变量类型 | 变量名 | 内容 |
---|---|---|---|
1 - 4 | i | NumCol | 列数(最快变化的维度;通常映射到x轴) |
5 - 8 | i | NumRow | 行数(第二快变化的维度;通常映射到y轴) |
9 - 12 | i | 段数(最慢变化的维度;通常映射到剩余的维度,如z轴、波长和时间) | |
13 - 16 | i | PixelType | 数据类型(见像素数据类型) |
17 - 20 | i | mxst | 数据中第一列(通常映射到x轴)的索引;默认为零 |
21 - 24 | i | myst | 数据中第一行(通常映射到y轴)的索引;默认为零 |
25 - 28 | i | mzst | 数据中第一段(通常视为第一z轴)的索引;默认为零 |
29 - 32 | i | mx | 最快变化方向上的间隔数(通常为x轴) |
33 - 36 | i | my | 第二快变化方向上的间隔数(通常为y轴) |
37 - 40 | i | mz | 最慢变化方向上的间隔数(通常视为z轴) |
41 - 44 | f | dx | 最快变化方向上的像素间距乘以采样间隔(晶格数据中第一细胞维度以埃为单位) |
45 - 48 | f | dy | 第二快变化方向上的像素间距乘以采样间隔(晶格数据中第二细胞维度以埃为单位) |
49 - 52 | f | dz | 最慢变化方向上的像素间距乘以采样间隔(晶格数据中第三细胞维度以埃为单位) |
53 - 56 | f | alpha | 晶胞角度(alpha)以度为单位;默认为90 |
57 - 60 | f | beta | 晶胞角度(beta)以度为单位;默认为90 |
61 - 64 | f | gamma | 晶胞角度(gamma)以度为单位;默认为90 |
65 - 68 | i | 列轴(1 = x,2 = y,3 = z;默认为1) | |
69 - 72 | i | 行轴(1 = x,2 = y,3 = z;默认为2) | |
73 - 76 | i | 段轴(1 = x,2 = y,3 = z;默认为3) | |
77 - 80 | f | min | 第一波长图像的最小强度 |
81 - 84 | f | max | 第一波长图像的最大强度 |
85 - 88 | f | mean | 第一波长图像的平均强度 |
89 - 92 | i | nspg | 空间群编号(用于晶体学) |
93 - 96 | i | next | 扩展头大小(字节)。 |
97 - 98 | n | dvid | ID值(-16224) |
99 - 100 | n | nblank | 未使用 |
101 - 104 | i | ntst | 起始时间索引 |
105 - 128 | c24 | 空白 | 24字节长的空白部分 |
129 - 130 | n | NumIntegers | 每个部分在扩展头中存储的4字节整数的数量。 |
131 - 132 | n | NumFloats | 每个部分在扩展头中存储的4字节浮点数的数量。 |
133 - 134 | n | sub | 图像中存储的子分辨率数据集的数量,通常为1 |
135 - 136 | n | zfac | 子分辨率图像z轴的缩减商 |
137 - 140 | f | min2 | 第二波长图像的最小强度 |
141 - 144 | f | max2 | 第二波长图像的最大强度 |
145 - 148 | f | min3 | 第三波长图像的最小强度 |
149 - 152 | f | max3 | 第三波长图像的最大强度 |
153 - 156 | f | min4 | 第四波长图像的最小强度 |
157 - 160 | f | max4 | 第四波长图像的最大强度 |
161 - 162 | n | image type | 见图像类型 |
163 - 164 | n | LensNum | 镜头识别号 |
165 - 166 | n | n1 | 取决于图像类型 |
167 - 168 | n | n2 | 取决于图像类型 |
169 - 170 | n | v1 | 取决于图像类型 |
171 - 172 | n | v2 | 取决于图像类型 |
173 - 176 | f | min5 | 第五波长图像的最小强度 |
177 - 180 | f | max5 | 第五波长图像的最大强度 |
181 - 182 | n | NumTimes | 时间点的数量 |
183 - 184 | n | ImgSequence | 图像序列(0 = ZTW,1 = WZT,2 = ZWT) |
185 - 188 | f | x轴倾斜角度(度) | |
189 - 192 | f | y轴倾斜角度(度) | |
193 - 196 | f | z轴倾斜角度(度) | |
197 - 198 | n | NumWaves | 波长的数量 |
199 - 200 | n | wave1 | 波长1以nm为单位 |
201 - 202 | n | wave2 | 波长2以nm为单位 |
203 - 204 | n | wave3 | 波长3以nm为单位 |
205 - 206 | n | wave4 | 波长 4(单位:纳米) |
207 - 208 | n | wave5 | 波长 5(单位:纳米) |
209 - 212 | f | z0 | z 起始点(光学为微米,电磁为埃) |
213 - 216 | f | x0 | x 起始点(光学为微米,电磁为埃) |
217 - 220 | f | y0 | y 起始点(光学为微米,电磁为埃) |
221 - 224 | i | NumTitles | 标题数量(有效数字介于 0 和 10 之间) |
225 - 304 | c80 | 标题 1 | |
305 - 384 | c80 | 标题 2 | |
385 - 464 | c80 | 标题 3 | |
465 - 544 | c80 | 标题 4 | |
545 - 624 | c80 | 标题 5 | |
625 - 704 | c80 | 标题 6 | |
705 - 784 | c80 | 标题 7 | |
785 - 864 | c80 | 标题 8 | |
865 - 944 | c80 | 标题 9 | |
945 - 1024 | c80 | 标题 10 |
像素数据类型
用于图像像素值的数据类型,存储为 13 至 16 字节的带符号 32 位整数,由以下表格中的代码编号指定。
数据类型 | Numpy 类型 | 描述 |
---|---|---|
0 | NPY_UINT8 | 1 字节无符号整数 |
1 | NPY_INT16 | 2 字节有符号整数 |
2 | NPY_FLOAT32 | 4 字节浮点数(IEEE) |
3 | 4 字节复数值,作为 2 个 2 字节有符号整数 | |
4 | NPY_COMPLEX64 | 8 字节复数值,作为 2 个 4 字节浮点数(IEEE)值 |
5 | 2 字节有符号整数(不清楚) | |
6 | NPY_UINT16 | 2 字节无符号整数 |
7 | NPY_INT32 | 4 字节有符号整数 |
类型代码 5、6 和 7 不是标准的 MRC 类型,其他使用 MRC 文件的软件可能无法正确解释。
图像类型
Priism 图像的类型由标题字节 161 和 162 中的有符号 16 位整数给出。以下表格给出了这些类型的意义。一些图像类型使用的浮点属性 v1 和 v2 存储为标题中的 16 位有符号整数;存储时将值乘以 100 并四舍五入到最接近的整数,检索时除以 100。
0(IM_NORMAL_IMAGES)
用于正常图像数据。
1(IM_TILT_SERIES)
用于单轴倾斜系列,角度增量均匀。n1 指定倾斜轴(1 为 x,2 为 y,3 为 z),v1 为角度增量(度)。n2 将倾斜系列中的坐标与 3D 体积中的坐标相关联:假设的旋转中心是从标题中的 z 起始点加上 n2 乘以从标题中 z 像素间隔的一半。v2 总是零。
2(IM_STEREO_TILT_SERIES)
用于立体倾斜系列。n1 指定倾斜轴(1 为 x,2 为 y,3 为 z),v1 为角度增量(度),v2 为立体对之间的角度分离(度)。n2 总是零。
3(IM_AVERAGED_IMAGES)
用于平均图像。n1 是平均的节段数,n2 是平均节段之间的节段数。v1 和 v2 总是零。
4(IM_AVERAGED_STEREO_PAIRS)
用于平均立体对。n1 是平均的节段数,n2 是平均节段之间的节段数,v2 为立体对之间的角度分离(度)。v2 总是零。
5(IM_EM_TILT_SERIES)
用于电子断层扫描数据。倾斜角度存储在扩展标题中。
20(IM_MULTIPOSITION)
用于培养皿图像。以下数量在 n1 中进行位编码(每个的有效范围如下所示):iwell(0-3)、ishape(0-1)、ibin(0-15)、ispeed(0-2)、igain(0-3)和 mag(0-1)。n2 是每个培养皿的场数。v1 是填充因子(.01 到 1.5,以 .01 为步长)。v2 未使用。
8000(IM_PUPIL_FUNCTION)
用于瞳孔函数图像。n1 和 n2 未使用。v1 是数值孔径乘以十。v2 是浸没介质折射率乘以一百。像素间隔和起始点的单位为每微米周期,而不是微米。
致谢
此软件包由Sebastian Haase创建,作为priithon软件包的一部分。它由Talley Lambert更新和维护。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装软件包的信息。
源分发
构建分发
mrc-0.3.1.tar.gz的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | 8ebe3ebee2739ad285e8199e86ab5b987e78a8d1e5a899afdd664d309bc42e97 |
|
MD5 | 52be1bf76514f0e195c9bc29720ca749 |
|
BLAKE2b-256 | 4c66a620f6d24cb82316b56436afc00c9ee5e3dcc53be9af6ca9eb19b310ab37 |
mrc-0.3.1-py3-none-any.whl的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | ce8e1d099479ce705489e4c62bc9002eca8e8a00278bdb27b416498635fe9270 |
|
MD5 | cbb6eed78c72356df19cd4fd725ed211 |
|
BLAKE2b-256 | 868d64decec49ec102d06917ca3cff0fa276af1dd872bf2cfb2d04ac07013034 |