-
Notifications
You must be signed in to change notification settings - Fork 1
/
Registration.m
43 lines (38 loc) · 1.43 KB
/
Registration.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
% ===============================================================================================
% DSR: Direct Simultaneous Registration for Multiple 3D Images
% Version: 1.0
% ===============================================================================================
%
% Copyright (C) 2022 Zhehua Mao, Liang Zhao, and Shoudong Huang
% University of Technology, Sydney, Australia
%
% Authors: Zhehua Mao -- [email protected]
% Liang Zhao -- [email protected]
% Shoudong Huang -- [email protected]
%
% Robotics Institute
% Faculty of Engineering and Information Technology
% University of Technology, Sydney
% NSW 2007, Australia
%
% Please contact Zhehua Mao {[email protected]} if you have any questions about the code.
function I2 =Registration(I1, T)
I1 = double(I1);
I1grid=griddedInterpolant(I1,'linear','none');
[l,w,h]=size(I1);
I2 = zeros(l,w,h);
R = T(1:3,1:3);
R_ = inv(R);
t = T(1:3,4);
[x2,y2,z2] = ind2sub([l,w,h],(1:l*w*h)');
I2_xyz = [x2,y2,z2];
P1 = (I2_xyz-kron(ones(l*w*h,1),t'))*R_';
index1 = find(P1(:,1)>=1 & P1(:,1)<=l &...
P1(:,2)>=1 & P1(:,2)<=w &...
P1(:,3)>=1 & P1(:,3)<=h );
P1 = P1(index1,:);
index2 = find(I1grid(P1));
P1 = P1(index2,:);
P2 = I2_xyz(index1(index2),:);
I2(index1(index2)) = I1grid(P1);
end