Tip revision: d41efaa
Joint_shape_analysis_F6_and_F_13.m
``````%In the end, we reproduce figure(1) as Figure 6 and figure(2)
%as Figure 13 in the paper.

clc; clear; close all;

kEig = 60;
L{1} = compute_laplacian_basis(S1, kEig);
L{2} = compute_laplacian_basis(S2, kEig);

% compute ground-truth funcitonal maps
C = cell(2);
for i = 1:2
for j = 1:2
if i ~= j
C{i, j} = L{j}.evecs'*L{j}.A*L{i}.evecs;
else
C{i, j} = eye(kEig);
end
end
end

% compute the shape difference operators
[u1, v1] = eig(C{1, 2}'*C{1, 2});
[v1, ind] = sort(diag(v1), 'descend');
u1 = u1(:, ind);
f = zeros(12500, 1);
for i = 1:5
f = f + v1(i)*(L{1}.evecs*u1(:, i)).^2;
end

[u2, v2] = eig(C{2, 1}'*C{2, 1});
[v2, ind] = sort(diag(v2), 'descend');
u2 = u2(:, ind);
g = zeros(12500, 1);
for i = 1:5
g = g+v2(i)*(L{2}.evecs*u2(:, i)).^2;
end

U = extract_latent_basis(C);
l = 49;

B = U.evecs(:, 1:l);

X = cell(size(C));
for i = 1:length(C)
for j = 1:length(C)
X{i, j} = C{j, i}';
end
end

W = extract_latent_basis(X);

E = B'*W.mat*B;
E = (E+E')/2;

[u, v] = eig(E);
[v, idx] = sort(diag(v), 'descend');
u = u(:, idx);
h1 = zeros(12500, 1);
for i = 1:5
h1 = h1 + v(i)*(L{1}.evecs*(U.bases{1}(:, 1:l)*u(:, i))).^2;
end

h2 = zeros(12500, 1);
for i = 1:5
h2 = h2 + v(i)*(L{2}.evecs*(U.bases{2}(:, 1:l)*u(:, i))).^2;
end

figure(1);
subplot(2, 4, 1);
plotMesh(L{1}, f, -90, -6);
subplot(2, 4, 5);
plotMesh(L{1}, f, 90, 6);
subplot(2, 4, 2);
plotMesh(L{2}, g, 90, 6);
subplot(2, 4, 6);
plotMesh(L{2}, g, -90, -6);
subplot(2, 4, 3);
plotMesh(L{1}, h1, -90, -6);
subplot(2, 4, 4);
plotMesh(L{2}, h2, 90, 6);
subplot(2, 4, 7);
plotMesh(L{1}, h1, 90, 6);
subplot(2, 4, 8);
plotMesh(L{2}, h2, -90, -6);

figure(2);
for i = 1:5
subplot(2, 10, i); plotMesh(L{1}, (L{1}.evecs*u1(:, i)).^2, -90, -6);
subplot(2, 10, i+5); plotMesh(L{2}, (L{2}.evecs*u2(:, i)).^2, 90, 6);
end
subplot(2, 10, 2); plotMesh(L{1}, (L{1}.evecs*u1(:, 2)).^2, 90, 6);
subplot(2, 10, 6); plotMesh(L{2}, (L{2}.evecs*u2(:, 1)).^2, -90, -6);
subplot(2, 10, 8); plotMesh(L{2}, (L{2}.evecs*u2(:, 3)).^2, -90, -6);

for i = 1:10
subplot(2, 10, 10+i); plotMesh(L{1}, (L{1}.evecs*(U.bases{1}(:, 1:l)*u(:, i))).^2, -90, -6);
end
for i = [3, 4, 6]
subplot(2, 10, 10+i); plotMesh(L{1}, (L{1}.evecs*(U.bases{1}(:, 1:l)*u(:, i))).^2, 90, 6);
end

``````