Ho un'immagine 3D, divisa in regioni contigue in cui ogni voxel ha lo stesso valore. Il valore assegnato a questa regione è unico per la regione e funge da etichetta. L'immagine esempio seguente descrive il caso 2D:MATLAB identifica le regioni adiacenti nell'immagine 3D
1 1 1 1 2 2 2
1 1 1 2 2 2 3
Im = 1 4 1 2 2 3 3
4 4 4 4 3 3 3
4 4 4 4 3 3 3
voglio creare un grafico che descrive adjaciency tra queste regioni. Nel caso di cui sopra, questo sarebbe:
0 1 0 1
A = 1 0 1 1
0 1 0 1
1 1 1 0
Sto cercando una soluzione rapida per fare questo per le grandi immagini 3D in MATLAB. Ho trovato una soluzione che itera su tutte le regioni, che prende lo 0.05s
per iterazione - sfortunatamente, questo richiederà più di mezz'ora per un'immagine con 32'000 regioni. Qualcuno ora è un modo più elegante per farlo? Sto postando l'algoritmo corrente al di sotto:
labels = unique(Im); % assuming labels go continuously from 1 to N
A = zeros(labels);
for ii=labels
% border mask to find neighbourhood
dil = imdilate(Im==ii, ones(3,3,3));
border = dil - (Im==ii);
neighLabels = unique(Im(border>0));
A(ii,neighLabels) = 1;
end
imdilate
è il collo di bottiglia vorrei evitare.
Grazie per il vostro aiuto!
File MEX? Illuminazione veloce .... – kkuilla
Grazie per il suggerimento. Sembra che l'imdilate sia già implementato in un file MEX, però! – Lisa