2008级计算机学院专业实习报告 基于多摄像机协同的运动对象分割 与三维重建系统 专业名称 实习时间 指导教师 计算机科学与技术 2011.6.7-2011.7.8 杨 涛 副教授 小组成员: 组长 李林 成员 屈冰欣 张鹏 谭明亮 杨海涛 内容 项目简介 研究内容与意义 基本设计思路、设计目标、完成情况 结果自我评价 项目简介 该项目使用棋盘格标定法和激光笔标定法对相机 的内外参数进行标定,并使用混合高斯模型对图像序 列进行背景建模和前景提取,对得到的前景图像进行 去噪处理。三维重建在标准SFS的算法之上,使用快 速分裂算法构建出人体的三维立体图像,并使用快速 体元着色方法对人体的轮廓进行染色。最终在opengl 搭建的一个简单框架中进行显示。 研究内容与意义 研究内容: 基于多摄像机协同的运动对象分割与三维重建系统 摄像机内外参数标定 背景建模与运动前景分割 基于剪影投影的三维重建与显示 研究意义 运动对象分割与三维重建在电影、游戏、人机交互 、视频行为监控、体育运动分析、视频压缩编码、医 疗诊断、虚拟现实等领域均有着广阔的应用前景,而 人体运动的灵活性和复杂性给基于计算机视觉的无标 识点运动捕获技术的研究带来了艰巨的挑战。作为一 种新兴的、拥有诱人发展前景的技术,无标识点人体 运动捕获是目前计算机视觉领域的研究热点,并且是 今后人体运动分析技术的发展趋势。 基本设计思路、设计目标和完成情况 摄像机内外参数标定 背景建模与运动前景分割 基于剪影投影的三维重建显示与染色 摄像机内外参数标定 1.内部定位:确定内部几何参数 2.外部定位:通过场景中的标定点投影确定相机在绝 对坐标系中的方向 3.标定的目的:利用给定物体的参考点坐标和它的图 像坐标来确定摄像机内部的几何和光学特性(内部参 数) 以及摄像机在三维世界中的坐标关系(外部参数) 需要求出的参数:内部参数(镜头焦距, 镜头畸变系数 、坐标扭曲因子、图像坐标原点)和外部参数(摄像 机坐标系相对于世界坐标系得旋转矩阵R 和平移向量 T 实现环境:在matlab环境下求出结果
Download
Report
Transcript 2008级计算机学院专业实习报告 基于多摄像机协同的运动对象分割 与三维重建系统 专业名称 实习时间 指导教师 计算机科学与技术 2011.6.7-2011.7.8 杨 涛 副教授 小组成员: 组长 李林 成员 屈冰欣 张鹏 谭明亮 杨海涛 内容 项目简介 研究内容与意义 基本设计思路、设计目标、完成情况 结果自我评价 项目简介 该项目使用棋盘格标定法和激光笔标定法对相机 的内外参数进行标定,并使用混合高斯模型对图像序 列进行背景建模和前景提取,对得到的前景图像进行 去噪处理。三维重建在标准SFS的算法之上,使用快 速分裂算法构建出人体的三维立体图像,并使用快速 体元着色方法对人体的轮廓进行染色。最终在opengl 搭建的一个简单框架中进行显示。 研究内容与意义 研究内容: 基于多摄像机协同的运动对象分割与三维重建系统 摄像机内外参数标定 背景建模与运动前景分割 基于剪影投影的三维重建与显示 研究意义 运动对象分割与三维重建在电影、游戏、人机交互 、视频行为监控、体育运动分析、视频压缩编码、医 疗诊断、虚拟现实等领域均有着广阔的应用前景,而 人体运动的灵活性和复杂性给基于计算机视觉的无标 识点运动捕获技术的研究带来了艰巨的挑战。作为一 种新兴的、拥有诱人发展前景的技术,无标识点人体 运动捕获是目前计算机视觉领域的研究热点,并且是 今后人体运动分析技术的发展趋势。 基本设计思路、设计目标和完成情况 摄像机内外参数标定 背景建模与运动前景分割 基于剪影投影的三维重建显示与染色 摄像机内外参数标定 1.内部定位:确定内部几何参数 2.外部定位:通过场景中的标定点投影确定相机在绝 对坐标系中的方向 3.标定的目的:利用给定物体的参考点坐标和它的图 像坐标来确定摄像机内部的几何和光学特性(内部参 数) 以及摄像机在三维世界中的坐标关系(外部参数) 需要求出的参数:内部参数(镜头焦距, 镜头畸变系数 、坐标扭曲因子、图像坐标原点)和外部参数(摄像 机坐标系相对于世界坐标系得旋转矩阵R 和平移向量 T 实现环境:在matlab环境下求出结果
2008级计算机学院专业实习报告
基于多摄像机协同的运动对象分割
与三维重建系统
专业名称
实习时间
指导教师
计算机科学与技术
2011.6.7-2011.7.8
杨 涛 副教授
小组成员:
组长 李林
成员 屈冰欣
张鹏
谭明亮
杨海涛
内容
项目简介
研究内容与意义
基本设计思路、设计目标、完成情况
结果自我评价
项目简介
该项目使用棋盘格标定法和激光笔标定法对相机
的内外参数进行标定,并使用混合高斯模型对图像序
列进行背景建模和前景提取,对得到的前景图像进行
去噪处理。三维重建在标准SFS的算法之上,使用快
速分裂算法构建出人体的三维立体图像,并使用快速
体元着色方法对人体的轮廓进行染色。最终在opengl
搭建的一个简单框架中进行显示。
研究内容与意义
研究内容:
基于多摄像机协同的运动对象分割与三维重建系统
摄像机内外参数标定
背景建模与运动前景分割
基于剪影投影的三维重建与显示
研究意义
运动对象分割与三维重建在电影、游戏、人机交互
、视频行为监控、体育运动分析、视频压缩编码、医
疗诊断、虚拟现实等领域均有着广阔的应用前景,而
人体运动的灵活性和复杂性给基于计算机视觉的无标
识点运动捕获技术的研究带来了艰巨的挑战。作为一
种新兴的、拥有诱人发展前景的技术,无标识点人体
运动捕获是目前计算机视觉领域的研究热点,并且是
今后人体运动分析技术的发展趋势。
基本设计思路、设计目标和完成情况
摄像机内外参数标定
背景建模与运动前景分割
基于剪影投影的三维重建显示与染色
摄像机内外参数标定
1.内部定位:确定内部几何参数
2.外部定位:通过场景中的标定点投影确定相机在绝
对坐标系中的方向
3.标定的目的:利用给定物体的参考点坐标和它的图
像坐标来确定摄像机内部的几何和光学特性(内部参
数) 以及摄像机在三维世界中的坐标关系(外部参数)
需要求出的参数:内部参数(镜头焦距, 镜头畸变系数
、坐标扭曲因子、图像坐标原点)和外部参数(摄像
机坐标系相对于世界坐标系得旋转矩阵R 和平移向量
T
实现环境:在matlab环境下求出结果
使用的方法:传统的棋盘格标定法与激光笔标定法
相机标定实现方法和过程
我们知道 相机的标定方法分为:传统标定、主动
视觉相机标定、相机自标定三种方法。他们各有优缺
点,而用棋盘格进行标定的就是介于传统标定与自标
定之间的一种方法。该方法实现简易,是经典的标定
一种方法。
算法描述:
1.将打印好的棋盘格放置与板子上
2.对于同一个相机从不同角度拍摄若干张图片模板,
总共七组。
3.利用程序检测出图像的特征点
4.算出相机的内外参数
5.得出P阵
Kc的调整使角点更加准确
为了将坐标的原点定在地上需外加图片 计算出外参
由以上我们可以计算出
Extrinsic parameters:
Translation vector: Tc_ext = [ -199.261315 -140.949981 4495.576467 ]
Rotation vector: omc_ext = [ 1.611859 2.027308 -0.967351 ]
Rotation matrix: Rc_ext = [ -0.273894 0.953756 -0.123823
0.696247 0.107811 -0.709660
-0.663492 -0.280583 -0.693578 ]
Pixel error:
err = [ 0.06661 0.08295 ]
平移适量 旋转矩阵
Calibration results after optimization (with uncertainties):
Focal Length:
fc = [ 671.64831 671.64831 ] ?[ 15.06941 15.06941 ]
Principal point:
cc = [ 319.50000 239.50000 ] ?[ 0.00000 0.00000 ]
Skew:
alpha_c = [ 0.00000 ] ?[ 0.00000 ] => angle of pixel axes = 90.00000
?0.00000 degrees
Distortion:
kc = [ -0.00000 0.00000 -0.00000 -0.00000 -0.00000 ] ?[ 0.00000
0.00000 0.00000 0.00000 0.00000 ]
Pixel error:
err = [ 0.93017 0.92788 ]
焦距 主点
利用公式求出P阵
激光笔方法由matlab程序自动求出外参与内参 计算P
阵同上 不一一列举
由于激光笔方法坐标原点未定且单位未知需要进行处
理,进行转换后才能使用
背景建模与运动前景分割
应用原理:
高斯模型原理
设计思路:
高斯混合模型提取运动前景
对生成的二值图像进行开运算以用来去噪
设计目标:
通过对视频中前十帧的图像进行学习(不生成二值图像),运用设
计的算法把以后的图像序列中的运动物体提取出来最后生成二值图
像
完成情况:
用测试视频作为输入的视频文件能做较为完整的把运动物体从背景
中分割出来
高斯模型原理
高斯分布,也称为正态分布。对于随机变量x,其概率密度为:
如果一组数据符合高斯分布,那么这种数据中的大多数会集中在以μ 为中心
的-2σ 到2σ 范围内的这段区间里。对于某一场景中的视频图像,如果其背
景相对静止,没有扰动因素,那么背景中的每个像素点在一段时间序列中的
排列就可以用一个高斯分布来描述。但是在实际中,尤其是对于室外的场景
,由于各种噪声的干扰,其背景
变化是比较大的,会出现树枝摇动,光线变化等不同情况。因此用一个高斯
分布就不能来完
全描述实际的背景情况。这种情况下就需要采用多个高斯模型来描述动态的
背景,为不同的
状态建立不同的高斯模型。将k 定义为建立的高斯模型的数目,那么当前观
测点的像素值的
概率密度为:
w, 是每个单高斯模型的权值, i,t−1,k μ 为第i个单高斯模型的均值, i,t −1,k σ
为第i
个单高斯模型的方差。
高斯混合模型提取运动前景
背景训练
模板匹配
背景更新
背景训练
首先为每一像素点建立一个模型,模型的初始
RGB值可有第一帧的像素确定,权值为1,方差与均值
可自己设定,然后对一段帧数的视频进行训练,通过
训练帧中所得到模型计算出均值,方差和权重等各参
数来从作为背景模型的参数。在训练过程中,不必对
每个高斯模型都进行确定,如果对于某一像素点来说,
在训练时间内其灰度值变化不大,即其一个到两个高
斯模型内就已经能包含图像中90%以上的像素值,那
么可直接将有较大的方差和较小的权值的参数赋予其
他模型。
模板匹配
得到了背景模型后,通过模板匹配来进行前景分割。
在进行模板匹配前,首先要对混合高斯模型中的三个
单高斯模型进行降序排序,判断那个高斯模型最有可
能与背景图像进行匹配。由于静态区域的点会比动态
区域点的方差小,且运动物体出现会导致模型更新后
该单高斯模型的权值降低,因此权值越大,方差越小
,匹配度越高。通过公式dist<fTb*var
对混合模型中的各单个高斯模型进行优先级高低的排
序后在进行匹配,其中dist为马氏距离、fTb表示一阀
值,var为模板中的方差。
如果当前帧的像素值与所有的高斯分布模型都不匹配,则
可以判断该点为前景点,但找到匹配的高斯模型后,还不能就
将其判断为背景点。因为背景模型中还是可能包含一定的噪声
和干扰因素,并不是所有的高斯模型能完全代表背景。但由于
噪声等干扰因素不会在图像中长时间停留在某一位置,其相对
应的权值就应该很小。在对高斯模型排序的过程中,需设定一
个权值阀值T。如果排序后所得到的第一个高斯模型的权值大
于该阀值,则B 为1,否则,按顺序累加各高斯模型的权值,只
到其权值大于该阀值,并将该高斯模型序号赋给B。其中B 的定
义如下:
T为一阀值,这里设为0.9。
在上面进行匹配成功的模型中,如果该匹配模型号小于B
值为背景,否则为前景。
背景更新
由于场景中环境的不断变化,通过训练建立好的背景模型
不可能适应新的背景的需要,因此,需要对背景进行实时更新
,以保证前景提取的正确性。
在背景模型更新过程中,引入了学习率alpha 这一概率。当
学习率取值比较小,其适应环境变化的能力就低,需要给足够
的时间才能更新背景模型。相反,当alpha 取值较大时,其对
场景的适应性较强,能很快的变化背景模型,但是对于一段时
间内停留的场景中的目标,却很容易学入背景中去。针对这种
情况,算法对学习率进行调整,在图像中的不同处设定不同的
学习速率,以保证场景变化的需要。学习率的变化范围应该在
0~1 之间。
对k 个高斯模型进行更新,也就是对混合高斯模
型中的三个参数,即权值,均值和方差进行调整。
其权值的更新算法如下:
weight=(1-alpha)*weight+alpha*fCT+alpha*M
fCT为一参数,M 为匹配度,对于匹配上的模型取
值为1,否则取值为0。可见当像素点与高斯模型不匹
配时,其权值会降低。
对于匹配上的i 个高斯模型,需对均值和方差进行
更新。更新算法如下:
未匹配的模型,其均值和方差都保持不变。如果
对于当前点的像素值,其与所有的高斯分布模型都不
匹配,则新建立一个高斯分布将混合高斯模型中排序
最后一个的高斯模型替换掉,同样该分布应选取较大
的方差和较小的权值,而其均值则设为当前像素点的
值。
二值图像开运算
去噪前
去噪后
遇到的问题
改进方法:在背景学习
与背景更新时设置两个
不同的学习率。学习时
设置为0.1,快速学习,
背景模板匹配时为0.0001,
学习较慢。
背景学习学习率过慢
完成情况
基本上上能对运动的物体进行前景提取,有时候
可能会出现一些噪声,视运动物体的表面颜色而定。
原始图像
前景图像
最终的成品
基于剪影投影的三维重建显示和染色
基于SFS的标准体元重建算法
本算法分为三步
1、初始化
初始化最终的重建精度,即每个体元的大小,然后以体元边长作为
划分精度对多视点环境的捕获空间进行割之成为离散体元。
2、计算有效体元
遍历所有体元,并计算每个体元的有效性,利用相机的影矩阵将该
体元的8个顶点投影到所有视点的二维剪影像中,若8个顶点的投影结
果均落在各个视点的剪影内,则认为该体元是有效体元;否则认为该
体元是无效体元。
3、输出重建结果
待重建物体的Visual Hull即为所有有效体元构成的集合。
标准SFS体元重建算法流程
按照所需精度将多视点环境的有效空间划分为离散
的体元将所有体元初始化为内部体元
For所有体元
For8个顶点
For所有视点
将当前顶点根据当前视点的相机投影矩阵投影到剪影图像上
If顶点位于剪影之外
标记当前体元为无效体元
跳过其它视点与顶点,进入下一体元
End
End
End
End
剩余体元即为带重建物体的Visual Hull
步长为0.05的标准SFS算法结果
三维空间体元分裂重建算法
按照较低的初始精度将多视点环境的有效空间划分成离散的体元,并将所有体元初
始化为边界体元
算法流程:
For所有体元
对当前体元进行边界判断
存储边界体元,根据需要输出内部体元
End
While当前重建精度值大于重建要求精度
For所有边界体元
将当前体元等分成8个小型体元
For所有小型体元
对当前体元进行边界判断
存储边界体元,根据需要输出内部体元
End
End
当前重建精度值减半
End
剩余边界体元即为带重建物体的Visual Hull
如何判断边界体元?
1.对于一个分割后的离散体元,在此我们取其为正方体
2.对正方体的每个顶点,计算它是否落在相机的像平面
的人的剪影内,若不是则该体元为无效体元,若是的
话则进行标记。
3.若整个正方体的已标记的顶点数目为 8 ,则这是体内
体元,我们选择不存储。
4.若已标记数目小于 8 ,则这是边界体元,进行存储。
分裂算法实现过程的数据结构
该算法是动态的搜索边界体元,我们事先并不知
道总的数目,因此设计了如下的结构体对已搜索到的
边界体元进行存储:
typedef struct node{
double fx;
double fy;
double fz;
node * next;
}VergeNode;
实现分裂算法主要函数有:
1.初始步长进行搜索生成的初始链表
2.步长未达到阀值,对上一次生成的链表进行扫描,生
成新的边界体元链表
(注意)每进行一次分裂,都重新申请一个链表头结点
初始步长为0.05,最终步长为0.0125
快速体元着色算法
分裂重建算法得到的最终边界体元是存储在一个结构体链表。由于快
速体元着色算法是按照高度从上到下进行扫描,因此我们要对边界体
元进行排序。
解决办法,一个新的结构体:
typedef struct rgbnode{
double ffx;
double ffy;
double ffz;
unsigned int R;
unsigned int G;
unsigned int B;
}RGBNode;
建立一个已知最终体元数目的该结构体的数组,
按照高度使用冒泡排序法进行排序
算法主要步骤:
1.按照高度从上到下依次进行扫描。
2.对每个边界体元,看其投影在八个相机的 几个剪
影中,取颜色的平均值。
3.对于已经着色过的体元,对应的原始图像像素要进行
标记,这样在下层搜索到该像素就不予累加求颜色的
平均值。
实现过程:
对每个像素首先在前景图像中找到有效的投影的
剪影,再依此找到其对应的原始图像的像素值,进行
颜色累加、平均处理。
每个像素处理结束后,在前景图像中要将它对应
的像素进行标记,后续搜索到该像素就不予累加。
到此基于剪影投影的三维重建显示与染色的工作就全
部完成了!
下面请看opengl展示
Opengl展示
自我评价
第一步的相机标定效果不错
第二步的背景建模与前景提取,我们能比较完整地提
取出前景,加上去噪的处理之后效果很好
第三步初始测试结果不错,遗憾的是在今天下午的测
试的时候发现了几个bug,有一部分图片只能重建一
部分或者不能重建。
谢谢大家!!