最近在做双目视觉和三维重构,这是这段时间的劳动成果,放上来与大家分享,算是给大家新年的祝福,新年快乐!
这是一组工具,可以一步步实现一个不成熟的三维书写系统。
因为有一组视频数据,所以放到了Google Code,程序源码及样本数据都有。
项目地址:https://github.com/zhijie/3d-reconstruction-tools
最最终效果演示:http://v.youku.com/v_show/id_XMjMzNjk1ODAw.html
下面对几个工具做一个简单的介绍
0.TestImageGenerate
这个工具本意是用以产生三维视图中的简单物体图像,因为已知参数,可以检测标定处理的结果是否准确
但效果不好,仅当一个编程练习吧。mfc dialog+OpenGL
1.ChessboardImageGenerator
用于产生指定的棋盘图片,做标定时要用各种图像,棋盘是最常用的。有这个工具就不用去画了,棋盘虽然简单,但用画图画起来还是挺麻烦的
一个例子
2.ImageSampler
同时从两个摄像头采集图像并保存
3.VideoRecorder
同时从两个摄像头采集视频并保存为AVI
4.ChessboardCornerFinder
找到棋盘图像的各个角点,并产生画出角点的图像,而且保持角点位置到文件
右左
保存文件
5.GetFingerPos
提取视频中每一帧图像的手指顶点的位置,并保存到文件
重要说明,目前,手指顶点的检测方法为肤色检测,找到手的区域后,假设y值最大的即为顶点。这个假设的基础是,在录制视频时,手的运动主要为平移,没有大的旋转。在视频中可以发现这个特点。这是目前简化处理的一个手段,但仍不失现实意义
看截图就知道了
为了增加手指定位的准确度,黄色的家用橡胶手套都用上了。这样效果更好,但在后期,还将提高裸手识别准确度,以代替别的辅助设备
6.CalibrateFromPoints
从棋盘角点数据文件进行标定,并保存结果
7.Show3dPoints
这是最后一步,也是演示视频中用到的工具
使用在两个视频中找到的手指顶点和之前保存的 标定参数,进行重构,并显示。
运行效果截图:
1.这是画的五角星重构后的不同视角截图
2.下面是我写的字“01s”,我的网名简写
同时这个工具可以把重构后的点还原到左右视图中
但目前有一个问题,就是还原后左右视图中有一个总是错误,如图
1.五角星的左右视图还原
2.“01s”的还原
我将在后续工作中改正之。
看这几张图像时注意,我画的时候是面对摄像头的,而这些图像是摄像头的视角,所以是反的
================================================================================
为了方便大家运行改程序,在程序源码的各个文件夹中都有简单的运行方法说明。在运行时请注意查看源码,几个工具的代码都有读入之前工具产生的数据文件或视频或图像,这就会有一个路径问题,可以根据自己的情况,只需修改路径即可。
你下载的程序都可直接运行,目录结构已经经过特意安排。在看到读入文件错误时,请查看源码,注意路径。
另外注意把下载的视频放到程序解压后文件夹的data/videos中
------------------------------------------------------------------------------------------------------------------------------------
这一组工具组成了完整的一个系统,也代表三维书写或相关系统的一个处理过程
简单重复一遍:
1.做标定板,放置摄像头(ChessboardImageGenerator)
2.采集棋盘图像用以标定(ImageSampler)
3.录制视频(VideoRecorder)(以后如果做成完整的系统,就不用录制了,可以进行实时处理,录制视频也是为了方便做试验)
4.找到棋盘图像的角点(ChessboardCornerFinder)
5.摄像头标定(CalibrateFromPoints)
6.找到视频中手指的位置(GetFingerPos)
7.重构并显示(Show3dPoints)
===============================================================================
我的试验环境
标定板,把产生的棋盘打印出来就成:
右左
相关文章链接: