ReHo的计算公式
- 将每个体素的时间序列的值进行等级排列,例如按照值从小到大的顺序进行排列,得到排列等级序列
- 计算27邻域内每个时间点上的等级之和Ri
- 计算平均的等级之和R_mean
- 计算等级之和的方差S
- 计算肯德尔和谐系数KCC=12*S/k^2(t^3-t),k是27邻域内实际的体素数,t是BOLD信号的时间点数
Matlab代码
rank = zeros(n,1800); %初始化存储BOLD信号排列等级的rank矩阵,维度为体素数x时间点数
%对每个体素的BOLD信号进行排列%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for n2 = 1:1:n
data = zeros(1,1800); %初始化存储体素的时间序列的矩阵
data_temp(1,:) = data(n2,:); %读取BOLD序列
[~,I] = sort(data_temp); %对data进行升序排列,I存储原矩阵中的位置信息
for i = 1:1:1800 %遍历位置索引矩阵I
rank(n2,I(i)) = i; %存储BOLD信号排序位置
end
end
%对每个体素的BOLD信号计算ReHo%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for n2 = 1:1:n_nonzero %在mask的坐标里循环
R_27 = zeros(27,1800); %计算邻接的27个体素的ReHo,边界体素的邻接体素可能少于27个
counter = 0; %邻接体素计数变量counter
for n3 = 1:1:27
if index_adjacent_27(n2,n3) > 0 %排除0
R_27(counter,:) = rank(index_adjacent_27(n2,n3),:); %提取邻接27体素的排序位置
counter = counter+1;
end
end
R = sum(R_27,1); %行向量求和,得到1x1800行向量,存的是每个时刻点的秩和
R_sum = sum(R); %得到总的秩和
R_mean = R_sum/1800; %除以秩的数量(时间点数),得到平均秩和
S = sum((R-R_mean).^2); %得到秩的方差
KCC = (12*S)/(counter^2*(1800^3-1800)); %计算KCC系数
ReHo(n2) = KCC; %把ReHo值存入数组
end
ReHo_mean = mean(ReHo_); %计算ReHo全脑均值
ReHo = ReHo./ReHo_mean; %ReHo除以全脑均值