-
Notifications
You must be signed in to change notification settings - Fork 2
/
batch_greenberg_reg.m
executable file
·58 lines (50 loc) · 1.87 KB
/
batch_greenberg_reg.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
function batch_greenberg_reg(src_path, main_fname, out_path)
datafiles = dir([src_path filesep basename '*.tif']);
if ~exist(out_path,'var')
out_path = src_path;
elseif ~isdir(out_path)
mkdir(out_path);
end
% fnames = {};
% for i = 1:length(datafiles)
% if ~isempty(strfind(datafiles(i).name,'tif')) && strfind(datafiles(i).name, main_fname) == 1
% fnames = [fnames datafiles(i).name];
% end
% end
dft_shift = {};
for i=1:length(datafiles)
% if isdir(datafiles(i).name)
% continue;
% end
filename = [src_path filesep datafiles(i).name];
info = imfinfo(filename);
if isfield(info(1), 'ImageDescription')
im_descr = info(1).ImageDescription;
else
im_descr = '';
end
im_s = imread_multi(filename,'g');
im_s_o = im_s;
% Do dft translational registration before proceed
[im_s, dft_shift{i}] = dft_reg(im_s_o);
disp('Whole frame registered with ''dft_reg''');
im_t = mean(im_s,3);
disp(['Start ''greenberg_reg'' for file ' datafiles(i).name ' ...']);
[im_c dx_r dy_r E] = imreg_greenberg(im_s, im_t, []);
[pthstr,temp_name,ext] = fileparts(filename);
out_name = [datafiles(i).name(1:end-3) 'greenberg_' datafiles(i).name(end-2:end)];
dest = [out_path filesep out_name];
imwrite(uint16(im_c(:,:,1)), [dest '.tif'], 'tif', 'Compression', 'none', 'Description',im_descr, 'WriteMode', 'overwrite');
for f=2:size(im_c,3)
imwrite(uint16(im_c(:,:,f)), [dest '.tif'], 'tif', 'Compression', 'none', 'WriteMode', 'append');
end
save([dest '_reginfo'], 'dx_r','dy_r','E','dft_shift');
end
function [im_dft, shift] = dft_reg(im_s)
im_tg = mean(im_s(:,:,1:10),3);
for i=1:size(im_s,3);
output(:,i) = dftregistration(fft2(double(im_tg)),fft2(double(im_s(:,:,i))),1);
end
shift = output(3:4,:);
padding = [0 0 0 0];
im_dft = ImageTranslation_nx(im_s,shift,padding,0);