I'm aiming for getting images De-Interleaved and saved into a different folder through a loop function
Image Processing: DeInterleaving, is it possible?
3 views (last 30 days)
Show older comments
Hello!
Is it possible for MatLab to "De-Interleave" stacked images? Originally this is a ImageJ plugin function, but it would be very useful it can be run through MatLab.
Thanks!
-Frank
Website
Diagram
Answers (2)
Sean de Wolski
on 19 May 2011
Copied from Andrew with modifications:
function [A, B] = deinterleave(file_name)
I = imread(file_name); %don't call a variable image since it overwrites built-in function.
A = I(:,:,1:2:end);
B = I(:,:,2:2:end);
Not only is this vectorized but it can account for volumes with an odd number of pages (slices).
You could also change it to accept a 3D volume rather than a file name; I recommend that.
function [A, B] = deinterleave(I)
%I is a 3D volume
A = I(:,:,1:2:end);
B = I(:,:,2:2:end);
13 Comments
Sean de Wolski
on 19 May 2011
Yes it does require them to be 3D. How can you pull the second slice from a 2d image? ImageJ may work differently and be able to read a file full of 2d images, but it's viewing that file internally as a 3D image.
Andrew Fowler
on 19 May 2011
This should be fairly straightforward if you are already working with a format that can be easily imported into matlab as an array. If you're working with a standard image format like .tif, or even dicom files, you should be able to set up an easy function with a quick for loop. Here's an example for a dicom file:
function [A, B] = deinterleave(dicom_filename)
image = dicomread(dicom_filename);
height = length(image(:,1,1));
width = length(image(1,:,1));
slices = length(image(1,1,:));
A = zeros(height, width, slices/2);
B = A;
for i = 1:length(image(1,1,:)
A(:,:,i) = image(:,:,(2*i-1));
B(:,:,i) = image(:,:,(2*i));
end
You can use IMREAD instead of DICOMREAD if you're using another format. If you're using a more esoteric image format like REC-PAR or 2dseq, you may need to do a little more work to actually import your images into matlab as arrays.
3 Comments
Andrew Fowler
on 19 May 2011
you should use IMREAD instead of DICOMREAD. Also Sean has some really good additions that you should probably follow. Ex:
i = imread('name.tif')
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!