cytomapper
软件包中,图像可以存储在磁盘上。为此,映像以hdf5格式的数组形式写入磁盘。控件可以方便地写入和访问这些数组HDF5Array
而且DelayedArray
Bioconductor包。的功能cytomapper
保持不变,唯一的变化是如何读取图像。本小插图将概述如何使用存储在磁盘上的图像。cytomapper 1.10.1
HDF5Array而且DelayedArray是方便的Bioconductor包,以“在磁盘上”而不是“在内存中”使用阵列。的cytomapper
Package构建在这些工具之上,允许在磁盘上存储图像数据。虽然这有助于并行处理数百到数千张图像,但从用户的角度来看,几乎没有变化。在这里,我们来解释一下cytomapper
将图像存储在磁盘上对功能有影响。
的loadimage
函数接受额外的参数来指定图像是否应存储在磁盘上(on_disk
)及存放地点(h5FilesPath
).当图像存储的时间应该长于当前R会话时,可以使用h5FilesPath
需要设置为永久目录。的HDF5Array
包提供getHDF5DumpDir
函数初始化一个临时目录,该目录将在会话关闭时被删除。我们将在这里使用它来进行演示。
定义输出目录cur_dir <- getHDF5DumpDir() path.to.images <- system. library(HDF5Array) #文件("extdata", package = "巨细胞程序")图像。list <- loadImages(path.to. list)images, pattern = "mask.tiff", on_disk = TRUE, h5FilesPath = cur_dir) #显示图片列表
##细胞图像列表包含3个图像名称(3):E34_mask G01_mask J02_mask ##每个图像包含1个通道
#缩放图像图像。list <- scaleImages(image. list)list = 2^16 - 1) image.list$E34_mask
## <100 × 100>矩阵类DelayedMatrix和类型“double”:##[,1][,2][,3]…[,99] [,100] ## [1,] 824 824 824[2,] 824 824 824。[3,] 824 824 824。[4,] 824 824 824。0 1295 ##[5,] 824 824 824。0 1295 ## ... ... ...##[96,] 835 0 876。0 0 ##[97,] 835 0 876。0 0 ##[98,] 835 0 876。 1293 1293 ## [99,] 0 0 876 . 1293 1293 ## [100,] 0 0 0 . 1293 1293
该函数调用在将.tiff图像作为.h5文件写入指定目录之前读入。它生成一个CytoImageList
对象,其中包含HDF5Array
或DelayedArray
对象(而不是图像
对象),它引用.h5文件中的数据。.h5文件中的数组名称会自动设置为原始文件名,并且不能轻易地从r中更改。将映像写入磁盘很慢,因此与将映像保存在内存中相比效率较低。但是,当并行处理数百个图像时,如果所有图像都存储在磁盘上,那么它们仍然可以从R会话中访问。总之:当处理小图像集时,建议将它们读入内存(on_disk = FALSE
,默认值),而大型映像集应写入磁盘(on_disk = TRUE
).当多次读取相同的图像时,.h5文件将始终被替换。
请按照主要装饰图案有关如何使用R语言处理多通道图像的说明。
现有的CytoImageList
对象,其中包含个体图像
内存中的对象可以转换为CytoImageList
对象存储DelayedArray
或HDF5Array
磁盘上的对象。为此,可以使用以下函数调用:
data("胰图像")胰images_ondisk <- CytoImageList(胰图像,on_disk = TRUE, h5FilesPath = cur_dir) #图像对象胰图像$E34_imc
颜色模式:灰度存储。模式:双##暗淡:100 100 5 ##帧。总共:5 ##帧。渲染:5 ## ## imageData(object)[1:5,1:6,1] ## [,1] [,2] [,3] [,3] [,4] [,4] [,4] [,4] [,] 2.2357869 0.2537275 1.269632e+00 0.000000e+00 ## [2,] 2.8855283 1.9900196 2.264642e+00 0.0000000 1.410924e+00 5.654589e-16 ## [3,] 3.4009433 0.9950098 9.950098e-01 2.1800663 4.152935e-17 1.990020e+00 ## [4,] 3.2238317 3.1750760 1.128341e+00 4.4866042 7.371460e-16 0.000000e+00 ## [5,] 0.9987666 1.994036e -15 0.0000000 0.000000e+00 1.523360e+00
# HDF5Array对象胰脏images_ondisk
## <100 x 100 x 5>数组类HDF5Array和类型“double”:##,,H3 ##[,1][,2][,3]…[,99][,100] ##[1,] 2.2357869 0.2537275 1.2696325。7.265561 1.975094 ##[2,] 2.8855283 1.9900196 2.2646422。2.985029 2.885528 ## ... ... ...##[99,] 2.985029 3.636569 22.976585。25.371881 12.045588 ##[100,] 3.061645 2.985029 1.990020。13.353615 5.636652 ## ##…## ##,, cdh ##[,1][,2][,3]…[,99][,100] ##[1,] 0.940284 19.651394 43.284626。2.704231 0.000000 ##[2,] 8.393239 29.353861 22.249359。 7.345311 5.781126 ## ... . . . . . . ## [99,] 0.9897148 7.3378549 0.0000000 . 0.000000 1.667201 ## [100,] 5.8091230 2.2515676 1.9969171 . 4.344125 0.000000
# HDF5Array对象种子(胰images_ondisk $E34_imc)
/tmp/Rtmpd8quRS/HDF5Array_dump/E34_imc. hdf5array_seed类对象h5“# # # #槽”名称”:# #”[1]/ E34_imc“# # # #槽”as_sparse”:# #[1]假# # # #槽“类型”:# # # # # # [1]NA槽“暗淡”:# #[1]100 100 5 # # # #槽”chunkdim”:# #[1]100 100 5 # # # #槽”first_val”:# # 2.235787 [1]
#内存大小(object.size(胰脏图像),units = "auto")
##[1]“1.2 Mb”
format(object.size(胰脏images_ondisk), units = "auto")
##[1]“11.8 Kb”
图像也可以移动回内存表示:
胰岛images_inmemory <- CytoImageList(胰岛images_ondisk, on_disk = FALSE) #将图像数据与原始表示进行比较(as.list(胰岛images_inmemory), as.list(胰岛图像))
##[1]真
的大多数函数cytomapper
包原生支持映像存储在磁盘上,有三个例外正常化
,setChannels
而且mergeChannels
功能。
的正常化
函数将规范化图像作为第二个数据集存储在与原始数据相同的.h5文件中。
#内存格式对象的大小(object. Size(胰腺癌images_ondisk), units = "auto")
##[1]“11.8 Kb”
# kB file.info(paste0(cur_dir, "/E34_imc.h5"))[," Size "] / 1000
## [1] 148.147
- normalize(胰images_ondisk) seed(胰images_norm $E34_imc)
/tmp/Rtmpd8quRS/HDF5Array_dump/E34_imc. hdf5array_seed类对象h5“# # # #槽”名称”:# #”[1]/ E34_imc_norm“# # # #槽”as_sparse”:# #[1]假# # # #槽“类型”:# # # # # # [1]NA槽“暗淡”:# #[1]100 100 5 # # # #槽”chunkdim”:# #[1]100 100 5 # # # #槽”first_val”:# # 0.01235403 [1]
#内存格式对象的大小(object. Size(胰腺images_norm), units = "auto")
##[1]“11.8 Kb”
# kB file.info(paste0(cur_dir, "/E34_imc.h5"))[," Size "] / 1000
## [1] 414.936
正如我们所看到的,当图像归一化时,内存中的大小并没有增加。但是,由于第二个规范化数据集存储在.h5文件中,磁盘上的大小会增加。可以通过设置覆盖原始数据集overwrite = TRUE
节省磁盘空间。然而,这将破坏到所有R对象中原始数据的链接。因此,建议保留默认值overwrite = FALSE
.此外,存储在磁盘上的图像的归一化比存储在内存中的图像的归一化要慢,因为归一化的图像需要写入磁盘。
的setChannels
函数将所有图像中的相同通道替换为用户定义的通道。在内存中保存图像时,这是没有问题的。然而,DelayedArray
框架将子赋值操作中的替换值存储在内存中。这意味着当使用setChannels
函数时,对象的大小会随着内存使用量的增加而增加:
cur_Images1 <-胰脏images_ondisk cur_Images2 <- getChannels(胰脏images_ondisk, 2) channelNames(cur_Images2) <- "CD99_2" setChannels(cur_images1,1) <- cur_Images2 format(object.size(cur_Images1), units = "auto")
##[1]“27.2 Kb”
的mergeChannels
函数合并多个用户定义的通道。由于这个操作创建了一个全新的图像对象,需要将合并的通道存储在不同的位置:
channels1 <- getChannels(胰images_ondisk, 1:2) channels2 <- getChannels(胰images_ondisk, 3:4) dir.create(文件。Path (cur_dir, "test")) cur_path_2 <- file。path(cur_dir, "test") channels3 <- mergeChannels(channels1, channels2, h5FilesPath = cur_path_2) seed(channels3$E34_imc)
/tmp/Rtmpd8quRS/HDF5Array_dump/test/E34_imc. hdf5array_seed类对象h5“# # # #槽”名称”:# #”[1]/ E34_imc“# # # #槽”as_sparse”:# #[1]假# # # #槽“类型”:# # # # # # [1]NA槽“暗淡”:# #[1]100 100 4 # # # #槽”chunkdim”:# #[1]100 100 4 # # # #槽”first_val”:# # 2.235787 [1]
## R版本4.2.2(2022-10-31)##平台:x86_64-pc-linux-gnu(64位)##运行在Ubuntu 20.04.5 LTS ## ##矩阵产品:默认## BLAS: /home/biocbuild/bbs-3.16-bioc/R/lib/libRblas。/home/biocbuild/bbs-3.16-bioc/R/lib/libRlapack。所以## ## locale: ## [1] LC_CTYPE=en_US。UTF-8 LC_NUMERIC= c# # [3] LC_TIME=en_GB LC_COLLATE= c# # [5] LC_MONETARY=en_US。utf - 8 LC_MESSAGES = en_US。UTF-8 ## [7] LC_PAPER=en_US。UTF-8 LC_NAME= c# # [9] LC_ADDRESS=C lc_phone = c# # [11] LC_MEASUREMENT=en_US。UTF-8 LC_IDENTIFICATION=C ## ##附加的基本包:## [1]stats4 stats graphics grDevices utils datasets methods ##[8]基础## ##其他附加包:# # # # [1] HDF5Array_1.26.0 rhdf5_2.42.0 [3] DelayedArray_0.24.0 Matrix_1.5-3 # # [5] ggplot2_3.4.0 cowplot_1.1.1 # # [7] cytomapper_1.10.1 SingleCellExperiment_1.20.0 # # [9] SummarizedExperiment_1.28.0 Biobase_2.58.0 # # [11] GenomicRanges_1.50.2 GenomeInfoDb_1.34.7 # # [13] IRanges_2.32.0 S4Vectors_0.36.1 # # [15] BiocGenerics_0.44.0 MatrixGenerics_1.10.0 # # [17] matrixStats_0.63.0 EBImage_4.40.0 # # [19] BiocStyle_2.26.0 # # # #通过加载一个名称空间(而不是附加):# # # # [1] SpatialExperiment_1.8.0 ggbeeswarm_0.7.1 [3] colorspace_2.0-3 rjson_0.2.21 # # [5] ellipsis_0.3.2 scuttle_1.8.4 # # [7] XVector_0.38.0 fftwtools_0.9-11 # # [9] farver_2.1.1 fansi_1.0.3 # # [11] codetools_0.2-18 R.methodsS3_1.8.2 # # [13] sparseMatrixStats_1.10.0 cachem_1.0.6 # # [15] knitr_1.41 jsonlite_1.8.4 # # [17] png_0.1-8 R.oo_1.25.0 # # [19] shinydashboard_0.7.2 shiny_1.7.4 # # [21] BiocManager_1.30.19 compiler_4.2.2 # # [23] dqrng_0.3.0 assertthat_0.2.1 # # [25] fastmap_1.1.0 limma_3.54.0## [27] cli_3.6.0 svgPanZoom_0.3.4 ## [29] later_1.3.0 htmltools_0.5.4 ## [31] tools_4.2.2 gtable_0.3.1 ## [33] glue_1.6.2 GenomeInfoDbData_1.2.9 ## [35] dplyr_1.0.10 Rcpp_1.0.9 ## [37] jquerylib_0.1.4 raster_3.6-14 ## [39] vctrs_0.5.1 rhdf5filters_1.10.0 ## [41] svglite_2.1.1 DelayedMatrixStats_1.20.0 ## [43] xfun_0.36 stringr_1.5.0 ## [45] beachmat_2.14.0 mime_0.12 ## [47] lifecycle_1.0.3 terra_1.6-53 ## [49] edgeR_3.40.2 zlibbioc_1.44.0 ## [51] scales_1.2.1 promises_1.2.0.1 ## [53] parallel_4.2.2 RColorBrewer_1.1-3 ## [55] yaml_2.3.6 gridExtra_2.3 ## [57] sass_0.4.4 stringi_1.7.12 ## [59] highr_0.10 tiff_0.1-11 ## [61] BiocParallel_1.32.5 rlang_1.0.6 ## [63] pkgconfig_2.0.3 systemfonts_1.0.4 ## [65] bitops_1.0-7 evaluate_0.20 ## [67] lattice_0.20-45 Rhdf5lib_1.20.0 ## [69] labeling_0.4.2 htmlwidgets_1.6.1 ## [71] tidyselect_1.2.0 magrittr_2.0.3 ## [73] bookdown_0.32 R6_2.5.1 ## [75] magick_2.7.3 generics_0.1.3 ## [77] nnls_1.4 DBI_1.1.3 ## [79] withr_2.5.0 pillar_1.8.1 ## [81] abind_1.4-5 RCurl_1.98-1.9 ## [83] sp_1.5-1 tibble_3.1.8 ## [85] DropletUtils_1.18.1 utf8_1.2.2 ## [87] rmarkdown_2.19 viridis_0.6.2 ## [89] jpeg_0.1-10 locfit_1.5-9.7 ## [91] grid_4.2.2 digest_0.6.31 ## [93] xtable_1.8-4 httpuv_1.6.8 ## [95] gridGraphics_0.5-1 R.utils_2.12.2 ## [97] munsell_0.5.0 beeswarm_0.4.0 ## [99] viridisLite_0.4.1 vipor_0.4.5 ## [101] bslib_0.4.2