Read out intensites and corresponding X,Y,Z-coordinates from a 3D-image
    13 visualizzazioni (ultimi 30 giorni)
  
       Mostra commenti meno recenti
    
Hello,
this is a common problem. But there were no real answers to this question in this forum.
I have a 3D-image generated from a 3D-array - I want to get the intensity values plus their corresponding position (X,Y,Z) in a normal spreadsheet in MatLab.
Ultimately, I would get something like:
Intensity | X | Y | Z
and this for every point in the image.
Since there are millions of points it might be also a good idea to cut out points with 0 intensity.
Has somebody done something similar?
Best wishes.
0 Commenti
Risposta accettata
  Image Analyst
      
      
 il 24 Nov 2014
        
      Modificato: Image Analyst
      
      
 il 24 Nov 2014
  
      What is the size of the third dimension? If it's 3 then it can be considered a normal RGB color image and you can use impixelinfo() to see the values. If you still want it in a spreadsheet, then I suggest you extract each plane of your volumetric image in a loop and then send that to Excel. If you really, really need the x,y,z values also then I suggest you create an N by 4 array and then write out
[rows, columns, slices] = size(array3D);
array2D = zeros(numel(array3D), 4);
counter = 1;
for z = 1 : slices
    for x = 1 : columns
        for y = 1 : rows
            array2D(counter, :) = [array3D(y, x, z), x, y, z];
            counter  = counter  + 1;
        end
    end
end
xlswrite(filename, array2D);
10 Commenti
  Walter Roberson
      
      
 il 8 Mag 2016
				Hesham Shehata comments,
I tried to use this code with various types of images but i always get zero values only! can you please advise how to define the image with this code? thanks for your cooperation.
  Image Analyst
      
      
 il 8 Mag 2016
				Then your image is all zero. Obviously the x, y, and z cannot be printed as zeros - that's impossible.
Più risposte (1)
  Sean de Wolski
      
      
 il 26 Nov 2014
        load mri
D = squeeze(D);
idx = logical(D); % Where in D is nonzero?
vals = D(idx); % extract values
ind = find(idx); % linear index
[row,col,pag] = ind2sub(size(D),ind); % sub indices
xlswrite('file.xlsx',[row col pag vals])
0 Commenti
Vedere anche
Categorie
				Scopri di più su Large Files and Big Data in Help Center e File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



