Select Git revision
Registration.m
bepi authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
Registration.m 14.93 KiB
%% The code is written by Behnaz Pirzamanbein, bepi@dtu.dk last version 2020.08.04
%% registration
samples = {'out_out_CD','out_out_MD','in_in_CD','in_in_MD'};
load_folder = 'Results\registration\';
save_folder = 'Results\registration\tform\';
if ~exist(save_folder,'dir')
mkdir(save_folder)
end
% if you want to run the measure separately you can use the for loop
%for i = 1:4
sample = samples{i};
% loading data
disp(sample)
dg0_inner = imread([load_folder,'registration_s1_',sample,'_0.png']);
dg45_inner = imread([load_folder,'registration_s1_',sample,'_45.png']);
dg90_inner = imread([load_folder,'registration_s1_',sample,'_90.png']);
dg180_inner = imread([load_folder,'registration_s1_',sample,'_180.png']);
% estimate the resgitration T (using the generated function)
Reg_dg0_inner = registerImages(dg0_inner,dg180_inner,30);
Reg_dg45_inner = registerImages(dg45_inner,dg180_inner,30);
Reg_dg90_inner = registerImages(dg90_inner,dg180_inner,30);
save([save_folder,'reg_tfrom_inner_',sample],'*_inner')
% loading data
dg0_outer = imread([load_folder,'registration_s2_',sample,'_0.png']);
dg45_outer = imread([load_folder,'registration_s2_',sample,'_45.png']);
dg90_outer = imread([load_folder,'registration_s2_',sample,'_90.png']);
dg180_outer = imread([load_folder,'registration_s2_',sample,'_180.png']);
% estimate the resgitration T (using the generated function)
Reg_dg0_outer = registerImages(dg0_outer,dg180_outer,30);
Reg_dg45_outer = registerImages(dg45_outer,dg180_outer,30);
Reg_dg90_outer = registerImages(dg90_outer,dg180_outer,30);
if flag_save
save([save_folder,'reg_tfrom_outer_',sample],'*_outer')
end
%end
%% check all against 180
samples = {'out_out_CD','out_out_MD','in_in_CD','in_in_MD'};
degree = {'0','45','90','180'};
load_folder = 'Results\registration\tform\';
save_folder = load_folder;
if ~exist(save_folder,'dir')
mkdir(save_folder)
end
% if you want to run the measure separately you can use the for loop
%for i = 1:4
sample = samples{i};
inner = load([load_folder,'reg_tfrom_inner_',sample]);
outer = load([load_folder,'reg_tfrom_outer_',sample]);
MOVING = inner.dg0_inner;%imrotate(layers(:,:,1),180);
movingRefObj = imref2d(size(inner.dg0_inner));
fixedRefObj = inner.Reg_dg0_inner.SpatialRefObj;
tform = inner.Reg_dg0_inner.Transformation;
inner_0dg = imwarp(MOVING, movingRefObj, tform, 'OutputView', fixedRefObj);
MOVING = inner.dg45_inner;%imrotate(layers(:,:,1),180);
movingRefObj = imref2d(size(inner.dg45_inner));
fixedRefObj = inner.Reg_dg45_inner.SpatialRefObj;
tform = inner.Reg_dg45_inner.Transformation;
inner_45dg = imwarp(MOVING, movingRefObj, tform, 'OutputView', fixedRefObj);
MOVING = inner.dg90_inner;%imrotate(layers(:,:,1),180);
movingRefObj = imref2d(size(inner.dg90_inner));
fixedRefObj = inner.Reg_dg90_inner.SpatialRefObj;
tform = inner.Reg_dg90_inner.Transformation;
inner_90dg = imwarp(MOVING, movingRefObj, tform, 'OutputView', fixedRefObj);
figure,
subplot(221)
imshowpair(inner_0dg,inner.dg180_inner),title('0 to 180')
subplot(222)
imshowpair(inner_45dg,inner.dg180_inner),title('45 to 180')
subplot(223)
imshowpair(inner_90dg,inner.dg180_inner),title('90 to 180')
suptitle_modified(['inner using inner T ',sample],'none')
if flag_save
saveas(gcf,[save_folder,'inner_using_inner_T_',sample,'.fig'])
saveas(gcf,[save_folder,'inner_using_inner_T_',sample,'.png'])
end
% check all outer agains 180 using inner transform T
MOVING = outer.dg0_outer;%imrotate(layers(:,:,1),180);
movingRefObj = imref2d(size(outer.dg0_outer));
fixedRefObj = inner.Reg_dg0_inner.SpatialRefObj;
tform = inner.Reg_dg0_inner.Transformation;
outer_0dg = imwarp(MOVING, movingRefObj, tform, 'OutputView', fixedRefObj);
MOVING = outer.dg45_outer;%imrotate(layers(:,:,1),180);
movingRefObj = imref2d(size(outer.dg45_outer));
fixedRefObj = inner.Reg_dg45_inner.SpatialRefObj;
tform = inner.Reg_dg45_inner.Transformation;
outer_45dg = imwarp(MOVING, movingRefObj, tform, 'OutputView', fixedRefObj);
MOVING = outer.dg90_outer;%imrotate(layers(:,:,1),180);
movingRefObj = imref2d(size(outer.dg90_outer));
fixedRefObj = inner.Reg_dg90_inner.SpatialRefObj;
tform = inner.Reg_dg90_inner.Transformation;
outer_90dg = imwarp(MOVING, movingRefObj, tform, 'OutputView', fixedRefObj);
figure,
subplot(221)
imshowpair(outer_0dg,outer.dg180_outer),title('0 to 180')
subplot(222)
imshowpair(outer_45dg,outer.dg180_outer),title('45 to 180')
subplot(223)
imshowpair(outer_90dg,outer.dg180_outer),title('90 to 180')
suptitle_modified(['outer using inner T ',sample],'none')
if flag_save
saveas(gcf,[save_folder,'outer_using_inner_T_',sample,'.fig'])
saveas(gcf,[save_folder,'outer_using_inner_T_',sample,'.png'])
end
%end
close all
%% apply the inner T to the layers for measurement
samples = {'out_out_CD','out_out_MD','in_in_CD','in_in_MD'};
load_folder_Reg = 'Results\registration\tform\';
load_folder_layers = 'Results\layer\';
save_folder = 'Results\registration\layer\';
if ~exist(save_folder,'dir')
mkdir(save_folder)
end
% if you want to run the measure separately you can use the for loop
%for i = 1:4
clearvars -except samples i flag_data load_folder_Reg load_folder_layers save_folder
close all
sample = samples{i};
fprintf('Load Data %s ...\n',sample)
% for registrtaion
inner = load([load_folder_Reg,'reg_tfrom_inner_',sample]);
% for visualization
outer = load([load_folder_Reg,'reg_tfrom_outer_',sample]);
inner_layers_0 = load([load_folder_layers,'inner_layers_',sample,'_0']);
outer_layers_0 = load([load_folder_layers,'outer_layers_',sample,'_0']);
inner_layers_45 = load([load_folder_layers,'inner_layers_',sample,'_45']);
outer_layers_45 = load([load_folder_layers,'outer_layers_',sample,'_45']);
inner_layers_90 = load([load_folder_layers,'inner_layers_',sample,'_90']);
outer_layers_90 = load([load_folder_layers,'outer_layers_',sample,'_90']);
inner_layers_180 = load([load_folder_layers,'inner_layers_',sample,'_180']);
outer_layers_180 = load([load_folder_layers,'outer_layers_',sample,'_180']);
for s = 1:2
fprintf('Registrtaion of Surface %d\n',s)
dg0_inner = inner_layers_0.layers(:,:,s);
dg45_inner = inner_layers_45.layers(:,:,s);
dg90_inner = inner_layers_90.layers(:,:,s);
dg180_inner = inner_layers_180.layers(:,:,s);
dg0_outer = outer_layers_0.layers(:,:,s);
dg45_outer = outer_layers_45.layers(:,:,s);
dg90_outer = outer_layers_90.layers(:,:,s);
dg180_outer = outer_layers_180.layers(:,:,s);
MOVING = dg0_inner;
movingRefObj = imref2d(size(dg0_inner));
fixedRefObj = inner.Reg_dg0_inner.SpatialRefObj;
tform = inner.Reg_dg0_inner.Transformation;
[inner_0dg(:,:,s), inner_0dg_Ref] = imwarp(MOVING, movingRefObj, tform, 'OutputView', fixedRefObj);
MOVING = dg45_inner;
movingRefObj = imref2d(size(dg45_inner));
fixedRefObj = inner.Reg_dg45_inner.SpatialRefObj;
tform = inner.Reg_dg45_inner.Transformation;
[inner_45dg(:,:,s), inner_45dg_Ref] = imwarp(MOVING, movingRefObj, tform, 'OutputView', fixedRefObj);
MOVING = dg90_inner;
movingRefObj = imref2d(size(dg90_inner));
fixedRefObj = inner.Reg_dg90_inner.SpatialRefObj;
tform = inner.Reg_dg90_inner.Transformation;
[inner_90dg(:,:,s), inner_90dg_Ref] = imwarp(MOVING, movingRefObj, tform, 'OutputView', fixedRefObj);
inner_180dg(:,:,s) = dg180_inner;
MOVING = dg0_outer;
movingRefObj = imref2d(size(dg0_outer));
fixedRefObj = inner.Reg_dg0_inner.SpatialRefObj;
tform = inner.Reg_dg0_inner.Transformation;
[outer_0dg(:,:,s), outer_0dg_Ref] = imwarp(MOVING, movingRefObj, tform, 'OutputView', fixedRefObj);
MOVING = dg45_outer;
movingRefObj = imref2d(size(dg45_outer));
fixedRefObj = inner.Reg_dg45_inner.SpatialRefObj;
tform = inner.Reg_dg45_inner.Transformation;
[outer_45dg(:,:,s), outer_45dg_Ref] = imwarp(MOVING, movingRefObj, tform, 'OutputView', fixedRefObj);
MOVING = dg90_outer;
movingRefObj = imref2d(size(dg90_outer));
fixedRefObj = inner.Reg_dg90_inner.SpatialRefObj;
tform = inner.Reg_dg90_inner.Transformation;
[outer_90dg(:,:,s), outer_90dg_Ref] = imwarp(MOVING, movingRefObj, tform, 'OutputView', fixedRefObj);
outer_180dg(:,:,s) = dg180_outer;
figure,
subplot(231)
imshowpair(inner_0dg(:,:,s),inner.dg180_inner),title('0 to 180')
ylabel('inner using inner T ','Interpreter','none')
subplot(232)
imshowpair(inner_45dg(:,:,s),inner.dg180_inner),title('45 to 180')
subplot(233)
imshowpair(inner_90dg(:,:,s),inner.dg180_inner),title('90 to 180')
subplot(234)
imshowpair(outer_0dg(:,:,s),outer.dg180_outer),title('0 to 180')
ylabel('outer using inner T ','Interpreter','none')
subplot(235)
imshowpair(outer_45dg(:,:,s),outer.dg180_outer),title('45 to 180')
subplot(236)
imshowpair(outer_90dg(:,:,s),outer.dg180_outer),title('90 to 180')
suptitle_modified(sample,'none')
if flag_save
saveas(gcf,sprintf('%sReg_s%d_%s.png',save_folder,s,sample))
end
end
if flag_save
disp('Save results ...')
layers = inner_0dg;
Ref = inner_0dg_Ref;
save([save_folder,'Reg_inner_layers_',sample,'_0'],'layers','Ref')
layers = inner_45dg;
Ref = inner_45dg_Ref;
save([save_folder,'Reg_inner_layers_',sample,'_45'],'layers','Ref')
layers = inner_90dg;
Ref = inner_90dg_Ref;
save([save_folder,'Reg_inner_layers_',sample,'_90'],'layers','Ref')
layers = inner_180dg;
save([save_folder,'Reg_inner_layers_',sample,'_180'],'layers')
layers = outer_0dg;
Ref = outer_0dg_Ref;
save([save_folder,'Reg_outer_layers_',sample,'_0'],'layers','Ref')
layers = outer_45dg;
Ref = outer_45dg_Ref;
save([save_folder,'Reg_outer_layers_',sample,'_45'],'layers','Ref')
layers = outer_90dg;
Ref = outer_90dg_Ref;
save([save_folder,'Reg_outer_layers_',sample,'_90'],'layers','Ref')
layers = outer_180dg;
save([save_folder,'Reg_outer_layers_',sample,'_180'],'layers')
end
%end
close all
%% apply the inner T to the mesh points and return the mesh back
samples = {'out_out_CD','out_out_MD','in_in_CD','in_in_MD'};
load_folder_Reg = 'Results\registration\tform\';
load_folder_layers = 'Results\layer\';
save_folder = 'Results\registration\layer\';
if ~exist(save_folder,'dir')
mkdir(save_folder)
end
% if you want to run the measure separately you can use the for loop
%for i = 1:4
clearvars -except samples i flag_data load_folder_Reg load_folder_layers save_folder
close all
sample = samples{i};
fprintf('Load Data %s ...\n',sample)
% for registrtaion
inner = load([load_folder_Reg,'reg_tfrom_inner_',sample]);
% for visualization
outer = load([load_folder_Reg,'reg_tfrom_outer_',sample]);
inner_layers_0 = load([load_folder_layers,'inner_layers_',sample,'_0']);
outer_layers_0 = load([load_folder_layers,'outer_layers_',sample,'_0']);
inner_layers_45 = load([load_folder_layers,'inner_layers_',sample,'_45']);
outer_layers_45 = load([load_folder_layers,'outer_layers_',sample,'_45']);
inner_layers_90 = load([load_folder_layers,'inner_layers_',sample,'_90']);
outer_layers_90 = load([load_folder_layers,'outer_layers_',sample,'_90']);
inner_layers_180 = load([load_folder_layers,'inner_layers_',sample,'_180']);
outer_layers_180 = load([load_folder_layers,'outer_layers_',sample,'_180']);
for s = 1:2
% initial transformation (rotation or flip)
fprintf('Registrtaion of the Mesh Points Surface %d\n',s)
dg0_inner = inner_layers_0.layers(:,:,s);
dg45_inner = inner_layers_45.layers(:,:,s);
dg90_inner = inner_layers_90.layers(:,:,s);
dg180_inner = inner_layers_180.layers(:,:,s);
dg0_outer = outer_layers_0.layers(:,:,s);
dg45_outer = outer_layers_45.layers(:,:,s);
dg90_outer = outer_layers_90.layers(:,:,s);
dg180_outer = outer_layers_180.layers(:,:,s);
% 0 degree
[tmp(:,2), tmp(:,1)] = find(dg0_inner);
tform = inner.Reg_dg0_inner.Transformation;
[inner_0dg(:,1,s), inner_0dg(:,2,s)] = transformPointsForward(tform, tmp(:,1), tmp(:,2));
clear tmp Reg
% 45 degree
[tmp(:,2), tmp(:,1)] = find(dg45_inner);
tform = inner.Reg_dg45_inner.Transformation;
[inner_45dg(:,1,s), inner_45dg(:,2,s)] = transformPointsForward(tform, tmp(:,1), tmp(:,2));
clear tmp Reg
% 90 degree
[tmp(:,2), tmp(:,1)] = find(dg90_inner);
tform = inner.Reg_dg90_inner.Transformation;
[inner_90dg(:,1,s), inner_90dg(:,2,s)] = transformPointsForward(tform, tmp(:,1), tmp(:,2));
clear tmp Reg
[inner_180dg(:,2,s), inner_180dg(:,1,s)] = find(dg180_inner);
clear tmp Reg
% 0 degree
[tmp(:,2), tmp(:,1)] = find(dg0_outer);
tform = inner.Reg_dg0_inner.Transformation;
[outer_0dg(:,1,s), outer_0dg(:,2,s)] = transformPointsForward(tform, tmp(:,1), tmp(:,2));
clear tmp Reg
% 45 degree
[tmp(:,2), tmp(:,1)] = find(dg45_outer);
tform = inner.Reg_dg45_inner.Transformation;
[outer_45dg(:,1,s), outer_45dg(:,2,s)] = transformPointsForward(tform, tmp(:,1), tmp(:,2));
clear tmp Reg
% 90 degree
[tmp(:,2), tmp(:,1)] = find(dg90_outer);
tform = inner.Reg_dg90_inner.Transformation;
[outer_90dg(:,1,s), outer_90dg(:,2,s)] = transformPointsForward(tform, tmp(:,1), tmp(:,2));
clear tmp Reg
[outer_180dg(:,2,s), outer_180dg(:,1,s)] = find(dg180_outer);
clear tmp Reg
end
if flag_save
disp('Save results ...')
points = inner_0dg;
save([save_folder,'Reg_inner_points_',sample,'_0'],'points')
points = inner_45dg;
save([save_folder,'Reg_inner_points_',sample,'_45'],'points')
points = inner_90dg;
save([save_folder,'Reg_inner_points_',sample,'_90'],'points')
points = inner_180dg;
save([save_folder,'Reg_inner_points_',sample,'_180'],'points')
points = outer_0dg;
save([save_folder,'Reg_outer_points_',sample,'_0'],'points')
points = outer_45dg;
save([save_folder,'Reg_outer_points_',sample,'_45'],'points')
points = outer_90dg;
save([save_folder,'Reg_outer_points_',sample,'_90'],'points')
points = outer_180dg;
save([save_folder,'Reg_outer_points_',sample,'_180'],'points')
end
%end
close all