問題描述:
想要了解AAL自動解剖標記圖譜與Yeo-7功能網絡之間的對應關係,即AAL圖譜90個腦區在Yeo7大網絡中的歸屬信息,比如哪個腦區屬於默認網絡、中央前回屬於哪個功能網絡…,如何將兩者對應起來。
解決辦法:
對每個 AAL 區域內的所有體素,統計其在 Yeo7 圖譜中屬於哪個網絡最多,相當於是“投票”,並將該區域標記為對應網絡(1~7)。
matlab程序:
function aal_to_yeo7_mapping()
% 將 AAL 腦圖譜的 116 個區域映射到 Yeo7 功能網絡
% 方法:對每個 AAL 區域內的體素,在 Yeo7 圖譜中統計所屬網絡頻次,
% 取出現次數最多的網絡作為該 AAL 區域的標籤(1~7)
%% 1. 設置文件路徑(·根據實際情況修改)
aal_file = 'AAL_MNI152_1x1x1.nii'; % AAL 圖譜路徑(116 個 ROI)
yeo7_file = 'Yeo-7_MNI152_1x1x1.nii'; % Yeo7 圖譜路徑(7 個網絡,標籤 1~7)
%% 2. 讀取 NIfTI 圖像數據
aal_img = niftiread(aal_file); % 讀取 AAL 圖譜 (H x W x D)
yeo7_img = niftiread(yeo7_file); % 讀取 Yeo7 圖譜 (H x W x D)
%% 3. 檢查兩個圖像尺寸是否一致
if ~isequal(size(aal_img), size(yeo7_img))
error('AAL 和 Yeo7 圖譜的空間維度不一致!請確保已配準到同一空間。');
end
%% 4. 獲取 AAL 中所有唯一標籤(排除 0,即背景)
aal_labels = unique(aal_img(aal_img > 0)); % 應為 1:116
num_aal = length(aal_labels); % 通常為 116
%% 5. 初始化結果數組:存儲每個 AAL 區域對應的 Yeo7 網絡編號
aal_yeo7_network = zeros(num_aal, 1); % 長度 116,初始為 0
%% 6. 遍歷每個 AAL 區域
for i = 1:num_aal
current_label = aal_labels(i); % 當前 AAL 標籤(如 1, 2, ..., 116)
% 找出當前 AAL 區域的所有體素位置(邏輯索引)
mask = (aal_img == current_label); % 與 aal_img 同尺寸的邏輯矩陣
% 提取這些位置在 Yeo7 圖譜中的值
yeo7_values_in_region = yeo7_img(mask); % 一維向量,包含該區域內所有 Yeo7 標籤
% 過濾掉可能的 0(雖然 Yeo7 通常無 0,但安全起見)
yeo7_values_in_region = yeo7_values_in_region(yeo7_values_in_region > 0);
% % 如果該區域沒有有效體素,跳過或報錯
% if isempty(yeo7_values_in_region)
% warning('AAL 區域 %d 無有效體素,跳過。', current_label);
% aal_yeo7_network(i) = NaN;
% continue;
% end
% 統計每個 Yeo7 網絡(1~7)出現的次數
% 使用 histcounts,bins 為 0.5,1.5,...,7.5 確保整數分箱
edges = 0.5:1:7.5; % 分箱邊界:[0.5,1.5), [1.5,2.5), ..., [6.5,7.5]
counts = histcounts(yeo7_values_in_region, edges);
% 找出出現次數最多的網絡編號(若有並列,取最小編號)
[~, max_idx] = max(counts); % max_idx 是 1~7 對應的索引
dominant_network = max_idx; % 因為 edges 從 0.5 開始,max_idx 直接對應網絡 1~7
% 保存結果
aal_yeo7_network(i) = dominant_network;
% 可選:打印進度
fprintf('AAL %3d -> Yeo7 Network %d\n', current_label, dominant_network);
end
%% 7. 保存結果到 .mat 文件(便於後續使用)
save('AAL_to_Yeo7_Network_Labels.mat', 'aal_yeo7_network', 'aal_labels');
fprintf('\n 映射完成!結果已保存至 AAL_to_Yeo7_Network_Labels.mat\n');
%% 8. 顯示統計摘要
network_names = {'Visual', 'Somatomotor', 'Dorsal Attention', ...
'Ventral Attention', 'Limbic', 'Frontoparietal', 'Default'};
fprintf('\n各網絡包含的 AAL 區域數量:\n');
for net_id = 1:7
count = sum(aal_yeo7_network == net_id);
fprintf(' 網絡 %d (%s): %d 個區域\n', net_id, network_names{net_id}, count);
end
% 打印各個腦區所對應的Yeo7網絡
% 將AAL標籤和每個腦區的歸屬網絡編號合併為一個 116x2 的數組
combinedArray = [aal_labels, aal_yeo7_network];
% 打印合並後的數組
fprintf('\n\n各個腦區對應的功能網絡:\n');
disp(combinedArray);
end
運行結果:
各網絡包含的 AAL 區域數量:
網絡 1 (Visual): 46 個區域
網絡 2 (Somatomotor): 13 個區域
網絡 3 (Dorsal Attention): 2 個區域
網絡 4 (Ventral Attention): 9 個區域
網絡 5 (Limbic): 19 個區域
網絡 6 (Frontoparietal): 9 個區域
網絡 7 (Default): 18 個區域
各個腦區對應的功能網絡:
AAL Yeo
1 2
2 2
3 7
4 7
5 5
6 5
7 6
8 6
9 6
10 6
11 4
12 6
13 6
14 6
15 7
16 7
17 2
18 2
19 4
20 2
21 5
22 5
23 7
24 7
25 7
26 7
27 5
28 5
29 4
30 4
31 7
32 7
33 4
34 4
35 7
36 7
37 5
38 1
39 5
40 5
41 5
42 5
43 1
44 1
45 1
46 1
47 1
48 1
49 1
50 1
51 1
52 1
53 1
54 1
55 1
56 1
57 2
58 2
59 3
60 3
61 6
62 6
63 4
64 4
65 7
66 7
67 7
68 7
69 2
70 2
71 5
72 5
73 4
74 1
75 1
76 1
77 1
78 1
79 2
80 2
81 2
82 2
83 5
84 5
85 7
86 7
87 5
88 5
89 5
90 5
91 1
92 1
93 1
94 1
95 1
96 1
97 1
98 1
99 1
100 1
101 1
102 1
103 1
104 1
105 1
106 1
107 1
108 1
109 1
110 1
111 1
112 1
113 1
114 1
115 1
116 1
注意:
由於Yeo7功能網絡的標準版本只關注大腦,並不包含小腦,所以AAL腦區中91~116腦區(小腦部分)的劃分結果可以捨棄,一般的研究也很少專門關注小腦部分。
本文章為轉載內容,我們尊重原作者對文章享有的著作權。如有內容錯誤或侵權問題,歡迎原作者聯繫我們進行內容更正或刪除文章。