简单记录一下自己对VisualHull 和 association4D 两个程序的理解,没有别的意思(当然是真的

  由于进度还很慢,暂时只是简单记录一下发现的点和踩过的坑,做完再把资料汇总。

VisualHull

①模块划分

  首先我们需要大致读懂原本的代码。

  直接从main里面看这个程序都做了什么工作,主要消耗时间的是getModel(),getSurface(),saveModel(),saveModelWithNormal(),PoissonRecon.x64,我们就只关心这些好了。

  大致看一下这些模块各自消耗了多少时间:

  

  (此处第一个数字是这个本身模块的耗时,第二个数字是累计耗时,总耗时5.16s,除去外部代码PoissonRecon的话是2.61s)

②初步优化

  接下来我们看看哪些模块可以优化。

  先放一张优化后的图:

  

getModel

  这个部分的作用是将图片信息还原为三维点阵,每个点0/1表示这个点是否在模型的内部。

  原本代码的写法是暴力三个for,每个位置都judge一次,这样显然有大量空白位置被judge了很多次。

  于是我们采用这么一种方法:先随便找到一个在模型内部的点,从这个点开始搜索,遇到模型外部的点就不往外搜,满满填满这个模型的内部。这样一来,如果模型是被分割成多个块,它就只能找到一个,但是没有关系,我们默认人体模型都是连在一起的好了……

  效率:839ms->207ms,这个与最终结果里模型的大小有关,模型越小,效率越高。

saveModel && saveModelWithNormal

  这个纯粹是在输出,就没什么技术含量,但是原代码是用流输出,那显然我们改成fprintf或者fwrite就会快很多。实际快了接近50%。

  到这里前4个模块快了一半,但咱好像没啥可以接着往下做的地方了,比较瓶颈完完全全是在于输出,那个PoissonRecon又实在不想动它。

③尝试自己导ply文件

  查一下ply文件的编码格式,我们就只需要输出一些点的坐标和面的坐标就行了。在前面的getModel、getSurface中我们已经把点处理出来了,那自己把面也捣鼓出来不就完事了嘛。

  从点生成面的部分我是直接枚举点阵中每一个单位立方体,根据8个点的状态来判断要给它加哪些面,大致枚举一下哪些矩形、哪些三角形有可能出现就往里塞。

  

  效率还是很高的,只需0.8s,效果嘛……就有点丑了。

   

  总体看还行,放大看就很粗糙了。

  

association4D

①准备工作

  VisualHull没有任何问题,association4D(15)存在缺dll导致OpenCV无法正常读入视频的问题,更新后时测需要将助教放在x64/Release下的opencv_videoio_ffmpeg310_64.dll修改为opencv_ffmpeg310_64.dll

  原代码在我的笔记本上需要126s左右。嗯,这个时间挺好的,优化起来效率的提高肉眼可见。

  删掉SaveResult最后的三个imwrite,时间降到14s。再仔细测试各模块耗时,输入9+s,SaveResult 4+s,核心工作模块加起来不到0.5s。

  瓶颈在输入输出这让我优化个啥???

VisualHull && association4D 观摩记录的更多相关文章

  1. 罗永浩专访全文记录(转自好奇心日报-http://www.qdaily.com/)

    这篇文章是转的,存档做记录,定期看一看,激励自己遇到到困难时,想想人家比自己难多了,自己那点事算个屁啊.学习别人,不要带有傻逼主观倾向性,这样什么也得不到,我看完后,发现有一句话,说的非常好,自己有自 ...

  2. 记一次debug记录:Uncaught SyntaxError: Unexpected token ILLEGAL

    在使用FIS3搭建项目的时候,遇到了一些问题,这里记录下. 这里是发布搭建代码: // 代码发布时 fis.media('qa') .match('*.{js,css,png}', { useHash ...

  3. nginx配置反向代理或跳转出现400问题处理记录

    午休完上班后,同事说测试站点访问接口出现400 Bad Request  Request Header Or Cookie Too Large提示,心想还好是测试服务器出现问题,影响不大,不过也赶紧上 ...

  4. Kali对wifi的破解记录

    好记性不如烂笔头,记录一下. 我是在淘宝买的拓实N87,Kali可以识别,还行. 操作系统:Kali 开始吧. 查看一下网卡的接口.命令如下 airmon-ng 可以看出接口名称是wlan0mon. ...

  5. 2015 西雅图微软总部MVP峰会记录

    2015 西雅图微软总部MVP峰会记录 今年决定参加微软MVP全球峰会,在出发之前本人就已经写这篇博客,希望将本次会议原汁原味奉献给大家 因为这次是本人第一次写会议记录,写得不好的地方希望各位园友见谅 ...

  6. 分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间)

    分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间) 很多时候我们都需要计算数据库中各个表的数据量和每行记录所占用空间 这里共享一个脚本 CREATE TABLE #tab ...

  7. 我是如何在SQLServer中处理每天四亿三千万记录的

    首先声明,我只是个程序员,不是专业的DBA,以下这篇文章是从一个问题的解决过程去写的,而不是一开始就给大家一个正确的结果,如果文中有不对的地方,请各位数据库大牛给予指正,以便我能够更好的处理此次业务. ...

  8. 前端学HTTP之日志记录

    前面的话 几乎所有的服务器和代理都会记录下它们所处理的HTTP事务摘要.这么做出于一系列的原因:跟踪使用情况.安全性.计费.错误检测等等.本文将谥介绍日志记录 记录内容 大多数情况下,日志的记录出于两 ...

  9. ASP.NET Core应用中如何记录和查看日志

    日志记录不仅对于我们开发的应用,还是对于ASP.NET Core框架功能都是一项非常重要的功能特性.我们知道ASP.NET Core使用的是一个极具扩展性的日志系统,该系统由Logger.Logger ...

随机推荐

  1. Markdown 基础学习

    Markdown是什么?    Markdwon是一种轻量级标记语言,它以纯文本形式(易读.易写.易更改)编写文档,并最终以HTLM格式发布.Markdown也可以理解为将以 MARKDOWN语法编写 ...

  2. 钉钉企业内部H5微应用开发

    企业内部H5微应用开发 分为 服务端API和前端API的开发,主要涉及到进入应用免登流程和JSAPI鉴权. JSAPI鉴权开发步骤: 1.创建H5微应用 登入钉钉开放平台(https://open-d ...

  3. colmap编译过程中出现,无法解析的外部符号错误 “__cdecl google::base::CheckOpMessageBuilder::ForVar1(void)”

    错误提示: >colmap.lib(matching.obj) : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: cl ...

  4. Java垃圾回收。

    一:如何确定哪些对象应该被回收.  1.引用记数法.在对象中添加一个引用计数器,每当有一个地方引用它时,计数器加一,引用失效时,计数器减一,当计数器为0时,该对象是不可用的.   i:缺陷:会产生循环 ...

  5. VirtualBox + vagrant 使用虚拟机

    1.VirtualBox下载地址 https://www.virtualbox.org/wiki/Downloads 2.vagrant下载地址 https://www.vagrantup.com/d ...

  6. 怎么删掉xampp文件夹

    删掉xampp文件夹时,提示:操作无法完成,因为其中的文件夹或文件已在另一程序中打开 具体的解决方法: 菜单栏输入:服务 找到apachezt和mysqlzt,并禁用    -- 因为之前打开Zent ...

  7. java执行hive命令或者脚本

    java执行脚本 import java.io.*; import java.text.DateFormat; import java.text.SimpleDateFormat; import ja ...

  8. Lambda 表达式应用 权限管理_用户的角色修改

    Lambda 表达式应用 权限管理_用户的角色修改 需求 前台发送用户新的角色列表,后台查询出用户原有的角色列表. 1.获取出需增加的角色列表 => 在新角色列表中,但是不在原角色列表中的角色 ...

  9. 微信小程序 - 结构目录 | 配置介绍

    结构目录 小程序框架提供了自己的视图层描述语言 WXML 和 WXSS,以及 JavaScript,并在视图层与逻辑层间提供了数据传输和事件系统,让开发者能够专注于数据与逻辑. 一.小程序文件结构和传 ...

  10. Excel引用和数学函数

    1.indirect函数--引用函数 indirect 英 [ˌɪndəˈrekt] 美 [ˌɪndəˈrekt] adj. 间接的;附带的;闪烁其词的;拐弯抹角的;迂回的;弯曲的 indirect函 ...