跳转到主要内容

读写 .mrc 和 .dv (deltavision) 图像文件格式

项目描述

mrc

License PyPI Python Version CI codecov

读写 .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 (649.7 KB 查看散列值)

上传时间 源代码

构建分发

mrc-0.3.1-py3-none-any.whl (27.5 KB 查看散列值)

上传时间 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面