我现在有一个影像文件,我想计算它的体积,应用fsl和matlab结果不一样

老师好!我现在计算一个经过fsl分割后的白质文件,想用他计算一下体积,这里先问一个问题,计算体积是否一定要用分割后的文件?这样体素中的复制会是0-1的值,还是说用没有任何处理过得原始文件也可以进行计算体积?
下面是FSL和matlab的代码,麻烦老师看一下是否计算的原理不同?

fslstats image.nii.gz -V
% 提取体积
clear; clc;
% 指定文件路径
file_path = 'H:\I180310_wm_fnirt.nii.gz';
% 计算体积
TIV = calcTIV(file_path);
% 显示结果
fprintf('TIV: %.2f cm^3\n', TIV);
% 定义计算体积的函数
function TIV = calcTIV(filepath)
    % 读取nii.gz文件并解压缩
    gunzip(filepath);
    unzipped_file = strrep(filepath, '.gz', '');
    % 读取nifti图像
    V = spm_vol(unzipped_file);
    % 计算体积
    TIV = getVolume(V);
    % 删除解压缩的文件
    delete(unzipped_file);
end
function volume = getVolume(V)
    tot = 0;
    for i = 1:V.dim(3)
        img = spm_slice_vol(V, spm_matrix([0 0 i]), V.dim(1:2), 0);
        img = img(isfinite(img)); % 排除非有限值
        tot = tot + sum(img(:));
    end
    voxvol = abs(det(V.mat)); % 体素的体积,以立方毫米为单位
    volume = tot * voxvol / 1000; % 转换为立方厘米
end

麻烦老师了

你给出的FSL代码错误,这个代码只考虑了图像的体素个数,没有考虑体素里的值。正确的做法官网上有写:https://fsl.fmrib.ox.ac.uk/fsl/docs/#/structural/fast?id=tissue-volume-quantification,即:

## 单位为体素
fslstats structural_bet_pve_1 -M -V | awk '{ print $1 * $3 }'
## 单位为mm^3
fslstats structural_bet_pve_1 -M -V | awk '{ print $2 * $3 }'

Matlab的代码我没看,如果你用FSL进行组织分割,最好还是用FSL的命令来计算体积。不同软件混用有时候有难以察觉的问题,虽然当前这个情况应该没问题。