简单记录一下自己对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. 在vue项目中通过iframe引入jquery项目

    最近公司因为原来的jq框架存在的问题太多,所以要进行主题框架的重新搭建,我使用的vue进行的主题框架的重新搭建,但是原来的页面已经完成很多了,而且都是使用的jquery进行开发的 在vue中引入jqu ...

  2. android studio学习----gradle多渠道打包

    由于国内Android市场众多渠道,为了统计每个渠道的下载及其它数据统计,就需要我们针对每个渠道单独打包,如果让你打几十个市场的包岂不烦死了,不过有了Gradle,这再也不是事了. 友盟多渠道打包 废 ...

  3. linux线程绑定cpu

    函数介绍 #define __USE_GNU #include <sched.h> void CPU_ZERO(cpu_set_t *set); void CPU_SET(int cpu, ...

  4. Spring获取springmvc的controller bean

    有个特殊需求,一个普通的类,定时任务,需要获取SpringMVC的controller对应的bean: 方法: WebApplicationContext wac = ContextLoader.ge ...

  5. 关于使用repo时repo init和repo sync失败的一个解决方案

    由于我国的网络的原因,在访问谷歌等一些国外网络资源时经常会遇到被拦截的情况,导致repo等一些代码管理工具拉取代码网络受限受阻,下面提供一个可以参考的简单解决方案. 1.repo init时的遇到fa ...

  6. sql注入知识点

    需找sql注入点1\无特定目标inurl:.php?id= 2\有特定目标:inurl:.php?id= site:target.com 3\工具爬取spider,对搜索引擎和目标网站的链接进行爬取 ...

  7. jmeter,学这些重点就可以了

    前言 对测试来说,jmeter应该是大家使用较频繁的测试工具之一,因为其开源.免费.轻量.功能强大,支持很多种协议,除了测功能,还能做自动化和性能测试: 据某机构的调查,性能并发工具中,jmeter市 ...

  8. http中get,post,put,delete方法的用法以及区别

    http协议是一种在网络中进行文件传送遵循的协议.一种无状态的协议.http协议服务器端不跟浏览器端建立长久的通信连接. 建立http通信之后,服务端将文件内容传送给浏览器端接收就完成一次请求.当然一 ...

  9. 02-cmake语法-if、条件表达

    格式: if(expression) # then section. COMMAND1(ARGS ...) COMMAND2(ARGS ...) ... elseif(expression2) # e ...

  10. Tomcat的下载和安装

    登录Tomcat 站点,下载Tomcat最新版本http://tomcat.apache.org/Windows平台下载ZIP包,LInux平台下载TAR包,不建议下载安装文件,因为安装文件的 Tom ...