先讲下各个公式

公式(2)是laplacian coordinates的定义

公式(5)第一部分是保证laplacian coordinate坐标的一致性, 后面是handle点的约束

公式(8)是T的构造

公式(12)是求T中的系数

2D MATLAB 版在它的project里面自带, 这里将其拓展成3D版本,  源代码如下:

function U = laplacian_surface_editing_3D(vertex,faces,BI,BC)%The file is an implementation of 'Laplacian surface editing' in 3D. The
%original accompany code with this paper is in 2D. Based on this code, I
%build the 3D version.%Inputs: vertex %   vertex  #vertex by 3 list of rest domain positions%   faces   #faces by 3 list of triangle indices into vertex%   b       #b list of indices of constraint (boundary) vertices%   bc      #b by 3 list of constraint positions for b%Output: %   U       #V by dim list of new positions% By seamanj @ NCCAn = length(vertex);options.symmetrize=0;
options.normalize=1;
L = compute_mesh_laplacian(vertex, faces, 'combinatorial', options );delta = L * vertex; %delta为拉普拉斯坐标
L_prime = [   L     zeros(n) zeros(n)   % the x-partzeros(n)    L     zeros(n)       zeros(n) zeros(n)    L    ];
neighbors = compute_vertex_ring(faces);for i = 1:nring = [i neighbors{i}];V = vertex(ring,:)';V = [Vones(1,length(ring))];%这里为1, 乘上v'就变成公式(10)中的A了,这里这么写就是把v'合并了%V第一行为x,第二行为y,第三行为z,第四行为1C = zeros(length(ring) * 3, 7);% ... Fill C infor r=1:length(ring)C(r,:) =                [V(1,r) 0 V(3,r) (-1)*V(2,r) V(4,r) 0 0];%V第一行为x,第二行为y,第三行为z,第四行为1C(length(ring)+r,:) =   [V(2,r) (-1)*V(3,r) 0 V(1,r) 0 V(4,r) 0];C(2*length(ring)+r,:) = [V(3,r) V(2,r) (-1)*V(1,r) 0 0 0 V(4,r)];end;  Cinv = pinv(C);s =   Cinv(1,:);h1 =  Cinv(2,:);h2 =  Cinv(3,:);h3 =  Cinv(4,:);delta_i = delta(i,:)';delta_ix = delta_i(1);delta_iy = delta_i(2);delta_iz = delta_i(3);% T*delta gives us an array of coefficients  % T*delta*V'等于公式(5)的T(V')*delta, 注意这里我们要求的是V'Tdelta = [delta_ix*s       + delta_iy*(-1)*h3 + delta_iz*h2delta_ix*h3      + delta_iy*s       + delta_iz*(-1)*h1delta_ix*(-1)*h2 + delta_iy*h1      + delta_iz*s];% updating the weights in Lx_prime, Ly_prime, Lw_prime%L_prime里面原本有L,这里就是公式(5)中的T(V')*delta - L(V')L_prime(i,[ring (ring + n) (ring + 2*n)]) = ...L_prime(i,[ring (ring + n) (ring + 2*n)]) + (-1)*Tdelta(1,:);L_prime(i+n,[ring (ring + n) (ring + 2*n)]) = ...L_prime(i+n,[ring (ring + n) (ring + 2*n)]) + (-1)*Tdelta(2,:);     L_prime(i+n*2,[ring (ring + n) (ring + 2*n)]) = ...L_prime(i+n*2,[ring (ring + n) (ring + 2*n)]) + (-1)*Tdelta(3,:); end% weight for the constraints
w=1;% building the least-squares system matrix
A_prime = L_prime;
rhs = zeros(3*n,1);for j=1:length(BI)A_prime = [A_primew*((1:(3*n))==BI(j))w*((1:(3*n))==(BI(j)+n))w*((1:(3*n))==(BI(j)+2*n))];rhs = [rhsw*BC(j,1)w*BC(j,2)w*BC(j,3)];
end;% solving for v-primes
xyz_col = A_prime\rhs;
U = [xyz_col(1:n) xyz_col((n+1):(2*n)) xyz_col((2*n+1):(3*n))];

Laplacian surface editing相关推荐

  1. 【翻译】Paparazzi: Surface Editing by way of Multi-View Image Processing

    这里写目录标题 摘要 1 INTRODUCTION 2 RELATED WORK 3 OVERVIEW 3.1 基于能量的图像过滤器 3.2 随机多视图优化 3.3 迭代图像过滤器 4 设计注意事项 ...

  2. 图形处理(五)基于旋转不变量的网格变形-Siggraph 2007

    一.相关理论 本篇博文主要讲解2007年Siggraph上的一篇经典paper:<Linear Rotation-invariant Coordinates for Meshes>,这篇p ...

  3. 图形处理(三)简单拉普拉斯网格变形-Siggraph 2004

    三角网格变形一直是CAGD相关领域的重点,刚上研究生的时候,感觉有点神奇.而且一上来导师就给我发了一篇基于格林坐标的自由变形的相关paper,让我看,外文文献,看了n多天,第一次看外文文献,啥也没看懂 ...

  4. Modeling Deformable Objects from a Single Depth Camera

    1 partial surface →(point correspondence)→ warp partial surface →(assemble)→complete watertight surf ...

  5. Siggraph三角网格变形之拉普拉斯变换

    三角网格变形一直是CAGD相关领域的重点,刚上研究生的时候,感觉有点神奇.而且一上来导师就给我发了一篇基于格林坐标的自由变形的相关paper,让我看,外文文献,看了n多天,第一次看外文文献,啥也没看懂 ...

  6. 计算机图形学研究软件

    转自http://www.dgp.toronto.edu/~rms/links.html Papers & Archives Graphics Conference Paper Link Ar ...

  7. 图形学领域的关键算法及源码链接

    原文链接在这里,谢谢博主的分享. Graphics Conference Paper Link Archive (Ke-Sen Huang) Reproducible Research archive ...

  8. 拉普拉斯变形的原理解析和python代码

    背景 拉普拉斯变形是图形学处理mesh的常用方法,它假定mesh的顶点,在变化前后,顶点的拉普拉斯距离应该是一致的. 最常见的拉普拉斯矩阵的定义如下: L = D − A = D ( I − D − ...

  9. 泊松变形技术理论知识解读

    一.简单介绍 微分域变形领域最重要的两篇论文分别是: [1] Yu Y , Zhou K , Xu D , et al. Mesh editing with poisson-based gradien ...

最新文章

  1. 拼团小程序源码_纯小白如何做一个摄影电商拼团小程序?
  2. 2021高考成绩查询时间 新闻,教育资讯:2021高考成绩一般公布时间 多久出成绩...
  3. Ubuntu Linux系统下的SVN客户端工具PySVN
  4. 1688推广工具_全面了解1688数字营销
  5. 随想录(kernel的版本管理)
  6. 传智黑马java基础学习——day10(继承、抽象类)
  7. 【正则】详解python正则表达式之re.group()用法
  8. android改手机名称,如何修改手机 App 的名称?「App Name Editor」可轻松自订(Android)...
  9. Linux如何安装/卸载.deb文件(保姆级教程)
  10. 《与我长跑十年的女友就要嫁人了》…
  11. 如何实现一个sandbox?
  12. app版本更新的五种实现方式
  13. qt打开xls文件_Qt操作Excel
  14. MySQL-数据库查询语言
  15. 使用 mv 命令移动文件夹
  16. 基于Tablestore的Wifi设备监管系统架构实现 1
  17. php qq昵称,自写与收集的一些免费的API接口(获取QQ昵称、头像、QQ秀等等...)...
  18. 家禽也能有身份,XFS在畜牧业落地
  19. go(gin框架)session底层使用redis实现(gorilla/sessions和gin-contrib/sessions)
  20. 人力资源职位英文缩写汇总(人力资源岗位术语缩写)

热门文章

  1. error C2440: 'static_cast' : cannot convert from 'void (__thiscall CMainFrame::* )(void)' to ...
  2. Python Imaging Library: ImageEnhance Module(图像增强模块)
  3. QT学习笔记之对话框
  4. java i%10==3_Java学习笔记(三)
  5. nginx网关--openresty
  6. Linux常用命令——xargs
  7. VBScript函数
  8. 华为机试HJ88:扑克牌大小
  9. html csv 中文乱码,csv 中文乱码
  10. 安装erlang没有bin文件夹_RabbitMQ安装教程