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 Server 2008 R2 上 Windows Update 无法失败,提示 8024402F
1.同步服务器时间 2.打开 services.msc,停止 Windows Update Service 3.手动下载 KB3138615 补丁:https://support.microsoft. ...
- 基于OpenCV.Net连通域分析进行文本块分割
上一次通过投影的方式进行了文本块分割,(见 https://www.cnblogs.com/BoyTNT/p/11812323.html )但这种方法有很大的局限性,要求分行清晰.不能有字符跨多行.不 ...
- python3.0安装django2.0、xadmin
1.操作环境 Windows10.python3.8 2.安装django2.0 pip install django==2.0 x 1 pip install django==2.0 3.安装相 ...
- SSO单点登录和CAS
一.单点登录流程 =====客户端====== 1.拦截客户端的请求判断是否有局部的session 2.1如果有局部的session,放行请求. 2.2如果没有局部session 2.2.1请求中有携 ...
- 我的第一次diy装机记录——小白的装机篇
接上一篇<我的第一次diy装机记录——小白的配置篇> 处理器 AMD Ryzen 5 2600X 六核主板 微星 B450M MORTAR (MS-7B89) ( AMD PCI 标准主机 ...
- JavaScript实现的图片循环播放
直接上干货 <html> <head> <title>Banner Cycler</title> <script> var banners ...
- Win2003下配置iis+php+mysql+zend
所需软件: ActivePerl.PHP.MYSQL.Zend (一.安装IIS6.0;二.配置PHP环境;三.安装mysql;四.安装 Zend Optimizer;五.配置PHPMYADMIN) ...
- Centos7安装dubbo与zookeeper服务配置
目录 环境: 第一步:安装jdk,并且配置环境变量 1.解压jdk: 2.配置环境变量: 3.保存并使文件立即生效: 4.立即重启虚拟机,进行下面的安装 第二步:安装注册中心zookeeper 1.解 ...
- chrony服务配置
chrony软件使用说明 chrony简介 chrony是一个开源的自由软件,它能保持系统时钟与时间服务器(ntp)同步,让时间保持精确. 它由两个程序组成:chrongd和chronyc. chro ...
- 虚拟机安装苹果macOS系统
Windows10系统虚拟机vmware15上装macos系统 一.简要步骤: 1.准备软件. 2.关闭VMware服务: 3.解压unlocker,运行文件: 4.启动vmware,选择macOS镜 ...