机器视觉 增强现实分享 http://blog.sciencenet.cn/u/wanglin193 把算法当成业余爱好......

博文

Spectral Conformal Parameterization 实验

已有 880 次阅读 2018-12-16 23:19 |个人分类:3D|系统分类:论文交流

前面介绍过固定边界的网格参数化方法,而不固定边界的所谓自然边界的参数化方法也比较常用,比如 Lévy等人的LSCM方法(Blender软件中使用的方法),Desbrun等人的DCP,还有刘利刚老师的基于As-rigid-as-possible的方法。还有下面介绍的基于稀疏矩阵eigenvector的谱方法,论文Spectral Conformal Parameterization。

文中2.2节能量公式离散化,除了计算网格cotangent参数矩阵LD(2V*2V维离散Laplacian矩阵,V是网格点个数),还要计算网格展开到平面后的2D边界u包围的面积表达式A(u)=1/2*uT*A*u中的矩阵A(多边形面积表达成边界坐标u的二次多项式形式),A是2V*2V维的对称稀疏矩阵,矩阵非0项个数是边界点个数的4倍。

[L,w] = cal_mesh_laplacian( meanshape,facetri,'conformal');
LD = [L,sparse(numv,numv); sparse(numv,numv), L];

%u = [u1,u2,u3...,v1,v2,v3...]
% construct A(u) = sum(1/2*|ui*vj-uj*vi|) = u'*A*u to A from idcon
% id_ij = index of [u,v]
% pos part uivj:
id_ij  = [idcon, [idcon(2:end);idcon(1)]];
% neg part ujvi:
id_ij = [id_ij;fliplr(id_ij)];
% add Num to v part
id_ij(:,2) = id_ij(:,2) + numv ;

s = ones(numel(idcon),1); s = [s;-s];
A = sparse(id_ij(:,1),id_ij(:,2),s,2*numv,2*numv) ;
% copy symetry part,note the values for i==j in A is always 0
A = A + A';

LC = LD - A;

3.2节计算LC的Fiedler Vector,即矩阵LC=LD-A的eigenvector(似乎就是Lc矩阵的null-space):

eignum = 3;
[V,D] = eigs(LC,eignum,'sm'); 
%diag(D) is [smallest-non-neg-value,0,0]
k = 1;
vx = V(1:numv,k);
vy = V(1+numv:end,k);

%align ptm to vertical line
vx = vx - mean(vx(idm)); vy = vy - mean(vy(idm));
theta = -atan2(vx(idm(2)),vy(idm(2)));%upper one
vall = [vx*cos(theta)+vy*sin(theta), -vx*sin(theta)+vy*cos(theta)];
vx = vall(:,1);
vy = vall(:,2);
%contour
pcon = [vx(idcon),vy(idcon),zeros(numel(idcon),1)];
ptm = [vx(idm),vy(idm),zeros(2,1)];

figure,
trimesh( facetri,vx, vy, zeros(numv,1),  ...
       'EdgeColor', 'none', ...
       'FaceVertexCData', meantex/255, 'FaceColor', 'interp', ...
       'FaceLighting', 'phong'  );
zlabel('Z'); 
view(2); 
axis equal
hold on, plot3(pcon(:,1),pcon(:,2),pcon(:,3),'.-');

第3.3节又弄出一个关于边界点的矩阵B,同样使用matlab的函数eigs计算LC的广义本征向量u,满足LC*u = lambda*B*u


id_ii = [idcon,idcon+numv];
B = sparse(id_ii,id_ii,1,2*numv,2*numv);

eignum = 3;
[V,D] = eigs(LC , B, eignum ,'sm'); 
vx = V(1:numv,k);
vy = V(1+numv:end,k);

pcon = [vx(idcon),vy(idcon),zeros(numel(idcon),1)];
ptm = [vx(idm),vy(idm),zeros(2,1)];
figure,trimesh( facetri,vx, vy, zeros(numv,1),  ...
       'EdgeColor', 'none', ...
       'FaceVertexCData', meantex/255, 'FaceColor', 'interp', ...
       'FaceLighting', 'phong'  );
zlabel('Z'); view(2); axis equal
hold on,  plot3(pcon(:,1),pcon(:,2),pcon(:,3),'.-');


实际上,根据实验,有B参与就会在边缘有重叠现象发生:

small.pnguntitled.png



参考文章:

[Levy02] Least Squares Conformal Maps for Automatic Texture Atlas Generation

[Desbrun02]Intrinsic Parameterizations of Surface Meshes

[Liu08]A Local/Global Approach to Mesh Parameterization

[Mullen08]Spectral Conformal Parameterization





http://blog.sciencenet.cn/blog-465130-1151912.html

上一篇:最小二乘网格( Least-squares Meshes) 选取结点组成子网格

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备14006957 )

GMT+8, 2019-3-21 00:22

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部