VisualHull && association4D 观摩记录
简单记录一下自己对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 观摩记录的更多相关文章
- 罗永浩专访全文记录(转自好奇心日报-http://www.qdaily.com/)
这篇文章是转的,存档做记录,定期看一看,激励自己遇到到困难时,想想人家比自己难多了,自己那点事算个屁啊.学习别人,不要带有傻逼主观倾向性,这样什么也得不到,我看完后,发现有一句话,说的非常好,自己有自 ...
- 记一次debug记录:Uncaught SyntaxError: Unexpected token ILLEGAL
在使用FIS3搭建项目的时候,遇到了一些问题,这里记录下. 这里是发布搭建代码: // 代码发布时 fis.media('qa') .match('*.{js,css,png}', { useHash ...
- nginx配置反向代理或跳转出现400问题处理记录
午休完上班后,同事说测试站点访问接口出现400 Bad Request Request Header Or Cookie Too Large提示,心想还好是测试服务器出现问题,影响不大,不过也赶紧上 ...
- Kali对wifi的破解记录
好记性不如烂笔头,记录一下. 我是在淘宝买的拓实N87,Kali可以识别,还行. 操作系统:Kali 开始吧. 查看一下网卡的接口.命令如下 airmon-ng 可以看出接口名称是wlan0mon. ...
- 2015 西雅图微软总部MVP峰会记录
2015 西雅图微软总部MVP峰会记录 今年决定参加微软MVP全球峰会,在出发之前本人就已经写这篇博客,希望将本次会议原汁原味奉献给大家 因为这次是本人第一次写会议记录,写得不好的地方希望各位园友见谅 ...
- 分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间)
分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间) 很多时候我们都需要计算数据库中各个表的数据量和每行记录所占用空间 这里共享一个脚本 CREATE TABLE #tab ...
- 我是如何在SQLServer中处理每天四亿三千万记录的
首先声明,我只是个程序员,不是专业的DBA,以下这篇文章是从一个问题的解决过程去写的,而不是一开始就给大家一个正确的结果,如果文中有不对的地方,请各位数据库大牛给予指正,以便我能够更好的处理此次业务. ...
- 前端学HTTP之日志记录
前面的话 几乎所有的服务器和代理都会记录下它们所处理的HTTP事务摘要.这么做出于一系列的原因:跟踪使用情况.安全性.计费.错误检测等等.本文将谥介绍日志记录 记录内容 大多数情况下,日志的记录出于两 ...
- ASP.NET Core应用中如何记录和查看日志
日志记录不仅对于我们开发的应用,还是对于ASP.NET Core框架功能都是一项非常重要的功能特性.我们知道ASP.NET Core使用的是一个极具扩展性的日志系统,该系统由Logger.Logger ...
随机推荐
- Windows下实现应用程序看门狗软件
有时候,我们需要确保一个应用程序长期稳定地运行,但是在Windows平台上由于种种原因,几乎不可能保障一个应用的绝对可靠运行.那么,我们就需要有一个机制,在应用死机﹑异常﹑系统重启等情况下自我恢复,而 ...
- open*** 搭建
pptp 互联网上服务商给拦截.不稳定. opevpn 1.为了保证OpenVPN的安装,需要使用easy-rsa秘钥生成工具生成证书 [root@m01 ~]# yum install easy-r ...
- JavaScript 数据类型转换表
下表显示了将不同的JavaScript值转换为Number,String和Boolean的结果: 原始值 转换为Number 转换为String 转换为Boolean false 0 "fa ...
- ORM:对象关系映射
一.简单操作 定义:面向对象和关系型数据库的一种映射,通过操作对象的方式操作数据 对应关系: 类对应数据表 对象对应数据行(记录) 属性对应字段 导入:from app01 import models ...
- Django框架操作数据库的两种方式
Django操作数据库的前提操作是成功连接数据库,详情见上篇:https://www.cnblogs.com/kristin/p/10791358.html Django查询数据库的方式一 from ...
- 利用Python调用pastebin.com API自动创建paste
在上一篇文章中,已经实现了模拟pastebin.com的账号登录,并且获取了api_dev_key,这一篇文章主要讲一下调用API创建paste 登录之后,进入API页面,发现网站已经提供了几个API ...
- 详解Vue的slot新用法
摘要: 理解Vue插槽. 作者:前端小智 原文:vue 2.6 中 slot 的新用法 Fundebug经授权转载,版权归原作者所有. 为了保证的可读性,本文采用意译而非直译. 最近发布不久的Vue ...
- anaconda配置清华大学开源软件镜像
配置镜像在anaconda安装好之后,默认的镜像是官方的,由于官网的镜像在境外,使用国内的镜像能够加快访问的速度.这里选择了清华的的镜像.镜像的地址如下:tuna.Anaconda 安装包可以到 ht ...
- SQL注入:显错注入
SQL注入的本质 就是把用户输入的数据当做代码执行 注入条件 1.用户能控制输入 2.能够将程序原本执行的代码,拼接上用户输入的数据进行执行 例: http://www.xxx.com/new.php ...
- angular6 使用信息提示框toast
angular6 可以使用的toast插件有好多个,在目前来看ngx-toastr在过去一年时间的使用量和受欢迎程度可以说是一骑绝尘,如下图: 我也就选择了ngx-toastr这个插件,使用步骤如下: ...