You are now following this question
- You will see updates in your followed content feed.
- You may receive emails, depending on your communication preferences.
how can I convert 2d images to a 3d image?
27 views (last 30 days)
Show older comments
I have a CT scan file with 51 slices...how can I make a 3d image with this 51 slices?
Is there any toolbox in matlab for this?
I attached this file.
7 Comments
Salaheddin Hosseinzadeh
on 14 Sep 2014
Hi Sara,
There is no file attached!
There are imbedded functions in Matlab for CT files,but I'm afraid I don't know those functions.
I need to perform 3D reconstruction, except I don't have CT files, slices are produced in a different fashion.
sara
on 15 Sep 2014
hi Salaheddin Excuse me ... I was so tired when I wrote answer for you ..yes you are right There is no file attached... now I want to attach this but because the size of this file is bigger than 5 mb, I upload it in 4 file... thanks
Walter Roberson
on 14 Oct 2015
The 4th did not get attached.
Accepted Answer
Image Analyst
on 14 Sep 2014
You can use cat()
image3d = cat(3, slice1, slice2, slice3, slice4);
or in a loop where you read in each slice
array3d = zeros(rows, columns, numberOfSlices);
for slice = 1 : numberOfSlices
filename = spritnf('image #%d', slice);
fullFileName = fullfile(folder, filename);
if exist(fullFileName, 'file)
thisSlice = imread(fullFileName);
array3d(:,:,slice) = thisSlice;
end
end
or if you don't know the number of slices in advance,
thisSlice = imread(filename);
if slice == 1
array3d = thisSlice
else
array3d = cat(3, array3d, thisSlice);
end
24 Comments
Salaheddin Hosseinzadeh
on 14 Sep 2014
Hi Image Analyst,
I have some sort of a similar problem, except that I don't really have CT images, I've something that represents slices from different angles. I'm supposed to do a 3D reconstruction on 2D figures, and produce a 3D one.
I contacted you before, asking for help and provided some further info.
I'll appreciate if you roughly explain what to search for, in MATLAB.
Many thanks,
Salah
Image Analyst
on 14 Sep 2014
Well essentially that's what CT is - building up a 3D volumetric image from projections at different angles. I took a semester class in graduate school on 3D reconstruction of MRI and CT from projections. The math is pretty challenging - radon transforms and filtered back projection, etc. The guys who discovered it actually won a Nobel Prize in Medicine for it in 1979. Usually though it's not something you need to know the details of because the CT instrument does the reconstruction for you. If you want to try it yourself in MATLAB you'll need the radon() function and need to study up on the math. The more slices you have the better the reconstruction. Here's a tutorial: http://wn.com/filtered_back_projection and another one
Salaheddin Hosseinzadeh
on 15 Sep 2014
Edited: Salaheddin Hosseinzadeh
on 15 Sep 2014
Thanks so much Image Analyst.
I'll have a look at the links, soon I gonna get involve in this and may get back to you gain.
Please don't remove your comment.
Many Regards,
SH
sara
on 18 Sep 2014
hi Salaheddin Hosseinzadeh
I think we should do cat() step by step for example use cat() for 4 images and then the result of this will use with 3 slices after this...because if you attention to it you can see the slices that are Respectively have a simple changes...but when you want to do it for 44 slices the angles are changed and result is not good.. I didn't try this and it is just an idea ....
Image Analyst
on 18 Sep 2014
I didn't understand what you're trying to say. My understanding is that sara has 2D slice images that are already reconstructed and she merely needs to stack them along one dimension, while Salaheddin has 2D images that are projections of the volume along different angles. Hence, Salaheddin cannot simply stack the images along one dimension to get a complete 3D volume. His images must actually undergo a filtered back projection reconstruction process to build the 3D image from the images taken at different angles (that's essentially how CT works).
Xiaoli
on 19 Oct 2016
I have the same problem as Sara. I used the cat function to stack the image. How do I view this stacked image. inshow3D does not work. Also does the cat function acutally create a 3D image (like change the pixel to voxels)? I have several binary images where 0 is solid and 1 is pore(empty space), so I want to combine the images to be able to calculate the volume of the pores.
Walter Roberson
on 19 Oct 2016
Xiaoli, you can
implay(array3d)
if you want to view the different slices as if they were different times.
You can also use the vol3d File Exchange contribution to visualize as a volume, but to get that to work you might need to use
vol = permute(array3d, [1 2 4 3]);
vol3d('CData', vol(:,:,[1 1 1],:) )
This converts the N x M x P to N x M x 3 x P
Also does the cat function acutally create a 3D image
Yes, under the assumption that the layers are all aligned properly, which is not always the case.
I want to combine the images to be able to calculate the volume of the pores.
When you do volume or area calculations, you need to be careful, because the different directions are not necessarily to the same scale. The X and Y directions are very likely square pixels (not always), but it is common for the Z direction to have a different spacing than the X and Y. If you are using DICOM files, you can read out the slice thickness; see https://www.mathworks.com/matlabcentral/answers/224190-how-can-i-get-that-the-thikness-of-one-slice-of-a-ct-image-is-measured-at-the-milimeter-level#answer_183101
Nawal SRHIRI
on 13 Apr 2019
Edited: Image Analyst
on 14 Apr 2019
I have the same problem (a CT scan file with 255 slices) How can I make a 3d image with these 255 slices?
The 'cat' function doesn't work.
Walter Roberson
on 13 Apr 2019
Nawal SRHIRI, what is size() of each of your slices ? Are they each 2 dimensional (grayscale) or are they RGB (and so 3 dimensional) ?
Are all of your slices the exact same size?
Image Analyst
on 14 Apr 2019
Nawal SRHIRI, did your fisk file images come from JPG images? If so there is a good change they are RGB images even though they appear as gray scale. Try this code:
% Read in demo image.
grayImage = imread(fullFileName);
% Get the dimensions of the image.
[rows, columns, numberOfColorChannels] = size(grayImage)
if numberOfColorChannels > 1
grayImage = grayImage(:, :, 1);
end
Why did the cat() function did not work? Did it throw an error? If so, tell us ALL THE RED TEXT.
Nawal SRHIRI
on 15 Apr 2019
Edited: Nawal SRHIRI
on 15 Apr 2019
Walter Roberson, the size () of each slice is 512x512 int16, they are the same size
Nawal SRHIRI
on 15 Apr 2019
Edited: Nawal SRHIRI
on 15 Apr 2019
using this code :
% Read in demo image.
grayImage = imread(fullFileName);
% Get the dimensions of the image.
[rows, columns, numberOfColorChannels] = size(grayImage)
if numberOfColorChannels > 1
grayImage = grayImage(:, :, 1);
end
I have the following error:
Error using imread (line 347)
Cannot open file "C:\Users\User\Desktop\PFE\pro" for reading. You might not have read permission.
then i try this cod:
image_folder ='C:\Users\User\Desktop\PFE\base de données\DICOM\PA0\ST0\SE5';
filenames = dir(fullfile(image_folder, '*.jpg'));
% Get the dimensions of the image.
[rows, columns, numberOfColorChannels] = size(filenames)
if numberOfColorChannels > 1
grayImage = grayImage(:, :, 1);
end
>> cat(3,1,2,3,4,5,6,7,8,9);
but I can not build a 3d image
using this:
>> cat(3,1.jpg,2.jpg,3.jpg,4.jpg,5.jpg,6.jpg,7.jpg,8.jpg,9.jpg);
cat(3,1.jpg,2.jpg,3.jpg,4.jpg,5.jpg,6.jpg,7.jpg,8.jpg,9.jpg);
I have this :
|
Error: Unexpected MATLAB expression.
Did you mean:
>> cat(3,1.j*pcg,2.j*pcg,3.j*pcg,4.j*pcg,5.j*pcg,6.j*pcg,7.j*pcg,8.j*pcg,9.j*pcg);
Error using pcg (line 60)
Not enough input arguments.
Walter Roberson
on 15 Apr 2019
image_folder ='C:\Users\User\Desktop\PFE\base de données\DICOM\PA0\ST0\SE5';
dinfo = dir(fullfile(image_folder, '*.jpg'));
filenames = fullfile(image_folder, {dinfo.name});
num_image = length(filenames);
all_images = [];
for K = 1 : num_image
this_image = imread(filenames{K});
if ndims(this_image) > 2
this_image = this_image(:,:,1);
end
if K == 1
[rows, columns] = size(this_image);
all_images = zeros(rows, colums, num_image);
end
all_images(:,:,K) = this_image;
end
Image Analyst
on 15 Apr 2019
You can't put wildcards into cat(). Even if you didn't have the *, you still forgot to enclose the strings in single quotes. Just try the code by Walter.
Nawal SRHIRI
on 16 Apr 2019
Walter Roberson, i try the code but i have the following error
Error using imread (line 362)
Unable to determine the file format.
Walter Roberson
on 16 Apr 2019
I notice that your directory name talks about Dicom. Are you trying to read dicom files this way?
Patil Ravindra kyung hee university
on 8 Sep 2021
hello, i am trying to create a 3D image from 12 images which I take in different angle, e.g. 1 image at 30 degree ,2nd image at 60 degree... i tried cat function to create a volume but it is not making 3D images. it just staging my images like slices but my images are in diffrent angle. Can anyone please help me to make 3D volume from my 12 images. my code is below please check and help me please.
a=imread('D:\im\New folder\1.jpg');
b=imread('D:\im\New folder\2.jpg');
c=imread('D:\im\New folder\3.jpg');
d=imread('D:\im\New folder\4.jpg');
e=imread('D:\im\New folder\5.jpg');
f=imread('D:\im\New folder\6.jpg');
g=imread('D:\im\New folder\7.jpg');
h=imread('D:\im\New folder\8.jpg');
i=imread('D:\im\New folder\9.jpg');
j=imread('D:\im\New folder\10.jpg');
k=imread('D:\im\New folder\11.jpg');
l=imread('D:\im\New folder\12.jpg');
img= cat(3,a,b,c,d,e,f,g,h,i,j,k,l);
% vol3d('CData', squeeze(img),'xdata', [0 128], 'ydata', [0 128], 'zdata', [0 128])
vol3d('cdata', squeeze(img), 'xdata', [0 1], 'ydata', [0 1], 'zdata', [0 1]);
can anyone please help me in this code?
Image Analyst
on 8 Sep 2021
@Patil Ravindra kyung hee university, you might have to rotate each image before passing it into cat().
Image Analyst
on 8 Sep 2021
rotatedImage = imrotate(inputImage, 30, 'bbox', 'crop'); % Rotate by 30 degrees.
Patil Ravindra kyung hee university
on 9 Sep 2021
Edited: Walter Roberson
on 24 Jan 2022
thank you for reply sir,
i tried imrotate fuction as you said but it showing some error. please check it and tell me corrections.
"
a=imread('D:\im\New folder\1.jpg');
a=imresize(a,[128 128]);
a = imrotate(a, 30, 'bbox', 'crop'); % Rotate by 30 degrees.
b=imread('D:\im\New folder\2.jpg');
b=imresize(b,[128 128]);
b = imrotate(b, 60, 'bbox', 'crop'); % Rotate by 30 degrees.
c=imread('D:\im\New folder\3.jpg');
c=imresize(c,[128 128]);
c = imrotate(c, 90, 'bbox', 'crop'); % Rotate by 30 degrees.
d=imread('D:\im\New folder\4.jpg');
d=imresize(d,[128 128]);
d = imrotate(d, 120, 'bbox', 'crop'); % Rotate by 30 degrees.
e=imread('D:\im\New folder\5.jpg');
e=imresize(e,[128 128]);
e = imrotate(e, 150, 'bbox', 'crop'); % Rotate by 30 degrees.
f=imread('D:\im\New folder\6.jpg');
f=imresize(f,[128 128]);
f = imrotate(f, 180, 'bbox', 'crop'); % Rotate by 30 degrees.
g=imread('D:\im\New folder\7.jpg');
g=imresize(g,[128 128]);
g = imrotate(g, 210, 'bbox', 'crop'); % Rotate by 30 degrees.
h=imread('D:\im\New folder\8.jpg');
h=imresize(h,[128 128]);
h = imrotate(h, 240, 'bbox', 'crop'); % Rotate by 30 degrees.
i=imread('D:\im\New folder\9.jpg');
i=imresize(i,[128 128]);
i = imrotate(i, 270, 'bbox', 'crop'); % Rotate by 30 degrees.
j=imread('D:\im\New folder\10.jpg');
j=imresize(j,[128 128]);
j = imrotate(j, 300, 'bbox', 'crop'); % Rotate by 30 degrees.
k=imread('D:\im\New folder\11.jpg');
k=imresize(k,[128 128]);
k = imrotate(k, 330, 'bbox', 'crop'); % Rotate by 30 degrees.
l=imread('D:\im\New folder\12.jpg');
l=imresize(l,[128 128]);
l = imrotate(l, 360, 'bbox', 'crop'); % Rotate by 30 degrees.
im = cat(3,a,b,c,d,e,f,g,h,i,j,k,l);
vol3d('cdata', squeeze(im), 'xdata', [0 1], 'ydata', [0 1], 'zdata', [0 1]);
"
this is code and the error is :-
"
>> vol3d
Error using imrotate>checkStringValidity (line 312)
Unknown interpolation method or BBOX: bbox
Error in imrotate>parse_inputs (line 277)
checkStringValidity(idx1,arg1);
Error in imrotate (line 69)
[A,ang,method,bbox,catConverter,isInputCategorical] = parse_inputs(args{:});
Error in vol3d>demo_vol3d (line 226)
a = imrotate(a, 30, 'bbox', 'crop'); % Rotate by 30 degrees.
Error in vol3d (line 74)
demo_vol3d;
>>
"
thank you for help.
Walter Roberson
on 9 Sep 2021
in each case replace 'bbox' with 'nearest'
Patil Ravindra kyung hee university
on 9 Sep 2021
thank you for help,i tried 'nearest ' the error is solve but it still staging all images.
it just rotate iamge but all images are stagging on each other.
my images are like a tomography images. in tomography we take images in diffrent angle and combine them to create 3D volume. like shown in below video.
"https://youtu.be/1gottjkU6Jc"
again thank you for help these are great help to me in my work.
Image Analyst
on 9 Sep 2021
Edited: Walter Roberson
on 24 Jan 2022
Patil, if you've studied medical reconstruction you know a reconstructed image is not merely the sum of rotates images. You have to extrude or "back project" the images before you add them. You are not doing that part so you will not get a reconstruction. Sorry, but writing a 3-D reconstruction algorithm is way beyond what I can offer you. There are people who's whole full time job is working on those kinds of algorithms.
More Answers (1)
Rekha Nair
on 14 Oct 2015
how can i create a 3d image by using one Plane image(X and Y cordinates) and an oblique view of the same image.
4 Comments
Walter Roberson
on 14 Oct 2015
Rekha, you cannot do it with that information. See for example the following image, and notice that you cannot tell the true shape of the objects without a third perspective:
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/178917/image.jpeg)
Karthik Raja
on 2 Sep 2016
please send or post the code email id:karthik.raja230@gmail.com
Image Analyst
on 19 Sep 2017
If there are shadows, you have a chance. See this overview of "shape from shading" http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.74.7754&rep=rep1&type=pdf
See Also
Categories
Find more on Image Processing and Computer Vision in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!An Error Occurred
Unable to complete the action because of changes made to the page. Reload the page to see its updated state.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom(English)
Asia Pacific
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 日本Japanese (日本語)
- 한국Korean (한국어)