-
Notifications
You must be signed in to change notification settings - Fork 0
/
read_tiff_downsample.m
70 lines (62 loc) · 2.17 KB
/
read_tiff_downsample.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
function [Fs, the_data1] = read_tiff_downsample(f_name, ratio)
% function [Fs, the_data1] = read_tiff_downsample(f_name, ratio)
% Read and donwsamplr images from tiff files generated by
% Mview(https://www.sutter.com/SOFTWARE/microscope_frame.html)
% Large datasets are split into multiples files by Mview. This program
% reads the tiff files, downsamples them to the desired ratio and returns
% the downsampled data in matrix form along with frequency of sampling.
% for datasets not generated by Mview, a default framerate of 3 Hz is
% assumed
% Written by Ravi Kedarasetti (2019), department of Engineering Science and
% Mechanics, Pennsylvania State University
%
% Input
% f_name : file name with full path and without extension. For datasets with multiple files
% use the part before the last underscore
% ratio : Downsample rate >=1
%
% Output
% Fs : Sampling frequency, corrected by the downsample rate
% the_data1 : downsampled data
if nargin<2
ratio = 1;
end
parts = dir([f_name '_0*.TIF']);
n1 = 1;
n_frames = 0;
if(length(parts))==0
% only one file
the_info = imfinfo([f_name '.TIF']);
n_frames = size(the_info,1);
for n1 = 1:n_frames
the_data(:,:,n1) = double(imread([f_name '.TIF'],n1));
end
else
for n = 1:length(parts)
the_info = imfinfo([f_name '_00' num2str(n) '.TIF']);
n_frames1 = size(the_info,1);
for n2 = 1:n_frames1
the_data(:,:,n1) = double(imread([f_name '_00' num2str(n) '.TIF'],n2));
n1 = n1+1;
if mod(n1, 1000)==0
fprintf('Finished reading %d frames \n',n1)
end
end
n_frames = n_frames+n_frames1;
end
end
[ht,wd,~] = size(the_data);
Fs = 3; % default for two-photon microscope
try
text_hold=textscan(the_info(1).ImageDescription,'%s','delimiter','\n');
frame_dur = str2double(text_hold{1}{24}(17:end-3));
Fs = 1/frame_dur;
the_data1 = zeros(ht,wd,n_frames/ratio);
for n = 1:n_frames/ratio
the_data1(:,:,n) = mean(the_data(:,:,(n-1)*ratio+1:n*ratio),3);
end
Fs = Fs/ratio;
catch
fprintf('Could not find info for image %s \n',f_name)
the_data1 = the_data;
end