Volumetric slice plot of tomographic data

2 views (last 30 days)
I am trying to use the slice function to stack the following 79 slices and display a 3D representation of an object.
The problem is that the black regions in each image are obstructing the image of the previous slice. So, I'm only seeing the very last slice on top, rather than a meaningful volumetric presentation of the data. So, how can I include only the non-zero elements of each image in the plot?
Any suggestions would be greatly appreciated.
  3 Comments
Sordin
Sordin on 21 Apr 2017
Hi Philip, thank you for your suggestions.
I already have the inverted brightness or complement images for each of the slices (I can also make the binary images). But how can I apply an alpha mask to images based on these masks? Do you know what code I need to use?
Basically, I want the black areas (backgrounds) to be made highly transparent. While the non-zero elements of each image (containing data) are to be opaque. I think this should help in making the 3D reconstruction more recognizable in terms of the anatomical features of the patient.
This is my code (I am trying to write it myself before trying vol3d or other viewers):
for i = 1 : 39
I=imread(filename);
I(:,:,i) = imread(filename);
mask = imcomplement(I(:,:,i));
M(:,:,i) = I(:,:,i);
end
hs = slice(M,[],[],1:1:39, 'nearest');
colormap('gray');
shading interp
set(hs,'FaceAlpha',0.8);
Philip G
Philip G on 24 Apr 2017
I found a nice way to use surf images ... see my anwer.

Sign in to comment.

Accepted Answer

Philip G
Philip G on 24 Apr 2017
Edited: Philip G on 24 Apr 2017
Hi, if you do not want to use a simple isosurface or volume viewer as I suggested in my comment, every image can have an alphadata property (that can be a matrix and not only a single value), as explained here:
https://www.mathworks.com/company/newsletters/articles/image-overlay-using-transparency.html
You can extend this behavior towards 3D with the help of this:
https://de.mathworks.com/help/matlab/visualize/add-transparency-to-graphics-objects.html
For example by using surf.
One example:
img=peaks; % this is the color
t=abs(img); % this is the transparency
%t=img>1; % if you want to have a binary mask
for i=1:10
surf(img*0+i,p,'linestyle','none','alphadata',t,'facealpha','flat')
hold on
end
I hope you get the idea.

More Answers (1)

Bjorn Gustavsson
Bjorn Gustavsson on 21 Apr 2017
If you change your colour-map from black-white to white-black then you might get some mileage out of experimentations with alpha-mapping, look at the help for alphamap and alim.
HTH

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!