Trying to add color gradient to patch(isosurface))
    8 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    Simon Penninag
 el 1 de Mzo. de 2021
  
    
    
    
    
    Comentada: Simon Penninag
 el 2 de Mzo. de 2021
            Hi all,
im currently trying to visualize a pressure field in a 3D voxel field of a 32x32x32 image.
The way this currently works is through using patch(isosurface()) as is shown in the code below.
image = rand(32,32,32); 
filtered = imgaussfilt3(image,2.5);  
BW = imbinarize(filtered,0.517);   
patch(isosurface(BW),'FaceColor','white','EdgeColor','black')

The image above is what it produces.
What it does is plot the contour of the 1's and leave empty the 0's but I want it to do something else. The 1 values are going to be replaced by pressure field values (1 to 33) and I want the white+black contour to change into a color gradient. So far I couldnt get any colormap to do this. Is this even possible?
0 comentarios
Respuesta aceptada
  darova
      
      
 el 2 de Mzo. de 2021
        Here is an example (not tested)
% BW - is your 01 3d matrix
% A - is your color value matrix (0-33)
cm = jet(33);           % colormap
fv = isosurface(BW,0.9);
fv.facevertexcdata = cm(A(:),:);        % get color according to 0-33
patch(fv,'facecolor','interp')
3 comentarios
  darova
      
      
 el 2 de Mzo. de 2021
				Everything is ok. I understood correctly. Here are corrections
% BW - is your 01 3d matrix
% A - is your color value matrix (0-33)
cm = jet(34);                                   % colormap
fv = isosurface(BW,0.9);                        % extract patch data
[m,n,k] = size(A);              
[x,y,z] = meshgrid(1:m,1:n,1:k);                % mesh 
v1 = fv.vertices;       
A1 = griddata(x,y,z,A,v1(:,1),v1(:,2),v1(:,3)); % interpolate A data (0-33) for x y z position
ind = 1 + round(A1);                            % indices
fv.facevertexcdata = cm(ind,:);                 % get color according to 1-34
patch(fv,'facecolor','interp')
Más respuestas (1)
  ANKUR KUMAR
      
 el 1 de Mzo. de 2021
        Not sure about the exact what you wish to plot. But you can give it a try to plot using imagesc, use the gray colormap to plot.
imagesc(nanmean(filtered,3)
colorbar
colormap(gray)

Ver también
Categorías
				Más información sobre Color and Styling en Help Center y File Exchange.
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!




