0001 function cell_sig = CellsortApplyFilter(fn, ica_segments, flims, movm, subtractmean)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022 if (nargin<3)||isempty(flims)
0023 nt = tiff_frames(fn);
0024 flims = [1,nt];
0025 else
0026 nt = diff(flims)+1;
0027 end
0028 if nargin<5
0029 subtractmean = 1;
0030 end
0031
0032 [pixw,pixh] = size(imread(fn,1));
0033 if (nargin<4)||isempty(movm)
0034 movm = ones(pixw,pixh);
0035 else
0036 movm = double(movm);
0037 end
0038 movm(movm==0) = 1;
0039 k=0;
0040
0041 cell_sig = zeros(size(ica_segments,1), nt);
0042 ica_segments = reshape(ica_segments, [], pixw*pixh);
0043
0044 fprintf('Loading %5g frames for %d ROIs.\n', nt, size(ica_segments,1))
0045 while k<nt
0046 ntcurr = min(500, nt-k);
0047 mov = zeros(pixw, pixh, ntcurr);
0048 for j=1:ntcurr
0049 movcurr = imread(fn, j+k+flims(1)-1);
0050 mov(:,:,j) = movcurr;
0051 end
0052 mov = (mov ./ repmat(movm, [1,1,ntcurr])) - 1;
0053
0054 if subtractmean
0055
0056 movtm = mean(mean(mov,1),2);
0057 mov = mov - repmat(movtm,[pixw,pixh,1]);
0058 end
0059
0060 mov = reshape(mov, pixw*pixh, ntcurr);
0061 cell_sig(:, k+[1:ntcurr]) = ica_segments*mov;
0062
0063 k=k+ntcurr;
0064 fprintf('Loaded %3.0f frames; ', k)
0065 toc
0066 end
0067
0068 function j = tiff_frames(fn)
0069
0070
0071
0072
0073
0074
0075
0076 status = 1; j=0;
0077 jstep = 10^3;
0078 while status
0079 try
0080 j=j+jstep;
0081 imread(fn,j);
0082 catch
0083 if jstep>1
0084 j=j-jstep;
0085 jstep = jstep/10;
0086 else
0087 j=j-1;
0088 status = 0;
0089 end
0090 end
0091 end