本质上是shape matching的as similar as possible版本

它的主要贡献在于, 找到一种方法使displacement field尽量平滑, 具体的做法就是公式7, 使每个点的偏移量, 尽量接近它周围邻居偏移量的平均值.

注意tkt_k公式在paper中是错误的
应该为 tk=ck(t)−skRkC0kt_k = c_k(t) - s_kR_kC^0_k

因为rk=skRkx0k+tk=skRkx0k+ck(t)−skRkC0k=skRk(x0k−C0k)+ck(t)r_k = s_kR_kx^0_k + t_k = s_kR_kx^0_k + c_k(t) - s_kR_kC^0_k = s_kR_k(x^0_k-C^0_k) + c_k(t) 这样才符合shape matching中的逻辑

function step3_fittingdebug = 1;step2_find_features(1,0,0.1,'interp');load('Target_vertex','Target_vertex');load('Target_faces','Target_faces');vertex = load('coarse_vertex','coarse_vertex');vertex = vertex.coarse_vertex;v0 = vertex;v3 = vertex;n = length(v0);faces = load('coarse_faces','coarse_faces');faces = faces.coarse_faces;neighbors = compute_vertex_ring(faces);% cal c0c0  = arrayfun(@(x) mean(v0([x neighbors{x}],:)), 1:n, 'UniformOutput', 0);  c0 = reshape(cell2mat(c0),3,[]);c0 = c0';A = zeros(3,3,n);R = zeros(3,3,n);s = zeros(n,1);t = zeros(n,1);D = zeros(n,1);alpha = 0.95;threshold = 0.2;while alpha >= 0.5[IDX,~] = knnsearch(Target_vertex, v3, 'k',1, 'NSMethod', 'kdtree');v3_old = zeros(size(v3));while sum( normrow(v3 - v3_old), 1) > 1c3  = arrayfun(@(x) mean(v3([x neighbors{x}],:)), 1:n, 'UniformOutput', 0);  c3 = reshape(cell2mat(c3),3,[]);c3 = c3';f = @(x)compute_A(x, v3, c3, v0, c0, neighbors);A = reshape(cell2mat(arrayfun(f,1:n, 'UniformOutput', 0)), [3 3 n]); for ii = 1:n% svd [su,ss,sv]=svd(A(:,:,ii));Ri = su*sv';% if reflection then flip last columnif( det(Ri) < 0 )su(:,end) = -su(:,end);Ri = su*sv';endR(:,:,ii) = Ri;endf2 = @(x)compute_s(x, v3, c3, v0, c0, neighbors);s = cell2mat(arrayfun(f2,1:n, 'UniformOutput', 0))';t = arrayfun(@(x)  c3(x,:)' - s(x,:) * R(:,:,x) * c0(x,:)' , 1:n, 'UniformOutput', 0);t = cell2mat(t)';f3 = @(x)compute_D(x, v3, v0, neighbors);D = cell2mat(arrayfun(f3,1:n, 'UniformOutput', 0))';v3_old = v3;options.delete_patch = 'true';[options] = my_plot_mesh(v3, faces, options);IDX2 = find((D <= threshold));if debugnum = size(IDX2, 1);colorvector = (1:num)'/ num;hold onif exist('h11')~=0delete(h11);endh11 = scatter3(v3(IDX2,1),v3(IDX2,2),v3(IDX2,3),20,colorvector);if exist('h22')~=0delete(h22);endh22 = scatter3(Target_vertex(IDX(IDX2),1),Target_vertex(IDX(IDX2),2),Target_vertex(IDX(IDX2),3),20,colorvector,'filled');colormap jet(256);%delete(h11);%delete(h22);endf4 = @(x)compute_r(x, v0, s, R, t);v3 = alpha * cell2mat(arrayfun(f4,1:n, 'UniformOutput', 0))' + bsxfun(@times, (1 - alpha) .* (D <= threshold),  Target_vertex(IDX,:)) +  bsxfun(@times, (1 - alpha) .* (D > threshold),  cell2mat(arrayfun(f4,1:n, 'UniformOutput', 0))');%v3 = alpha * cell2mat(arrayfun(f4,1:n, 'UniformOutput', 0))' + bsxfun(@times, (1 - alpha) ,  Target_vertex(IDX,:)) ;sum( normrow(v3 - v3_old), 1)%v3 = cell2mat(arrayfun(f4,1:n, 'UniformOutput', 0))';getframe;endalpha = alpha - 0.05endwrite_obj('v3_mesh.obj', v3, faces);
endfunction A = compute_A(x, v3, c3, v0, c0, neighbors)A = bsxfun(@minus, v3([x neighbors{x}],:), c3(x))' *  bsxfun(@minus, v0([x neighbors{x}],:), c0(x));
endfunction s = compute_s(x, v3, c3, v0, c0, neighbors)s = realsqrt(sum(normrow(bsxfun(@minus, v3([x neighbors{x}],:), c3(x))).^2,1) / sum(normrow(bsxfun(@minus, v0([x neighbors{x}],:), c0(x))).^2,1));
endfunction D = compute_D(x, v3, v0, neighbors)D = sum(abs(normrow(bsxfun(@minus, v3(neighbors{x},:), v3(x)))-normrow(bsxfun(@minus, v0(neighbors{x},:), v0(x)))) ./ normrow(bsxfun(@minus, v0(neighbors{x},:), v0(x))),1) / length(neighbors{x});
endfunction r = compute_r(x, v0, s, R, t)r = s(x,:) * R(:,:,x) * v0(x,:)' + t(x,:)';
end

Deformable 3D shape registration based on local similarity transforms相关推荐

  1. [论文阅读][深度学习-三维重建]Single-Shot 3D Shape Reconstruction Using Structured Light and CNN

    Single-Shot 3D Shape Reconstruction Using Structured Light and Deep Convolutional Neural Networks 文章 ...

  2. 论文阅读:Multi-view Convolutional Neural Networks for 3D Shape Recognition

    Preface 今天阅读一篇ICCV2015的论文:<Multi-view Convolutional Neural Networks for 3D Shape Recognition>, ...

  3. Combining Visual Cues with Interactions for 3D–2D Registration in Liver Laparoscopy翻译

    Combining Visual Cues with Interactions for 3D–2D Registration in Liver Laparoscopy翻译 0. 摘要 1. 介绍 2. ...

  4. Feature-Steered Graph Convolutions for 3D Shape Analysis(FeaStConv)

    Feature-Steered Graph Convolutions for 3D Shape Analysis(FeaStConv) 摘要 卷积神经网络(CNNs)极大地影响了二维图像的视觉识别,现 ...

  5. [CVPR2020最佳论文详细解读] Unsupervised Learning of Probably Symmetric Deformable 3D Object

    本文是基于CVPR2020最佳论文,来自牛津VGG组的吴尚哲同学Unsup3D.除了中文的详细解析外,我在作者的代码基础上,将可微分渲染模块由原来的Neural Renderer替代为Soft Ras ...

  6. [CVPR2020-best](unsup3d)Unsupervised Learning of Probably Symmetric Deformable 3D Objects from Image

    标题:Unsupervised Learning of Probably Symmetric Deformable 3D Objects from Images in the Wild 链接:http ...

  7. 【代码复现】jointlearningretrievaldeformation,CVPR21_Joint Learning of 3D Shape Retrieval and Deformation

    Run joint_learning_retrieval_deformation CVPR21_Joint Learning of 3D Shape Retrieval and Deformation ...

  8. [CVPR2017](SMAL)3D Menagerie: Modeling the 3D Shape and Pose of Animals

    标题:3D Menagerie: Modeling the 3D Shape and Pose of Animals 链接:https://arxiv.org/pdf/1611.07700 本文是一篇 ...

  9. Paper Reading - 1、Registration based Few-Shot Anomaly Detection

    Registration based Few-Shot Anomaly Detection: 无需微调即可推广,上交大.上海人工智能实验室等提出基于配准的少样本异常检测框架 RegAD的模型架构: T ...

最新文章

  1. 使用二代矫正三代全长转录组数据
  2. 谷歌健康的「文化围墙」:空降的CEO,敌不过傲慢的Jeff Dean,和一群狂热的AI信徒
  3. iOS开发JSON字符串和字典互转
  4. django rest framework------得心应手
  5. 从Google PR值审定标准来学习如何做推广
  6. Natasha 4.0 探索之路系列(四) 模板 API
  7. 前端学习(1847)vue之电商管理系统电商系统的功能划分
  8. 前端学习(1262):fetch请求参数
  9. 求你了,别再说数据库锁的只是索引了!!!
  10. python爬虫爬商品库存_利用Python爬虫爬取指定天猫店铺全店商品信息
  11. 当自己颓废的时候怎么激励自己?深度好文!!!
  12. 课时4—切入切出动画
  13. 回顾18年我的Java自动化测试框架
  14. C#线程 访问资源同步简介
  15. 蓝桥杯 阅兵方阵(预处理+暴力)
  16. linux端口健康检查,linux – Systemd http健康检查
  17. 零基础该怎么去学游戏建模?
  18. cisco3560交换机的策略路由的设置
  19. java生成唯一订单号
  20. 内固定取出术后护理_骨折内固定取出术后注意事项

热门文章

  1. 关闭使用ShellExecute打开的进程
  2. 基于机器视觉的IC表面字符检测
  3. 《小猪佩奇过大年》首映 导演解答“啥是佩奇”
  4. 机器学习实战之Logistic回归
  5. Java Web之基于注解的Spring MVC环境配置
  6. 【echarts】 tooltip显示图片
  7. 050医疗项目-模块五:权限设置-第三方系统的接入
  8. .NET基础编程之特性 - Attribute
  9. 多点触摸与单点触摸接口主要区别【转】
  10. mongodb 日常维护