diff --git a/read_file.m b/read_file.m index 0c3ffb0..45644c6 100644 --- a/read_file.m +++ b/read_file.m @@ -1,4 +1,4 @@ -function imData=read_file(path_to_file,sframe,num2read,options) +function imData=read_file(path_to_file,sframe,num2read,options,im_info) % Reads uncompressed multipage .tiff, .hdf5, .avi or .raw files % Usage: my_data=read_file('path_to_data_file, start frame, num to read); @@ -8,6 +8,8 @@ % sframe: first frame to read (optional, default: 1) % num2read: number of frames to read (optional, default: read the whole file) % options: options for reading .raw or .bin files +% im_info: information about the file (if already present) + % OUTPUT: % imData: data in array format @@ -19,10 +21,20 @@ [~,~,ext] = fileparts(path_to_file); -if strcmpi(ext,'.tiff') || strcmpi(ext,'.tif') || strcmpi(ext,'.btf'); - imData = loadtiff(path_to_file,sframe,num2read); - %imData = bigread2(path_to_file,sframe,num2read); -elseif strcmpi(ext,'.hdf5') || strcmpi(ext,'.h5'); +if strcmpi(ext,'.tiff') || strcmpi(ext,'.tif') || strcmpi(ext,'.btf') + if ~exist('im_info','var') + im_info = imfinfo(path_to_file); + end + TifLink = Tiff(path_to_file, 'r'); + num2read = min(num2read,length(im_info)-sframe+1); + imData = zeros(im_info(1).Height,im_info(1).Width,num2read,'like',TifLink.read()); + for i=1:num2read + TifLink.setDirectory(i+sframe-1); + imData(:,:,i)=TifLink.read(); + end + TifLink.close() + %imData = loadtiff(path_to_file,sframe,num2read); +elseif strcmpi(ext,'.hdf5') || strcmpi(ext,'.h5') % info = hdf5info(path_to_file); % dims = info.GroupHierarchy.Datasets.Dims; % name = info.GroupHierarchy.Datasets.Name;