Steven Wang's Blog
C'est la vie
rss
email
twitter
新浪微博
  • Home
  • About
  • Google Profile
  • 新浪微博

Kalman滤波更新运动图像背景的C语言实现

0 Comments
Posted on 三月 7 2010

使用基于Kalman滤波理论的时域递归低通滤波来预测缓变的背景图像也可以看作是一种基于运动检测的多帧降噪方法。利用Kalman滤波器的记忆特性, 对一定时间长度的视频图像信息进行加权平均从而获得与实际背景图像近似的初始背景, 同时达到了滤除颗粒噪声、消除摄像机抖动不良效果的目的, 为下一步提取我们感兴趣的运动目标创造了有利条件, 而且获得的初始背景的质量不依赖于起始时间。

视频图像序列经过Kalman滤波器时,图像序列的缓变部分可以从图像的快速变化过程中分离出来,并在加权平均中使得背景得到更新。其表达式为:
B(i, j, k + 1) = B(i, j, k) + G(k) * [F(i, j, k) - B(i, j, k)]
G(k) = α * M(i, j, k) + β * [1 - M(i, j, k)]
若|F(i, j, k) - B(i, j, k)| > T,则M(i, j, k) = 1,否则M(i, j, k) = 0
其中,k是当前帧的序号,B(i, j, k)是当前帧的背景在坐标(i, j)处的灰度值,B(i, j, k + 1)是估计得到的更新背景在(i, j)处的灰度值,F(i, j, k)是当前输入的第k帧图像在(i, j)位置的像素灰度值。α是运动因子,β是背景因子,这是两个经验值,取值介于0和1之间, 必须足够小, 以便运动物体能够从背景序列中有效地分离出来。T是当前输入的第k帧图像的分割阈值,可使用OTSU算法得到,详情可以参考:OTSU算法提取图像阈值的C语言实现

以下是一段在OpenCV中实现的C语言程序,即一个使用Kalman滤波更新运动图像背景的函数,输入的参数依次为:当前灰度图像数据指针、背景图像数据指针、图像宽度、图像高度、图像的分割阈值。函数更新了背景图像数据指针所指向的数据。

void kalmanFilter(uchar* gdata, uchar* bdata, 
						int width, int height, int threshold)
{
	float alpha = 0.025, beta = 0.01, g;
	int i, j, index, m;
	for(i = 0;i < height;i++)
	{
		for(j = 0;j < width;j++)
		{
			index = i * width + j;
			if(abs((float)gdata[index] - (float)bdata[index]) 
				> threshold)
			{
				m = 1;
			}
			else
			{
				m = 0;
			}
			g = alpha * m + beta * (1 - m);
			bdata[index] = (float)bdata[index] + 
				g * ((float)gdata[index] -(float)bdata[index]);
		}
	}
}
--End--
作者:Steven Wang | 可以转载, 转载时务必以超链接形式标明文章原始出处和作者信息及版权声明
网址:http://blog.stevenwang.name/kalman-filter-video-56003.html

Relate Posts:

  • 最近项目的一点总结
  • OTSU算法提取图像阈值的C语言实现

Tags: Kalman滤波  背景更新  OpenCV 
Categories: 数字图像处理 

Leave a Reply



About Me

    Steven Wang
    Student in Computer Software and Theory
    Life@Wuxi, Jiangsu
    Study@Jiangnan University
    more...

Feeds

  • Entries (RSS)
  • Comments (RSS)
  • 订阅到 Google Reader
  • 订阅到 抓虾
  • 订阅到 鲜果
  • 订阅到 QQ

Popular Posts

  • 围着脖子推GTalk机器人V1.0发布(27299)
  • 通过SSH + Chrome + Proxy Switchy!代理上网(19678)
  • 在GAE上部署Micolog博客系统(11307)
  • 围着脖子推V2.0 Beta1版发布 支持Twitter,新浪微博,人人网,嘀咕,做啥 同步更新(11060)
  • 围着脖子推GTalk机器人V1.0更新-增加接收Twitter更新等功能(10663)
  • 围着脖子推更新-增加同步更新网易微博、腾讯微博和搜狐微博(10483)
  • 在Matlab中实现Hough变换检测直线(8448)
  • Micolog主题(theme) —— translucence(7842)

Recent Posts

  • Steven Wang's 2011
  • 工作
  • T400升级Intel SSD
  • Java中的时区转换小结
  • 二值图像连通区标记之区域生长法
  • Steven Wang's 2010
  • 微博提醒应用上线
  • 双喜临门

Recent Comments

  • Queen:加油。...
  • Queen:hi,我来打个招呼,深圳的朋友。...
  • yu :@Steven Wang, p<...
  • ixwebhosting:文章总结的好潇洒,即将对末来学生生活说声...
  • john:希望新的一年更加美好...

Categories

  • Google App Engine(10)
  • 数字图像处理(11)
  • Micolog(7)
  • VPS(6)
  • 围着脖子推(15)
  • 人工神经网络(5)
  • 算法(11)
  • MyLife(16)
  • 媒体检索(4)
  • Others(8)
  • Python(2)

Archives

  • January 2012(1)
  • December 2011(2)
  • May 2011(1)
  • February 2011(1)
  • December 2010(3)
  • November 2010(1)
  • October 2010(1)
  • September 2010(4)
  • August 2010(2)
  • July 2010(5)
  • June 2010(4)
  • May 2010(7)

Blog roll

  • ~Issue
  • Fenng
  • 刘未鹏 | Mind Hacks
  • 林海听松
  • Yu Zheng
  • Johnny Han
  • 静静的安静
  • Dbger
  • land of promise
  • 星星
  • ISHENS|TECH
  • 天天软件园
  • leezhenchong's blog
  • 苏洋博客

  • Home
  • About
  • Google Profile
  • Twitter
  • 新浪微博
  • Login
Powered by Google App Engine  |   Designed by WebTreats  |   由 xuming 提供 Micolog程序