织梦CMS - 轻松建站从此开始!

罗索

利用图像抖动来获取物体的轮廓的新型算法

落鹤生 发布于 2010-04-13 23:31 点击:次 
在做差分试验中,发现对于运动快的手臂效果好,而对于很少运动的身体来讲效果不好,无意中摆动摄像头时,发现它可以获得差分后的轮廓,进一步来讲,如果假设摄像头不动,而图像出现抖动的情况,即整个图像向上向左平移一个单位象素,这样在差分中也可以得到轮廓,所以
TAG:

在做差分试验中,发现对于运动快的手臂效果好,而对于很少运动的身体来讲效果不好,无意中摆动摄像头时,发现它可以获得差分后的轮廓,进一步来讲,如果假设摄像头不动,而图像出现抖动的情况,即整个图像向上向左平移一个单位象素,这样在差分中也可以得到轮廓,所以特地在OPENCV5上实现了这个算法。试验的效果还是不错的。

它的好处是一种新颖,简单,计算量小的方法,因为它不需要计算任何梯度,如果采用一些canny,sobel算子,会慢很多,它的缺点是引入了其他物体的干扰。

实际上更大的意义是在一个静态场景中,需要对那些静止的物体进行分割时,不妨采用这种方法,很容易获得轮廓。

算法如下:

//使用帧间差分方法得到轮廓
int HumanMotion::getContour(IplImage *grey, IplImage *pre_grey)
{
 CvMat mat;
 CvMat *temp = cvGetMat(pre_grey , &mat,0 ,2);

 int shift_x = 1;
 int shift_y = 1;

 for(int x=0;x<mat.rows-shift_x;x++)
 {
  for(int y=0;y<mat.step-shift_x;y++)
  {  
   int value =mat.step*x + y;   
   int value2 =mat.step*(x+shift_x) + y + shift_y;
   mat.data.ptr[value]=mat.data.ptr[value2];  
  }
 }

 cvAbsDiff( grey,pre_grey,abs_image );
 cvThreshold( abs_image, abs_image, 20, 255, CV_THRESH_BINARY ); 
 return 0;
}

(hardVB)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201004/9108.html]
本文出处:CSDN博客 作者:hardVB
顶一下
(1)
100%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容