# Create an image stack (3-D matrix)

123 Ansichten (letzte 30 Tage)
Jack am 4 Jun. 2013
Bearbeitet: DGM am 13 Feb. 2023
Hello. I'm importing a series of images from my working directory using the following code:
for i=139:141
% {} = cell array
I{i} = rgb2gray(images{i});
end
I have a large number of images, but here I'm importing just a sample. I'm converting each color image to grayscale. I must also create an image stack, a 3D matrix of grayscale images. I've been browsing the web for an answer, but I'm having difficulty understanding the process. size(I) yields '1 141', and I'm wondering how I can create a 3-D matrix from this. Your help would be greatly appreciated. Thank you!
##### 1 KommentarKeine anzeigenKeine ausblenden
joseph robinson am 19 Apr. 2017
Adding to the feedback of others, your code would be more efficient without looping, e.g.,
idx = 139:141;
# image file paths
ipaths =cellfun(@(x) sprintf('IMG_%04d.JPG',x),idx,'uni',false);
# read images into cell array
# Convert to gray-scale
Igray = cellfun(@rgb2gray,I,'uni',false);
# Concatenate 3 gray-scale images into single 3D matrix
myImage = cat(3,Igray{:});
Hope this helps!

Melden Sie sich an, um zu kommentieren.

### Akzeptierte Antwort

Kye Taylor am 4 Jun. 2013
Bearbeitet: Kye Taylor am 4 Jun. 2013
Execute this command after your code above to get the three gray-scale images you create into one 3D matrix of grayscale images;
myImage = cat(3,I{139:141});
##### 0 Kommentare-1 ältere Kommentare anzeigen-1 ältere Kommentare ausblenden

Melden Sie sich an, um zu kommentieren.

### Weitere Antworten (2)

hf fh am 21 Mai 2018
Bearbeitet: DGM am 12 Feb. 2023
Please help me .. I searched a lot for convert 2Dimages into 3D but I still have the same problem !!! ''I can not get the images in volume in three dimensions" I have a search in 20 image dimensions [773x896]pixel, I want to convert it to 3D-three dimensions in volume form to study the depth, I following steps this:
1. Must be converted to a size of [300 * 300] pixels
2. Converted to stack
3. Converted to format==> 3D
like :
folder = '/Users/mac/Desktop/fiel2/data/';
for i=1:20
images{i} = imread( fullfile(folder, sprintf('%d.tif',i) ));
Q{i}=imresize(images{i} ,[300 , 300]);
end
I = cat(3, Q{i});
imshow(Q{i});
view(3);
Thank you for help me ...
##### 17 Kommentare16 ältere Kommentare anzeigen16 ältere Kommentare ausblenden
Tilkesh am 18 Feb. 2022
Use Fiji or imagej it is free software. After spending many days I could not findout correct stacking solution in matlab.

Melden Sie sich an, um zu kommentieren.

Image Analyst am 4 Jun. 2013
Bearbeitet: Image Analyst am 4 Jun. 2013
The (badly-named) variable I is a one dimensional array of cells. Inside each cell it a 2D array. So, in effect, this is a 3D array though you can't reference it like I(row, column, slice). If that is what you need to do then you need to do
I = []; % Before the loop
Then in the loop:
I = cat(3, I, images{i}); % Tack on slice i into a new cell.
In the meantime, please read the FAQ on cells to get a better idea of how they work: http://matlab.wikia.com/wiki/FAQ#What_is_a_cell_array.3F
##### 6 Kommentare5 ältere Kommentare anzeigen5 ältere Kommentare ausblenden
Image Analyst am 31 Jul. 2021
@Jay Kandukuri, allocate an array of 80 slices, then loop and read in the files and load them in to the array you just allocated.
dcm3d = zeros(rows, columns, 80, 'uint8');
% Then in a loop, load them in
for slice = 1 : 80
thisImage = dcmread(filename); % filename must change on every iteration obviously.
dcm3d(:, :, slice) = thisImage;
end

Melden Sie sich an, um zu kommentieren.

### Kategorien

Mehr zu Convert Image Type finden Sie in Help Center und File Exchange

### Community Treasure Hunt

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

Start Hunting!