目標(biāo):將ADNI下載的多模態(tài)格式影像轉(zhuǎn)為BIDS存儲(chǔ)格式的NIFTI文件
環(huán)境:Ubuntu 2020
工具包:
1. 下載影像
官網(wǎng):https://ida.loni.usc.edu/login.jsp
注冊(cè)賬號(hào),Proposal通過(guò)之后就可以下載了。
在IDA里面找到待下載的影像,打包下載。
推薦分?jǐn)?shù)個(gè)壓縮包下載,方便后續(xù)解壓。
推薦使用advance research

IDA普通搜索界面,找到待下載的影像,打包下載

文件下載界面

ADNI image acquisition (https://adni.loni.usc.edu/methods/mri-tool/mri-acquisition/)
2. 解壓影像
用Ubuntu自帶的解壓工具即可解壓。
由于傳輸故障可能出現(xiàn)無(wú)法解壓的情況。下載完之后要及時(shí)查看,以便及時(shí)重下。

10個(gè)DTI壓縮包

解壓

典型文件結(jié)構(gòu)
3. 匯總影像到一個(gè)目錄下
以下步驟適用于dicom或者nifti格式
首先利用mv指令將所有包下的sub級(jí)別的目錄移動(dòng)到一起(如都移動(dòng)到/adni/dicom/dti/)。
mv alldti2/ADNI/* ~/adni/dicom/dti/
由于分批下載的特性,不同子包之間可能出現(xiàn)1??重復(fù)下載 2??同個(gè)被試的多次掃描出現(xiàn)在不同包里。
這兩種情況均會(huì)導(dǎo)致mv失敗。因此需要使用rsync進(jìn)行一次同步。
rsync -av --ignore-existing alldti2/ADNI/* ~/adni/dicom/dti/
為節(jié)省空間,同步結(jié)束之后可以只保留/adni/dicom/dti/,刪除子包以及解壓的子包。

匯總之后的文件夾,有的被試下面可能有多個(gè)掃描

Single Scan
4. 獲得下載匯總表
匯總到一個(gè)文件夾后需要對(duì)下載情況進(jìn)行評(píng)估。
目的主要是1??找到異常影像(文件大小異常、volume數(shù)目異常等等)2?? 統(tǒng)計(jì)跨模態(tài)的id
4.1匯總nifti格式的下載情況
*需要tidyverse包和glue包
# Returns a summary table of downloaded nifti files of a single modality
# Usage: summary_nifti(path). The path has "011_S_0003" "011_S_0005" "011_S_0005" "011_S_0005" ...
# "id_subject" "image_path" "image_size" "image_description" "image_date" "image_time" "image_ID"
summary_nifti <- function(path.download){
future::plan(future::multisession, workers = 8)
result <- furrr::future_map_dfr(list.files(path.download), function(id_subject) {
map_dfr(list.files(glue('{path.download}/{id_subject}')), function(image_description){
map_dfr(list.files(glue('{path.download}/{id_subject}/{image_description}')), function(image_time){
map_dfr(
list.files(glue('{path.download}/{id_subject}/{image_description}/{image_time}')),
function(image_ID){
filename <- list.files(glue('{path.download}/{id_subject}/{image_description}/{image_time}/{image_ID}'))
filepath <- glue('{path.download}/{id_subject}/{image_description}/{image_time}/{image_ID}/{filename}')
file_size = file.info(filepath)$size / 1000^2
return(
tibble(
id_subject = id_subject,
image_path = filepath,
image_size = file_size,
image_description = image_description,
image_time = image_time,
image_ID = image_ID
)
)
})
})
})
})
result.date <- result %>% separate(col = 'image_time', into = c('image_date', 'image_time'), sep = '_', extra = 'merge')
return(result.date)
}

匯總表格
4.2 匯總dicom格式下載情況
# Returns a summary table of downloaded nifti files of a single modality
# Usage: summary_nifti(path). The path has "011_S_0003" "011_S_0005" "011_S_0005" "011_S_0005" ...
# "id_subject" "image_path" "image_volume_size" "image_description" "image_date" "image_time" "image_ID"
summary_dicom <- function(path.download){
future::plan(future::multisession, workers = 3)
result <- furrr::future_map_dfr(list.files(path.download), function(id_subject) {
map_dfr(list.files(glue('{path.download}/{id_subject}')), function(image_description){
map_dfr(list.files(glue('{path.download}/{id_subject}/{image_description}')), function(image_time){
map_dfr(
list.files(glue('{path.download}/{id_subject}/{image_description}/{image_time}')),
function(image_ID){
dicom_path <- list.files(glue('{path.download}/{id_subject}/{image_description}/{image_time}/{image_ID}'))
return(
tibble(
id_subject = id_subject,
dicom_volume = length(list.files(dicom_path)),
dicom_path = dicom_path,
image_description = image_description,
image_time = image_time,
image_ID = image_ID
)
)
})
})
})
})
result.date <- result %>% separate(col = 'image_time', into = c('image_date', 'image_time'), sep = '_', extra = 'merge')
return(result.date)
}