FSL-Introduction

Installation

Ubuntu下安装AFNI和FSLNeuroDebian-fsl-complete

**Notice: ** source .profile

  • Ubuntu 16.04
wget -O- http://neuro.debian.net/lists/xenial.cn-bj1.full | sudo tee /etc/apt/sources.list.d/neurodebian.sources.list
sudo apt-key adv --recv-keys --keyserver hkp://pool.sks-keyservers.net:80 0xA5D32F012649A5A9
sudo apt-get update
sudo apt-get install fsl-complete
  • Ubuntu 18.04
    浙大镜像
wget -O- http://neuro.debian.net/lists/bionic.cn-zj.full | sudo tee /etc/apt/sources.list.d/neurodebian.sources.list
# wget -O- http://neuro.debian.net/lists/bionic.cn-zj.full | tee /etc/apt/sources.list.d/neurodebian.sources.list
sudo apt-key adv --recv-keys --keyserver hkp://pool.sks-keyservers.net:80 0xA5D32F012649A5A9  # try more untill sucess

中科院镜像

wget -O- http://neuro.debian.net/lists/bionic.cn-hf.full | sudo tee /etc/apt/sources.list.d/neurodebian.sources.list
# wget -O- http://neuro.debian.net/lists/bionic.cn-hf.full | tee /etc/apt/sources.list.d/neurodebian.sources.list
sudo apt-key adv --recv-keys --keyserver hkp://pool.sks-keyservers.net:80 0xA5D32F012649A5A9
sudo apt-get update
sudo apt-get install fsl-complete
  • 设置
echo alias fsl=". /etc/fsl/5.0/fsl.sh" >> /etc/.profile
source /etc/.profile
  • 检查
flirt -version
--- FSL Installer - Version 3.0.16 ---
[Warning] Some operations of the installer require administative rights,
    for example installing into the default folder of /usr/local.
    If your account is an 'Administrator' (you have 'sudo' rights)
    then you will be prompted for your administrator password
    when necessary.
When asked a question, the default answer is given in square brackets.
Hit the Enter key to accept this default answer.
Where would you like the FSL install to be (including the FSL folder name)? [/usr/local/fsl]:
Downloading...

remove

sudo apt-get remove fsl-complete
sudo apt-get remove --auto-remove fsl-complete

RUNTIME ERROR

  • libnewimage.so cannot open shared object file

参考:muschellij2/fslr - GitHub

➜ echo $LD_LIBRARY_PATH
/usr/local/cuda-10.0/lib64${LD_LIBRARY_PATH+:/usr/lib/fsl/5.0}

解决方案:注释掉.bashrcexport LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64\${LD_LIBRARY_PATH+:${LD_LIBRARY_PATH+}}

Overview

FslOverviewNeuroimaging Data Processing/FSL

Currently FSL only accepts the input files in NIFTI format, and the DICOM files need to be converted to NIFTI after acquisition and before processing.

Functional MRI 功能导向

  • FEAT - model-based analysis, e.g., for task FMRI 基于模型的分析,例如,用于FMRI任务

    FEAT基于一般线性建模(GLM, general linear modelling)。 它允许描述实验设计; 然后创建一个适合数据的模型,告诉你大脑响应刺激的位置。 在FEAT中,用于第一级(时间序列)数据的GLM方法称为FILM。 FILM使用稳健且准确的、时间序列自相关的非参数估计来预先计算每个体素的时间序列; 与未预先白化的方法相比,这提高了估计效率。

  • MELODIC - model-free ICA-based analysis, e.g., for resting FMRI 基于ICA的无模型分析,例如,用于静息FMRI

    MELODIC是无模型分析,它使用独立分量分析(ICA)将单个或多个4D数据集分解为不同的空间和时间分量。 MELODIC可以选择不同的激活和人工组件,而无需指定任何明确的时间序列模型。

    使用概率独立分量分析(PICA, Probabilistic Independent Component Analysis)的无模型FMRI分析。 由于相关的“噪声模型”,MELODIC可自动估计数据中感兴趣的噪声和信号源的数量,并且能够将重要性(“p值”)分配给输出空间图。 MELODIC还可以使用Tensor-ICA分析多个受试者或sessions evening。

  • FABBER - dual-echo (ASL/BOLD) perfusion FMRI 双回波(ASL / BOLD)灌注FMRI

  • BASIL - quantitative resting perfusion analysis from perfusion ASL FMRI 灌注ASL FMRI定量静息灌注分析

Structural MRI 结构导向

  • fsl_anat - general anatomical pipeline script that calls most of the below tools to provide a "one-stop" comprehensive integrated structural analysis 常规解剖管道脚本,调用大多数工具,提供“一站式”综合结构分析
  • BET - brain extraction 脑区域提取
  • FAST - tissue-type segmentation 脑组织分割
  • FIRST - segmentation of subcortical structures 皮质下结构的分割
  • FLIRT & FNIRT - linear and nonlinear registration 线性&&非线性校准
  • FSLVBM - voxelwise analysis of multi-subject grey-matter density 多受试者灰质密度的体素分析
  • SIENA & SIENAX - longitudinal and cross-sectional analysis of structural changes 结构变化的纵向()和横截面分析

Diffusion MRI 面向DTI的功能

  • FDT - diffusion MRI preprocessing, tensor fitting and tractography 弥散MRI预处理,张量拟合和纤维束成像
  • TBSS - voxelwise analysis of multi-subject diffusion MRI datasets 多受试者弥散MRI数据集的体素分析
  • EDDY - improved eddy-current and head motion correction for diffusion MRI datasets 弥散MRI数据集的涡流改善和头部运动校正
  • TOPUP - improved distortion correction for diffusion MRI datasets 弥散MRI数据集的失真校正改善

Perfusion MRI 模拟器

用于生成逼真的模拟MRI和FMRI图像或时间序列

  • BASIL - perfusion quantification using arterial spin labelling 使用动脉自旋标记进行灌注量化

Statistics

  • Randomise - permutation-based inference, including TFCE 基于排列的推理,包括TFCE
  • PALM - permutation-based inference, including multivariate and handling of surface data 基于排列的推理,包括多变量和表面数据的处理
  • Dual Regression - Generating subject-specific maps from a group-ICA 从ICA组生成特定于受试者的映射

Other tools

  • FSLeyes - 3D/4D image, timeseries and surface viewer 3D / 4D图像,时间序列和表面查看器

  • Nets - various tools relating to network/connectivity analysis 与网络/连通性分析有关的各种工具

  • FDR - false discovery rate thresholding 发现率的错误阈值

  • Mm - mixture-model thresholding 混合模型阈值

  • Cluster - various cluster-based analyses including GRF-based cluster inference 各种基于群集(cluster)的分析,包括基于GRF的群集推理

  • Fslutils - miscellaneous command-line programs (including fslmaths and fslstats) 其他命令行程序(包括fslmaths和fslstats)

  • Atlases - various atlases included with FSL FSL附带的各种地图集(atlases)

  • SUSAN - nonlinear image noise reduction 非线性图像降噪

  • FUGUE - fieldmap-based EPI distortion correction 基于场图(fieldmap)的EPI失真校正

  • MCFLIRT - head-motion correction 头部运动校正

  • FLOBS - flexible haemodynamic basis functions 灵活的血液动力学基础功能

  • Miscvis - programs for making summary pictures 制作摘要图片的程序

  • lesion_filling - tool for filling lesion masks with non-lesion intensities 用于填充具有非病变强度的病变掩膜的工具

  • POSSUM - FMRI/MRI image simulator FMRI / MRI图像模拟器

    (用于理解MRI的面向物理的模拟扫描仪)包括用于脉冲序列生成,信号生成,噪声添加和图像重建的工具.

  • Atlasquery - tool for reporting atlas labels for masks or single coordinates 用于报告掩膜或单个坐标的图集(atlas)标签

FSL_Course


使用教程

核磁数据处理: FSL系列之bet命令

提取脑结构,即剔除颅骨

BET Usage
bet <input> <output> [options]
bet <input_nifti_file> <output_nifti_file> -f 0.5 -g 0
/usr/share/fsl/5.0/bin/bet /home/captain/Desktop/FSL/flirt/sample-001 /home/captain/Desktop/FSL/flirt/sample-001_brain -f 0.5 -g 0 
options:
-m
-f 可以指定图像密度阈值, 默认是0.5
-g (the gradient threshold)修正边缘没有去除的痕迹
-R  效果优于 -m -f 0.5

核磁数据处理: FSL系列之脑组织分割---FAST

White matter、Gray matter、CSF

FAST (FMRIB’s Automated Segmentation Tool)采用的算法是隐马尔科夫随机场模型,以及相关的EM算法(Expectation-Maximization).

FAST Usage
fast [options] [input_nifti_file] [output_nifti_file]
[options]:
-t <n> or --type=<n> : type of image (n=1 for T1, n=2 for T2, n=3 for PD)
-n <n> or --class=<n> : number of tissue-type classes
-H <v> or --Hyper=<v> : MRF beta value for main segmentation phase (increasing this gives spatially smoother segmentations) 主分割阶段的MRF beta值(增加此值可以提供空间更平滑的分段)
-I <n> : Loop iterations during initial bias-field removal phase 在初始偏置场移除阶段期间循环迭代
-l <n> | -l <m> or --lowpass=<m>: Bias field smoothing : n is iterations, m is FWHM in mm - rough guide is m ≅ 2 √n 偏置场平滑
-o <base> or --out=<base> : basename for outputs
# Partial volume maps  (Default)
/usr/share/fsl/5.0/bin/fast -t 1 -n 3 -H 0.1 -I 4 -l 20.0 -o /home/captain/Desktop/7_30_fsl/sample-001_brain_fast /home/captain/Desktop/7_30_fsl/sample-001_brain

# output the files as below:
sample-001_brain_fast_mixeltype.nii.gz
sample-001_brain_fast_pve_0.nii.gz
sample-001_brain_fast_pve_1.nii.gz
sample-001_brain_fast_pve_2.nii.gz
sample-001_brain_fast_pveseg.nii.gz
sample-001_brain_fast_seg.nii.gz
# pure
/usr/share/fsl/5.0/bin/fast -t 1 -n 3 -H 0.1 -I 4 -l 20.0 --nopve -o /home/captain/Desktop/7_30_fsl/sample-001_brain_fast /home/captain/Desktop/7_30_fsl/sample-001_brain

# output the files as below:
sample-001_brain_fast_seg.nii.gz
# Binary segmentation: Also output one image per class
/usr/share/fsl/5.0/bin/fast -t 1 -n 3 -H 0.1 -I 4 -l 20.0 -g --nopve -o /home/captain/Desktop/7_30_fsl/sample-001_brain_fast /home/captain/Desktop/7_30_fsl/sample-001_brain

# output the files as below: (White matter、Gray matter、CSF)
sample-001_brain_fast_seg.nii.gz
sample-001_brain_fast_seg_0.nii.gz
sample-001_brain_fast_seg_1.nii.gz
sample-001_brain_fast_seg_2.nii.gz
# Restored input
/usr/share/fsl/5.0/bin/fast -t 1 -n 3 -H 0.1 -I 4 -l 20.0 --nopve -B -o /home/captain/Desktop/7_30_fsl/sample-001_brain_fast /home/captain/Desktop/7_30_fsl/sample-001_brain

# output the files as below:
sample-001_brain_fast_restore.nii.gz
sample-001_brain_fast_seg.nii.gz
# Estimated Bias field
/usr/share/fsl/5.0/bin/fast -t 1 -n 3 -H 0.1 -I 4 -l 20.0 --nopve -b -o /home/captain/Desktop/7_30_fsl/sample-001_brain_fast /home/captain/Desktop/7_30_fsl/sample-001_brain

# output the files as below:
sample-001_brain_fast_bias.nii.gz
sample-001_brain_fast_seg.nii.gz

皮下组织分割 --- FIRST

ex. 海马体分割

FIRST Usage
fsl5.0-first -i <input_nii> -l <input_mat> -m /usr/share/fsl/data/first/models_336_bin/L_Hipp_bin.bmv -k <output_L_path>

其中FLIRT依赖包:fsl-atlases

$ fsl5.0-first -i '/home/captain/Desktop/FSL/first/sample-001_brain_flirt.nii.gz' -l '/home/captain/Desktop/FSL/first/sample-001_brain_flirt.mat' -m /usr/share/fsl/data/first/models_336_bin/L_Hipp_bin.bmv -k /home/captain/Desktop/FSL/first/L_Hipp
create shapeModel 
done creating shapeModel 
0.00128597 -0.948526 0.229461 
-0.0119911 -0.222583 -0.867114 
0.895755 -0.0140377 0.0013288 
NEw done imodes transform
mode  0.972959
D 
336 2196 2196 336
open file /home/captain/Desktop/FSL/first/L_Hipp.vtk to save.
succesfully opened file /home/captain/Desktop/FSL/first/L_Hipp.vtk to save.

MRI数据处理: FSL线性配准flirt命令

仿射变换

FLIRT Usage
flirt -in <invol> -ref /usr/share/fsl/5.0/data/standard/MNI152_T1_2mm_brain -out <outvol> -omat <invol2refvol.mat> -bins 256 -cost corratio -searchrx -90 90 -searchry -90 90 -searchrz -90 90 -dof 12  -interp trilinear
/usr/share/fsl/5.0/bin/flirt -in /home/captain/Desktop/FSL/flirt/sample-001_brain.nii.gz -ref /usr/share/fsl/5.0/data/standard/MNI152_T1_2mm_brain -out /home/captain/Desktop/FSL/flirt/sample-001_brain_flirt.nii.gz -omat /home/captain/Desktop/FSL/flirt/sample-001_brain_flirt.mat -bins 256 -cost corratio -searchrx -90 90 -searchry -90 90 -searchrz -90 90 -dof 12  -interp trilinear
-in 指定的输入图像;
-ref 指定的参考模板; ex. MNI152_T1_2mm_brain.nii.gz
-omat 指定仿射变换(将输入图像配准到ref模板上用的)4*4的仿射矩阵; 
-out 指定的是完成仿射变换后的输出;
-dof 自由度(degrees of freedom)

MRI数据处理: FSL非线性配准命令fnirt

FNIRT-UserGuide 内含Tools for handling warps

为了排除个体差异, 进而使得个体间脑组织的对比得以实施, 常需要将不同的大脑配准到公共的模板/空间. 这样做是为了后续用TBSS等统计方法进行组间分析(compare fractional anisotropy or tissue composition). 配准算法根据适用的问题不同分为线性非线性两种, flirt采用了线性配准算法, 所谓的线性配准就是采用坐标旋转\平移\缩放\剪切将两个图像匹配到一起.但是线性配准也有局限性,很多时候仅仅用线性配准是不够的.

操作流程:

1.bet获得去除颅骨的`my_betted_structural.nii.gz`文件(作为flirt指令的输入);
2.flirt 获得`my_affine_transf.mat`仿射变换的矩阵参数(作为fnirt指令的aff参数);
3.fnirt 获得`my_nonlinear_transf.nii.gz` 非线性变换输出(作为applywarp指令中的warp参数),以及my_betted_structural_to_MNI152_T1_2mm.log;
4.applywarp 获得`my_warped_structural.nii.gz` 完成 struct->MNI152 映射
FNIRT Usage

For the following set of "standard tasks" the commands below are likely to work for you, provided that your data are of reasonable quality.

  • Registering T1-structural to MNI152
$ bet my_structural my_betted_structural  # output: my_betted_structural.nii.gz
$ flirt -ref ${FSLDIR}/data/standard/MNI152_T1_2mm_brain -in my_betted_structural -omat my_affine_transf.mat  # output: my_affine_transf.mat
$ fnirt --in=my_structural --aff=my_affine_transf.mat --cout=my_nonlinear_transf --config=T1_2_MNI152_2mm  # output: my_structural_to_MNI152_T1_2mm.log && my_nonlinear_transf.nii.gz (about 3min)  # 非线性变换的输出
$ applywarp --ref=${FSLDIR}/data/standard/MNI152_T1_2mm --in=my_structural --warp=my_nonlinear_transf --out=my_warped_structural # output: my_warped_structural.nii.gz  # 完成 struct->MNI152 映射

When you specify --config=my_file, 'i.e.' without explicit path or extension, fnirt will search for ./my_file, ./my_file.cnf, ${FSLDIR}/etc/flirtsch/my_file and ${FSLDIR}/etc/flirtsch/my_file.cnf in that order and use the first one that is found.

$ bet my_structural my_betted_structural  # output: my_betted_structural.nii.gz
$ flirt -ref ${FSLDIR}/data/standard/MNI152_T1_2mm_brain -in my_betted_structural -omat my_affine_transf.mat  # output: my_affine_transf.mat
$ fnirt --in=my_betted_structural --aff=my_affine_transf.mat --cout=my_betted_nonlinear_transf --config=T1_2_MNI152_2mm  # output: my_betted_structural_to_MNI152_T1_2mm.log && my_betted_nonlinear_transf.nii.gz (about 3min)
$ applywarp --ref=${FSLDIR}/data/standard/MNI152_T1_2mm --in=my_betted_structural --warp=my_betted_nonlinear_transf --out=my_warped_betted_structural # output: my_warped_betted_structural.nii.gz  
  • Registering functional data (or any non-T1 image data) to MNI152 (via structural scan)
$ bet my_structural my_betted_structural
$ flirt -ref my_betted_structural -in my_functional -dof 6 -omat func2struct.mat
$ flirt -ref ${FSLDIR}/data/standard/MNI152_T1_2mm_brain -in my_betted_structural -omat my_affine_transf.mat
$ fnirt --in=my_structural --aff=my_affine_transf.mat --cout=my_nonlinear_transf --config=T1_2_MNI152_2mm
$ applywarp --ref=${FSLDIR}/data/standard/MNI152_T1_2mm --in=my_functional --warp=my_nonlinear_transf --premat=func2struct.mat --out=my_warped_functional

Only add the func2struct.mat的求取及应用过程

  • Registering FA-image to FMRIB58
$ flirt -ref ${FSLDIR}/data/standard/FMRIB58_FA_1mm_brain -in my_FA -omat my_affine_transf.mat
$ fnirt --in=my_FA --aff=my_affine_transf.mat --cout=my_nonlinear_transf --config=FA_2_FMRIB58_1mm
$ applywarp --ref=${FSLDIR}/data/standard/FMRIB58_FA_1mm_brain --in=my_FA --warp=my_nonlinear_transf --out=my_warped_FA

List of parameters

# Parameters that specify input files
--in=filename : Name of file with images you want to register. E.g. my_brain.nii
--ref=filname : Name of a file that defines the target space. E.g. MNI152_T1_2mm.nii.
--config=config_file : Name of text-file with parameter settings. If you read nothing else, read this. 
--aff=mat_fname : Name of text-file with affine starting guess.`Typically the output from flirt.`
# Parameters specifying names of output-files
--cout=filename : Name of output-file containing the `coefficients`(相关系数) that determine the warp-field.
# Parameters that are are specified "once and for all"
--warpres=xres,yres,zres : Resolution of warps (in mm). E.g. 10,10,10
--premat=filename : Specifies an affine transform that should be applied to the data prior to the non-linear warping. 指定应在非线性变形之前应用于数据的仿射变换;

理解

  • Step 0: Registering your functional data to the structural scan doing e.g. (FLIRT的作用)

    $ flirt -ref struct.nii -in func.nii -omat func2struct.mat -dof 6
    

    Where the text-file func2struct.mat now contains the rigid(刚性) body transform that maps func.niionto struct.nii. FLIRT,即刚性校准

  • Step 1: Get an intial affine transform mapping struct.nii onto the MNI152 template.

    $ bet struct.nii betted_struct.nii 
    $ flirt -ref MNI152_T1_2mm_brain.nii -in betted_struct.nii -omat aff_struct2mni.mat
    
  • Step 2: Use that as initial guess for fnirt

    $ fnirt --ref=MNI152_T1_2mm.nii --in=struct.nii --aff=aff_struct2mni.mat ... --cout=warp_struct2mni.nii
    
  • Step 3: And then we use that to resample the functional scan into the MNI152 space.

    $ applywarp --ref=MNI152_T1_2mm.nii --in=func.nii --out=funcInMNI.nii --warp=warp_struct2mni.nii --premat=func2struct.mat
    

    We are now feeding applywarp information both about the struct->MNI152 mapping and about the func->struct mapping allowing it to map from func to MNI152 in a single step.

Questions:

  • what's the difference between func.nii and struct.nii ?

    • 根据官方样例数据集猜测:

      func.nii — PET (64, 64, 45); 3*3*3 Millmeters; Series Length:380   aMRI?
      struct.nii — MRI (192, 256, 192); 1.016*1.016*1 Millmeters; Series Length:1  fMRI?
      
  • $ fnirt --in=my_structural --aff=my_affine_transf.mat --cout=my_nonlinear_transf --config=T1_2_MNI152_2mm why --in=my_structural not --in=my_betted_structural

磁共振影像分析之: 基于FSL的VBM分析(1) (2)

VBM (voxel-based morphometry )将每个人的大脑都形成一个模板, 避免了人与人之间较大的解剖学差异, 并将结果经过平滑处理, 使得每个体素都代表它和邻居的平均值, 然后对不同个体间进行体素水平的比较.

VBM可以在体素水平上定量检测出脑组织的密度和体积,反映不同群体或者个体局部脑区的脑组织成分与特征的差异. 目前, VBM已经广泛应用与描绘大脑结构的细微变化.

VBM的预处理流程可以大致总结为:

1) 从原始图像产生平均模板,也就是subject-specific模板 
2) 配准:将所有的原始图像通过仿射变换配准到1)生成的模板上 
3) 组织分割:灰质,白质和脑脊液 --- fast模块
4) 保持体积调制(modulation)
5) 平滑处理, 用各向同性的高斯核 
6) 统计分析
1. 以正确的格式准备T1图像,并使用randomise manual创建design.mat和design.con
2. fslvbm_1_bet  - 对所有T1图像进行脑提取 ➜ *_brain.nii.gz
3. fslvbm_2_template  - 创建特定于研究的对称灰质模板 ➜ template_4D_GM.nii.gz
4. fslvbm_3_proc  - 将所有灰质图像注册到模板,使用不同的内核大小调整和平滑它们,
   最后运行初始GLM分析进行定性评估(即统计分析组间差异) ➜ GM_mod_merg.nii.gz
5. randomize -使用置换(permutation)测试进行体素GLM分析 ➜ *_tfce_corrp_tstat1.nii.gz
1. 以正确的格式准备T1图像,并使用randomise manual创建design.mat和design.con
2. fslvbm_1_bet  - 对所有T1图像进行脑提取
   [option] 默认使用参数-b;当图像中出现大量脖颈部分时,使用参数-n
     [output] BET -- *_brain.nii.gz
3. fslvbm_2_template  - 创建特定于研究的对称灰质模板
     [option] 基于灰质映射到ICBM-152模板的仿射校准生成模板时,使用参数-a;
              基于非线性校准生成模板时,使用参数-n
     [output] struc/
              FAST -- Partial volume maps  (Default); *_GM.nii.gz
                      FLIRT -- *_GM_to_T.mat、*_GM_to_T.nii.gz;
                               *_GM_to_T_init.mat;*_GM_to_template_GM_init.log
                      FNIRT -- *_GM_to_T_init.nii.gz;
                                 *_GM_to_T_init_warp.msf、*_GM_to_T_init_warp.nii.gz
                              -- template_GM_init、template_GM ➜ template_GM_flipped ➜ 'template_4D_GM' ??(view 源码)       
4. fslvbm_3_proc  - 将所有灰质图像注册到模板,使用不同的内核大小调整和平滑它们,
   最后运行初始GLM分析进行定性评估(即统计分析组间差异) # how to apply...
   [output] stats/
                  fslvbm3b*;`GM_mask`(二值化); GM_merge; template_GM(有颅骨阴影)
                GM_mod_merg,
                GM_mod_merg_s2, GM_mod_merg_s2_tstat1, # tstats映射帮助确定用于randomise的平滑值  how...
                  'GM_mod_merg_s3', GM_mod_merg_s3_tstat1,
            GM_mod_merg_s4, GM_mod_merg_s4_tstat1 # _s*,数值越大,图像越模糊
    [inter] struc/
              *_GM_to_template_GM.log、*_GM_to_template_GM.mat、*_GM_to_template_GM.nii.gz; 
            *_GM_to_template_GM_mod.nii.gz;
            *_GM_to_template_GM_warp.msf、*_GM_to_template_GM_warp.nii.gz;
            *_JAC_nl.nii.gz.

5. randomise -使用置换(permutation)测试进行体素GLM分析  # how to apply...
     [output] stats/'GM_mod_merg_s3_tfce_corrp_tstat1.nii'
FSLVBM Usage

A - Prepare your data for the FSL-VBM study

$ for g in con_1623.nii.gz con_2304.nii.gz con_2878.nii.gz con_3456.nii.gz con_3641.nii.gz con_3642.nii.gz con_3668.nii.gz con_3670.nii.gz pat_1433.nii.gz pat_1650.nii.gz pat_1767.nii.gz pat_2042.nii.gz pat_2280.nii.gz pat_2632.nii.gz pat_2662.nii.gz pat_2996.nii.gz; do
> echo $g >> template_list
> done

生成template_list文件⤴️

It's a good idea to consider your cross-subject statistical model before you run the FSL-VBM analysis. So you should at this point create your design.mat and design.con in your FSL-VBM directory; see the randomise manual.⤵️

design_ttest <output design name> <size of first group> <size of second group>

比如现在对照组con_*有10项数据 病患组有pat_* 8项数据,使用design_ttest2 design 10 8指令,即会生成design.mat、desgin.con文件

  • design.mat

    /NumWaves 2
    /NumPoints 18
    /PPheights 1 1
    /Matrix
    1 0
    1 0
    1 0
    1 0
    1 0
    1 0
    1 0
    1 0
    1 0
    1 0
    0 1
    0 1
    0 1
    0 1
    0 1
    0 1
    0 1
    0 1
    
    /NumWaves 2
    /NumPoints    18
    /PPheights        1.000000e+00    1.000000e+00
    
    /Matrix
    1.000000e+00  0.000000e+00    
    1.000000e+00  0.000000e+00    
    1.000000e+00  0.000000e+00    
    1.000000e+00  0.000000e+00    
    1.000000e+00  0.000000e+00    
    1.000000e+00  0.000000e+00    
    1.000000e+00  0.000000e+00    
    1.000000e+00  0.000000e+00    
    1.000000e+00  0.000000e+00    
    1.000000e+00  0.000000e+00    
    0.000000e+00  1.000000e+00    
    0.000000e+00  1.000000e+00    
    0.000000e+00  1.000000e+00    
    0.000000e+00  1.000000e+00    
    0.000000e+00  1.000000e+00    
    0.000000e+00  1.000000e+00    
    0.000000e+00  1.000000e+00    
    0.000000e+00  1.000000e+00
    
  • desgin.con

    /NumWaves 2
    /NumContrasts 2
    /PPheights 1 1
    /Matrix
    1 -1
    -1 1
    
    /ContrastName1    con > pat
    /NumWaves 2
    /NumContrasts 1
    /PPheights        1.000000e+00
    /RequiredEffect       2.819
    
    /Matrix
    1.000000e+00 -1.000000e+00 
    

B - Extracting brain information: fslvbm_1_bet

脑组织提取

  • get default BET behaviour

    fslvbm_1_bet -b
    
  • if your images include a lot of neck (which most of the time confounds混淆 the BET preprocessing).

    fslvbm_1_bet -N
    

C - Creating the template: fslvbm_2_template

fast && flirt && fnirt ➜ 创建特定于研究的对称灰质模板

  • create a template based on an affine registration of GM images to the GM ICBM-152 template (After flirt)

    fslvbm_2_template -a   
    
  • create a template based on a non-linear registration (After fnirt)

    fslvbm_2_template -n
    

    Once this is completed, CHECK the "template_GM_4D" image in struc with the movie loop in fslview.

D - Processing the native GM images: fslvbm_3_proc

将所有灰质图像注册到模板,使用不同的内核大小调整和平滑它们 ➜ 运行初始GLM分析进行定性评估(统计分析组间差异)

  • By default fslvbm_3_proc concatenates the images in alphabetical order (following the names that they started with); make sure this matches the subject ordering assumed in your design.mat model.

    fslvbm_3_proc
    

    Please do not forget the final CHECK of the 4D image of modulated registered GM images "GM_mod_merg" using the movie loop in fslview.

    $FSLDIR/bin/fslvbm_3_proc. shell脚本中, 采用cat命令配合EOF符号生成了另两个脚本: fslvbm3a 和fslvbm3b . 值得一提的是, 这里采用fsl_sub命令调用并行计算进行计算加速. 但是这个命令是基于Sun grid cluster的, 所以对于普通的台式机, 或者工作站, 建议将这一步去掉, 直接运行fslvbm3a或者fslvbm3b.

E - Obtaining and displaying your FSL-VBM results

randomise 使用置换(permutation)测试进行体素GLM分析

  • E1 - Running randomise and displaying TFCE-based thresholding results

    1.为基于TFCE的分析选择最合适的平滑(例如,sigma = 3mm)。 如果要应用与已应用的平滑不同的平滑,可以使用以下方法(例如,sigma = 3.5mm):

    fslmaths GM_mod_merg -s 3.5 GM_mod_merg_s3.5
    

    2.选择了最合适的平滑(例如sigma = 3mm)后,运行randomise,例如:

    randomise -i GM_mod_merg_s3 -m GM_mask -o fslvbm -d design.mat -t design.con -T -n 5000
    
    randomise -i <4D_input_data> -o <output_rootname> -d design.mat -t design.con -m <mask_image> -n 500 -D -T
    
    参数说明:
    -D 如果没有对设计矩阵中的均值进行建模,需要附加此参数,在执行randomise前demean数值
    -T 即使用TFCE(无阈值集群增强,threshold-free cluster Enhancement)
    -V 设置方差平滑的sigma数值
    

    终端推荐指令:

    randomise -i GM_mod_merg_s3 -o GM_mod_merg_s3 -m GM_mask -d design.mat -t design.con -n 5000 -T -V
    

    3.可以在FSLView中查看(1-p)校正的p值图像:

    fslview $FSLDIR/data/standard/MNI152_T1_2mm fslvbm_tfce_corrp_tstat1 -l Red-Yellow -b 0.949,1
    
  • E2 - Running randomise and displaying cluster-based thresholding results

    不推荐此方式

    1.一旦为基于集群的校正选择了最合适的平滑(例如sigma = 3mm)和阈值(例如t> 2.3),然后将它们输入完整的randomise运行,例如:

    randomise -i GM_mod_merg_s3 -m GM_mask -o fslvbm -d design.mat -t design.con -c 2.3 -n 5000
    

    2.将“_clustere_corrp_”图像(校正的p值映射)设置为0.95,以仅保留重要的集群并使用它来屏蔽相应的tstats映射:

    fslmaths fslvbm_clustere_corrp_tstat1 -thr 0.95 -bin mask_pcorrected
    fslmaths fslvbm_tstat1 -mas mask_pcorrected fslvbm_tstat1_corrected
    

    3.fslview展示·template_GM或MNI152模板,例如:

    fslview $FSLDIR/data/standard/MNI152_T1_2mm fslvbm_tstat1_corrected -l Red-Yellow -b 2.3,4
    

SIENA & SIENAX

SIENA: Two-Time-Point Estimation

SIENA是针对大脑变化的单时间点(“横截面”)和双时间点(“纵向”)分析的包,特别是萎缩(脑组织的体积损失)的估计。

"Siena估计"在`不同时间点拍摄同一受试者的两个输入图像之间的脑容量变化百分比` (PBVC, percentage brain volume change) .它调用一系列FSL程序从两个图像中剥离非脑组织,记录两个大脑(在注册期间头骨用于保持缩放常数的约束下)并分析两次之间的大脑变化点。还可以以允许多主体体素统计测试的方式将体素萎缩测量投射到标准空间中。 FSL5提供了心室分析的扩展。
SIENA。用SIENA [Smith 2001,Smith 2002](FSL [Smith 2004]的一部分)`估计两时间点百分比脑容量变化`。 SIENA首先从两个时间点的全头输入数据中提取脑部和颅骨图像[Smith 2002b]。然后将两个大脑图像彼此对齐[Jenkinson 2001,Jenkinson 2002](使用颅骨图像来约束配准缩放);两个脑图像都被重新采样到两者之间的空间。接下来,进行组织类型分割[Zhang 2001]以找到脑/非脑边缘点,然后在这些边缘点估计垂直边缘位移(在两个时间点之间)。最后,将平均边缘位移转换为两个时间点之间脑容量变化百分比的(全局)估计。
SIENA Usage
siena <input1> <input2>
-o <output-dir> : 设置输出目录(默认输出为<input1> _to_ <input2> _siena)
-d : debug(不删除中间文件)
-B "bet options" :如果您想更改下注默认值,请在使用-B标志后将BET选项置于双引号内。
                  例如,要增加大脑估计的大小,请使用:-B"-f 0.3" (-f <threshold>)
-2 : 两类分割(不分别分割灰色和白色物质) - 如果灰度/白色对比度较差,请使用此功能
-t2: 告诉FAST输入图像是T2加权的而不是T1
-m : 使用`标准空间`掩膜(如果证明难以从BET获得可靠的大脑分割,例如,如果眼睛很难分割出来)
     - 注册到标准空间以使用预定义标准空间脑部掩膜
-t <t>: 在MNI152 / Talairach空间中从t(mm)向上忽略 
        - 如果你需要忽略头部的顶部(例如,如果某些受试者缺少顶部并且你需要在受试者间保持一致)
-b <b>: 在MNI152 / Talairach空间中向下忽略b(mm); b应该是-ve
-S "siena_diff options" : 如果要向siena_diff程序发送选项(估计两个对齐图像之间的变化),
                          请在-S标志之后将这些选项放在双引号中。
                          例如,要告诉siena_diff以更多的迭代次数运行FAST分段,请使用-S"-s -i 20"
-V                    : 执行心室分析VIENA
-v <mask image>       : 可选的用户提供的心室掩膜(默认为$FSLDIR/bin/MNI152_T1_2mm_VentricleMask)
SIENA Step
1.bet on the two input images(提取脑组织) ➜ 提取的大脑,二元脑掩模和颅骨图像

2.siena_flirt(对两个脑图像配准):pairreg → 将最终变换解构为两个中间变换,这两个变换将两个脑图像放入两者之间的空间中(均匀化),这样它们都会遭受相同数量的插值相关模糊 
➜ 显示配准质量的多切片gif图片(其中一个转换图像作为背景,另一个转换图像的边缘叠加为红色)

3.0 siena_cal(为了略微提高siena_diff程序的准确性,执行此自校准脚本):在其中一个输入图像上相对于其自身的缩放版本运行siena_diff,其中缩放是预先确定的

3.1 siena_diff(对配准的脑部图像进行变化分析):将组织分割fast应用于第一个脑图像。在报告为脑和非脑(包括内部脑 - 脑脊液边界)之间的边界的所有点处,计算脑表面在两个时间点之间移动的距离。
    基于两个1D向量的子体素相关(匹配)来计算脑边缘的这种运动(垂直于局部边缘);这些是从3D图像中获取的,表面点两侧的固定距离,并垂直于它,并且在相关之前进行区分,允许两个原始图像中的一些变化。计算平均垂直表面运动并转换为PBVC。
为了在`平均垂直边缘运动`和`PBVC`之间进行这种转换,有必要假设真实脑表面区域,估计边缘点数量和真实脑容量之间存在某种关系。
可以针对一般图像估计该数量,但是将根据切片厚度,图像序列类型等而变化,从而在最终PBVC中导致小的缩放误差。
为了纠正这个问题,应用自校准,其中siena调用siena_cal。该脚本在其中一个输入图像上相对于其自身的缩放版本运行siena_diff,其中缩放是预先确定的(因此已知)。
因此,`最终的PBVC是预先已知的`,并且可以将估计值与此进行比较以获得当前图像的`校正因子`。这是针对输入图像和平均值进行的,以给出要输入siena_diff的校正因子。
SIENA Output

在SIENA输出目录中创建的文件是:

report.siena # SIENA日志,包括最终的PBVC估计
report.html  # 网页报告,包括显示分析的各个阶段的图像,最终结果和SIENA方法的描述
A_halfwayto_B_render  # 叠加在halfway A图像上的边缘运动的彩色渲染图像
                      # 红黄色表示脑容量增加,蓝色表示脑容量减少(“萎缩”)
A_and_B.gif  # 显示配准结果的gif图像,使用一个变换图像作为背景,另一个作为彩色边缘前景
A_to_B.mat   # 使用脑和颅骨图像, 将A转换为B
B_to_A.mat   # 使用脑和颅骨图像, 将B转换为A
A_halfwayto_B.mat和B_halfwayto_A.mat  # 将图像转换到中途位置的转换

心室扩展 - VIENA(在FSL5中,引入了由-V选项调用的心室选项)

siena/viena/
reportviena.html  心室报告
SIENAX: Single-Time-Point Estimation
Sienax根据单个图像`估算脑组织总体积`,并根据颅骨大小进行标准化。它称之为一系列FSL程序:它首先剥离非脑组织,然后使用大脑和颅骨图像来估计受试者图像和标准空间之间的比例。然后,它运行组织分割以估计脑组织的体积,并将其乘以估计的比例因子,以减少受试者之间的头部尺寸相关的变异性。
SIENAX。使用SIENAX [Smith 2001,Smith 2002](FSL的一部分[Smith 2004])`估计针对受试者头部尺寸标准化的脑组织体积`。 SIENAX首先从单个全头输入数据中提取脑部和颅骨图像[Smith 2002b]。然后将脑图像仿射登记到MNI152空间[Jenkinson 2001,Jenkinson 2002](使用颅骨图像确定登记缩放);这主要是为了获得体积比例因子,用作头部尺寸的标准化。接下来,进行具有部分体积估计的组织型分割[Zhang 2001]以计算脑组织的总体积(包括灰质,白质,外周灰质和心室脑脊液的体积的单独估计)。
SIENAX Usage
sienax <input>
-o <output-dir> : set output directory (the default output is <input>_sienax)
-d : debug (don't delete intermediate files)
-B "bet options" : if you want to change the BET defaults, put BET options inside double-quotes after using the -B flag. 
                   For example, to increase the size of brain estimation, use: -B "-f 0.3"
-2: two-class segmentation (don't segment grey and white matter separately) ;
    use this if there is poor grey/white contrast
-t2: tell FAST that the input images are T2-weighted and not T1
-t <t>: ignore from t (mm) upwards in MNI152/Talairach space; 
        if you need to ignore the top part of the head (e.g. if some subjects have the top missing and you need consistency across subjects)
-b <b>: ignore from b (mm) downwards in MNI152/Talairach space; 
        b should probably be -ve
-r: tell SIENAX to estimate "regional" volumes as well as global; this produces peripheral cortex GM volume (3-class segmentation only) and ventricular CSF volume 告诉SIENAX估计“区域”数量如同全局数量;这会产生外周皮质GM体积(仅3级分割)和心室脑脊液体积
-lm <mask>: use a lesion (or lesion+CSF) mask to remove incorrectly labelled "grey matter" voxels 使用病变(或病变+ CSF)掩膜去除错误标记的“灰质”体素
-S "FAST options" : if you want to change the segmentation defaults, put FAST options inside double-quotes双引号) after using the -S flag. For example, to increase the number of segmentation iterations use: -S "-i 20"
SIENAX Step
1. bet on the single input image ➜ extracted brain, and the skull image. If you need to call BET with a different threshold than the default of 0.5, use -f <threshold>.
2. pairreg (which uses the brain and skull images to carry out constrained registration)
MNI152标准脑部是目标(reference).因此,与两时间点萎缩一样,大脑被配准(这次指向标准大脑),再次`使用头骨作为缩放约束`.因此,脑组织体积估计将相对于“标准化”头骨尺寸.
(忽略"Warning":难以在直方图中找到强大的限制”消息;这是因为FLIRT对头骨图像的不寻常直方图不太满意,但在这种情况下无需担心。)
请注意,以后的所有步骤都是实际上是对`原始(经过剥离的)输入图像`进行的,而不是配准后的输入图像;这样就不需要重新采样原始图像(重采样会引入模糊)。
相反,为了利用上述归一化("标准化"),在报告为最终归一化脑容量之前,通过从归一化变换导出的`缩放因子`来缩放脑容积
3. 标准脑图像掩模(源自MNI152并略微扩张)被`转换成原始图像空间`(通过反转上述发现的归一化变换)并应用于脑图像。这有助于确保原始大脑提取不包括诸如眼球等伪影。
现在使用fast在大脑掩膜上运行分割。如果存在合理的灰白对比度,则单独报告灰质和白质体积,以及总脑容量(这是默认行为)。
否则(即,如果使用-2选项调用sienax),则仅执行脑/CSF/背景分割,并且仅报告脑容量。
在报告之前,如上所述,通过标准化比例因子来缩放所有体积,以便相对于标准化的头骨尺寸报告所有受试者的体积("归一化")。
SIENAX Output
report.sienax # SIENAX日志,包括最终的卷估计
report.html   # 网页报告,包括显示分析的各个阶段的图像,最终结果和SIENAX方法的描述
I_render      # 颜色渲染图像,显示叠加在原始图像顶部的分割输出
Voxelwise SIENA Statistics

扩展SIENA以允许跨受试者("与模板对齐")的萎缩的体素统计分析

这为每个受试者采用SIENA派生的边缘“flow图像”(时间点之间的边缘位移),扭曲这些以与标准空间边缘图像对齐,然后进行体素横向受试者统计分析以识别脑边缘点,例如,对于整个受试者组,或者萎缩与年龄或疾病进展显着相关时,萎缩显着。

Voxelwise多受试者SIENA统计。首先,SIENA针对每个受试者单独运行。接下来,对于每个受试者,边缘位移图像(在脑/非脑边缘点处编码,两个时间点之间的向外或向内边缘变化)被扩张,转化为MNI152空间,并被标准MNI152空间脑边缘图像标记。通过这种方式,边缘位移值被翘曲到标准的脑边缘[Bartsch 2004]。接下来,将来自所有受试者的所得图像进行体素统计分析以测试.....
Voxelwise SIENA Usage

Step1

siena A B   # on all subjects' two-timepoints data (here A and B).
cd <siena_output_directory>
siena_flow2std A B  # For each subject

运行flirt生成到标准空间的变换(如果它还不存在),使用由siena生成的边缘flow(萎缩)图像,将其dilates扩展几次(以“加厚”此边缘flow图像),转换至标准空间以及带有标准空间边缘蒙版的mask掩膜。在remasking之前使用默认的half-width 5mm的高斯滤波器对其进行平滑处理。如果要更改平滑,请使用-s选项;如果完全关闭,将平滑设置为零。

Step2

fslmerge -t flow_all_subjects `imglob subject_*/A_to_B_siena/A_to_B_flow_to_std*

现在,所有受试者将在标准边缘空间中具有名为A_to_B_flow_to_std的边缘flow图像。将这些合并为一个4D图像;例如,如果每个受试者的分析到目前为止都在subject_*/A_to_B_siena子目录中执行,其中*可以是主题ID或名称
注意:subjects在此命令中出现的顺序与您创建设计矩阵时所需的顺序相匹配非常重要!

您现在可以执行跨主题统计。因为上述步骤不太可能在数据中生成好的高斯分布,我们建议使用randomise。您需要生成一个FEAT风格的设计矩阵design.mat并对比文件design.con。您用于randomise的掩码图像应为${FSLDIR}/data/standard/MNI152_T1_2mm_edges

核磁数据处理之: FSL数据快视

将其中一些切片拿出来在html中批量显示, 一个NifTI文件对应一排切片图像, 这样就可以到达快速检查的目的.

$ slicesdir sample-001*

sample-001_brain_fast_seg_1
sample-001_brain_fast_seg
sample-001_brain
sample-001

Finished. To view, point your web browser at
file:/home/captain/Desktop/7_30_fsl/slicesdir/index.html

FSLeyes

Installation Tutorial

FSL的python和R语言接口

批量处理代码

  • 批量提取海马体
import os


def remove_skull(data_path, remove_skull_path):

    if not os.path.exists(remove_skull_path):
        os.makedirs(remove_skull_path)

    for root, dirs, files in os.walk(data_path):
        for file in files:
            if 'nii' in file:
                filename = file.split('.')[0]
                print("filename", filename)
                output = os.path.join(remove_skull_path, filename+'_brain')
                print("output", output)
                os.system('bet {} {} -f 0.5 -g 0'.format(os.path.join(data_path, filename), output))


def flirt(remove_skull_path, flirt_path):

    if not os.path.exists(flirt_path):
        os.makedirs(flirt_path)

    for root, dirs, files in os.walk(remove_skull_path):
        for file in files:
            if 'nii' in file:
                filename = file.split('.')[0]
                print("filename", filename)
                output_nii = os.path.join(flirt_path, filename+'_2mm.nii.gz')
                output_mat = os.path.join(flirt_path, filename + '_2mm.mat')
                print("output", [output_nii, output_mat])
                os.system('flirt -in {} -ref /usr/share/fsl/5.0/data/standard/MNI152_T1_2mm_brain -out {} -omat {} '
                          '-bins 256 -cost corratio -searchrx -90 90 -searchry -90 90 '
                          '-searchrz -90 90 -dof 12  -interp trilinear'
                          .format(os.path.join(remove_skull_path, filename), output_nii, output_mat))


def extract_Hipp(flirt_path, L_Hipp_path, R_Hipp_path):

    if not os.path.exists(L_Hipp_path):
        os.makedirs(L_Hipp_path)

    if not os.path.exists(R_Hipp_path):
        os.makedirs(R_Hipp_path)

    for root, dirs, files in os.walk(flirt_path):
        for file in files:
            if 'nii' in file:
                filename = file.split('.')[0]
                print("filename", filename)
                input_nii = os.path.join(flirt_path, filename+'.nii.gz')
                input_mat = os.path.join(flirt_path, filename + '.mat')
                print("input", [input_nii, input_mat])
                output_L = os.path.join(L_Hipp_path, filename+'_L_Hipp.nii')
                output_R = os.path.join(R_Hipp_path, filename+'_R_Hipp.nii')
                print("output_L", output_L)
                print("output_R", output_R)

                os.system('fsl5.0-first -i {} -l {} -m /usr/share/fsl/data/first/models_336_bin/L_Hipp_bin.bmv -k {}'
                          .format(input_nii, input_mat, output_L))
                os.system('fsl5.0-first -i {} -l {} -m /usr/share/fsl/data/first/models_336_bin/R_Hipp_bin.bmv -k {}'
                          .format(input_nii, input_mat, output_R))


if __name__ == '__main__':

    origin_path = '/home/xxx/Desktop/AD-fan/ADAndCN/cn'
    remove_skull_path = '/home/xxx/Desktop/AD-fan/ADAndCN/output/cn/remove_skull'
    flirt_path = '/home/xxx/Desktop/AD-fan/ADAndCN/output/cn/flirt_MNI152_T1_2mm'
    L_Hipp_path = '/home/xxx/Desktop/AD-fan/ADAndCN/output/cn/FIRST/L_Hipp'
    R_Hipp_path = '/home/xxx/Desktop/AD-fan/ADAndCN/output/cn/FIRST/R_Hipp'

    remove_skull(origin_path, remove_skull_path)
    flirt(remove_skull_path, flirt_path)
    extract_Hipp(flirt_path, L_Hipp_path, R_Hipp_path)

FAQ

  • 体素GLM分析
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,440评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,814评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,427评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,710评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,625评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,014评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,511评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,162评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,311评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,262评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,278评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,989评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,583评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,664评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,904评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,274评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,856评论 2 339