图像处理运动追踪_图像处理 运动追踪 - CSDN
  • openCV光流法追踪运动物体 email:chentravelling@163.com 一、光流简单介绍 摘自:zouxy09 光流的概念是Gibson在1950年首先提出来的。它是空间运动物体在观察成像平面上的像素运动的瞬时速度,是利用图像序列...

    openCV光流法追踪运动物体

    email:chentravelling@163.com

    一、光流简单介绍

    摘自:zouxy09

            光流的概念是Gibson在1950年首先提出来的。它是空间运动物体在观察成像平面上的像素运动的瞬时速度,是利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存在的相应关系。从而计算出相邻帧之间物体的运动信息的一种方法。一般而言,光流是因为场景中前景目标本身的移动、相机的运动,或者两者的共同运动所产生的。

    研究光流场的目的就是为了从图片序列中近似得到不能直接得到的运动场。运动场,事实上就是物体在三维真实世界中的运动。光流场,是运动场在二维图像平面上(人的眼睛或者摄像头)的投影。

           那通俗的讲就是通过一个图片序列,把每张图像中每一个像素的运动速度和运动方向找出来就是光流场。

    那怎么找呢?咱们直观理解肯定是:第t帧的时候A点的位置是(x1, y1),那么我们在第t+1帧的时候再找到A点,假如它的位置是(x2,y2),那么我们就能够确定A点的运动了:(ux, vy) = (x2, y2) - (x1,y1)。

            那怎么知道第t+1帧的时候A点的位置呢? 这就存在非常多的光流计算方法了。

           1981年,Horn和Schunck创造性地将二维速度场与灰度相联系,引入光流约束方程,得到光流计算的基本算法。人们基于不同的理论基础提出各种光流计算方法,算法性能各有不同。Barron等人对多种光流计算技术进行了总结。依照理论基础与数学方法的差别把它们分成四种:基于梯度的方法、基于匹配的方法、基于能量的方法、基于相位的方法。

    近年来神经动力学方法也颇受学者重视。

    OpenCV中实现了不少的光流算法。

    可參考:http://www.opencv.org.cn/opencvdoc/2.3.2/html/modules/video/doc/motion_analysis_and_object_tracking.html

    1)calcOpticalFlowPyrLK

    通过金字塔Lucas-Kanade 光流方法计算某些点集的光流(稀疏光流)。理解的话,能够參考这篇论文:”Pyramidal Implementation of the Lucas Kanade Feature TrackerDescription of the algorithm”

    2)calcOpticalFlowFarneback

    用Gunnar Farneback 的算法计算稠密光流(即图像上全部像素点的光流都计算出来)。

    它的相关论文是:"Two-Frame Motion Estimation Based on PolynomialExpansion"

    3)CalcOpticalFlowBM

    通过块匹配的方法来计算光流。

    4)CalcOpticalFlowHS

    用Horn-Schunck 的算法计算稠密光流。

    相关论文好像是这篇:”Determining Optical Flow”

    5)calcOpticalFlowSF

    这一个是2012年欧洲视觉会议的一篇文章的实现:"SimpleFlow: A Non-iterative, Sublinear Optical FlowAlgorithm",project站点是:http://graphics.berkeley.edu/papers/Tao-SAN-2012-05/  在OpenCV新版本号中有引入。

           稠密光流须要使用某种插值方法在比較easy跟踪的像素之间进行插值以解决那些运动不明白的像素。所以它的计算开销是相当大的。而对于稀疏光流来说,在他计算时须要在被跟踪之前指定一组点(easy跟踪的点。比如角点),因此在使用LK方法之前我们须要配合使用cvGoodFeatureToTrack()来寻找角点,然后利用金字塔LK光流算法,对运动进行跟踪。

    二、代码

    #include <opencv2\opencv.hpp>
    #include <iostream>
    
    using namespace std;
    using namespace cv;
    const int MAX_CORNERS = 100;
    
    int main()
    {
    	IplImage* preImage = cvLoadImage("image133.pgm",CV_LOAD_IMAGE_GRAYSCALE);
    	IplImage* curImage = cvLoadImage("image134.pgm",CV_LOAD_IMAGE_GRAYSCALE);
    	IplImage* curImage_ = cvLoadImage("image134.pgm");
    	CvPoint2D32f* preFeatures = new CvPoint2D32f[ MAX_CORNERS ];//前一帧中特征点坐标(通过cvGoodFeaturesToTrack获得)  
    	CvPoint2D32f* curFeatures = new CvPoint2D32f[ MAX_CORNERS ];//在当前帧中的特征点坐标(通过光流法获得)
    	double qlevel; //特征检測的指标  
    	double minDist;//特征点之间最小容忍距离  
    	vector<uchar> status; //特征点被成功跟踪的标志  
    	vector<float> err; //跟踪时的特征点小区域误差和 
    	CvSize      img_sz    = cvGetSize(preImage);  
    	IplImage* eig_image = cvCreateImage( img_sz, IPL_DEPTH_32F, 1 );//缓冲区  
    	IplImage* tmp_image = cvCreateImage( img_sz, IPL_DEPTH_32F, 1 );
    	int num = MAX_CORNERS;
    	cvGoodFeaturesToTrack(//获取特征点
    		preImage,
    		eig_image,
    		tmp_image,
    		preFeatures,
    		&num,
    		0.01,  
    		5.0,  
    		0,  
    		3,  
    		0,  
    		0.04  
    		);
    	CvSize pyr_sz = cvSize( curImage->width+8, curImage->height/3 );  
    	IplImage* pyrA = cvCreateImage( pyr_sz, IPL_DEPTH_32F, 1 );  
    	IplImage* pyrB = cvCreateImage( pyr_sz, IPL_DEPTH_32F, 1 );  
    	
    	char features_found[ MAX_CORNERS ];  
    	float feature_errors[ MAX_CORNERS ];  
    
    	
    	cvCalcOpticalFlowPyrLK(//计算光流
    		preImage,
    		curImage,
    		pyrA,
    		pyrB,
    		preFeatures,
    		curFeatures,
    		MAX_CORNERS,
    		cvSize(10,10),
    		5,  
    		features_found,  
    		feature_errors,  
    		cvTermCriteria( CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, 20, .3 ),  
    		0  
    		);
    
    	
    	for(int i=0;i<MAX_CORNERS;i++)//画线
    	{
    	cvLine(
    		curImage_,
    		Point(preFeatures[i].x,preFeatures[i].y),
    		Point(curFeatures[i].x,curFeatures[i].y),
    		CV_RGB(255,0,0),
    		4,
    		CV_AA,
    		0);
    	}
    	
    	cvShowImage("outPutImage",curImage_);
    	//cvSaveImage("outPutImage.pgm",curImage);
    	waitKey(0);
    	return 0;
    }

    终于结果:



    转载于:https://www.cnblogs.com/gavanwanggw/p/7363090.html

    展开全文
  • 运动图像目标检测与跟踪简述

    万次阅读 2017-11-24 14:33:42
    运动图像跟踪问题分为目标检测与目标跟踪两部分 一、目标检测 目标检测即为从序列图像中将变化区域从背景图像中提取出来,依照目标与相机之间的关系可以分为静态背景下运动检测与动态背景下运动检测。 1、静态背景 ...

    运动图像跟踪问题分为目标检测与目标跟踪两部分

    一、目标检测

    目标检测即为从序列图像中将变化区域从背景图像中提取出来,依照目标与相机之间的关系可以分为静态背景下运动检测与动态背景下运动检测。

    1、静态背景

    指的是相机在监视过程中不发生移动,检测目标在相机视场内运动,只有目标相对于相机的运动。

    ●背景差分法:利用当前图像与背景图像的差分来检测运动区域。

    思想:先获得一个背景模型,将当前帧与背景模型相减,如果像素差值大于某一阈值,则判断此像素为运动目标,否则属于背景图像。

    ●帧间差分法:通过相邻两帧图像的差值计算,来获得运动目标轮廓。

    当监控场景中出现异常物体运动时,帧与帧之间会出现较为明显的差别,两帧相减,得到两帧图像亮度差的绝对值,判断它是否大于阈值来分析视频或图像序列的运动特性,确定图像序列中有无物体运动。图像序列逐帧的差分,相当于对图像序列进行了时域下的高通滤波。

    ●光流法:空间中运动可以用运动场描述,图像平面上物体运动通过图像序列中图像灰度分布来体现,从而空间中运动场转移到图像上就表示为光流场。图像上的点与三维物体上的点一一对应,这种对应关系可以通过投影来计算得到。光流场反映了图像上没一点灰度的变化趋势,可看成带灰度的像素点在图像平面运动产生的“”瞬时速度场“”,也是对真实运动场的近似估计。

    思想:如果图像中没有运动目标,则光流矢量在整个图像区域是连续变化的。当图像中有运动物体时,目标和背景存在着相对运动。运动物体所形成的速度矢量必然和背景的速度矢量有所不同,如此便可以计算出运动物体的位置。

    2、动态背景

    指的是相机在监视过程中发生移动(平移、旋转、多自由度运动),产生了目标与相机之间复杂的相对运动。

    由于背景及前景图像都在做全局运动,首先应该进行图像的全局运动估计与补偿。由于遵循相同的运动模型,可以用同一模型参数表示。

    ●块匹配法:将图像分割成不同的图像块,假定同一图像小块上的运动矢量相同,通过像素域搜索得到最佳运动矢量估计。

    关键技术:匹配法则(最大相关、最小误差)、搜索方法(三步搜索法、交叉搜索法)、块大小的确定(分级、自适应)

    ●光流估计法:对帧图像建立光流场模型后,用光流场方法求解图像像素点运动速度。

    二、特征跟踪

    在序列图像中每幅图像中实时找到感兴趣的运动目标。一类为不依赖于先验知识,直接从图像序列中检测运动目标;另一类为以来目标先验知识,首先为运动目标建模,然后在图像序列中实时找到相匹配的运动目标。

    1、运动目标有效表达

    包括视觉特征(图像边缘、轮廓、形状、纹理、区域)、统计特征(直方图)、变换系数特征(傅里叶、自回归模型)、代数特征(图像矩阵的奇异值分解)

    2、相似性度量算法

    相似性度量算法与帧图像进行匹配,实现目标跟踪。常见有欧氏距离、棋盘距离、加权距离等

    3、搜索算法

    预测运动物体下一帧可能出现位置,在相关区域内寻找最优点。KF、EKF、粒子滤波。卡尔曼滤波器是对一个动态系统状态序列进行线性最小方差估计的算法,基于以前的状态序列对下一个状态做最优估计。

    另一类减小搜索范围的算法是优化搜索方向。利用无参估计的方法优化目标模板与候选目标距离的迭代收敛过程,以达到缩小搜索范围的目的。

    Meanshift(均值漂移算法):利用梯度优化方法实现快速目标定位,适用于非线性运动目标的跟踪、对目标变形、旋转有较好适用性。缺点:没有利用目标在空间中运动方向和运动速度信息,遮挡时丢失目标。

    Camshift(连续自适应均值漂移算法):在meanshift基础上结合目标色彩信息。由于目标图像直方图记录的是颜色出现的概率,这种方法不受目标形状变化的影响,但开始前需要人工置指定跟踪目标。

    思想:对视频序列的所有图像帧都作MeanShift运算,并将上一帧的结果(即搜索窗口的中心位置和窗口大小)作为下一帧MeanShift算法的搜索窗口的初始值,如此迭代下去。简单点说,meanShift是针对单张图片寻找最优迭代结果,而camShift则是针对视频序列来处理,并对该序列中的每一帧图片都调用meanShift来寻找最优迭代结果。正是由于camShift针对一个视频序列进行处理,从而保证其可以不断调整窗口的大小,如此一来,当目标的大小发生变化的时候,该算法就可以自适应地调整目标区域继续跟踪。

    4、目标跟踪分类

    依据运动目标的表达和相似性度量,运动目标跟踪算法可以分为四类:基于主动轮廓的跟踪、基于特征的跟踪、基于区域的跟踪和基于模型的跟踪。跟踪算法的精度和鲁棒性很大程度上取决于对运动目标的表达和相似性度量的定义,跟踪算法的实时性取决于匹配搜索策略和滤波预测算法。

    ●基于特征跟踪:不考虑运动目标的整体特性,假定运动目标可以由唯一的特征集合表达,搜索到相应的特征集合就认为跟踪上了运动目标,只通过目标图像的显著特征跟踪。

    1、特征提取  

    2、特征匹配:进行帧间目标特征的匹配,并以最优匹配来跟踪目标。常见,基于二值化目标图像匹配、基于边缘特征匹配、角点特征匹配、基于目标灰度特征匹配、基于目标颜色特征匹配。

    ●基于区域的跟踪

    得到包含目标的模板,该模板可通过图像分割获得,模板通常为略大于目标的矩形。




    展开全文
  • 视频中用图形框起运动物体 代码拷贝http://blog.csdn.net/u011630458/article/details/45895649,我在其中将圆形框注释掉,换成矩形框。代码如下: // moving detection.cpp : 定义控制台应用程序的入口点。 /...

    视频中用图形框起运动物体

    代码拷贝http://blog.csdn.net/u011630458/article/details/45895649,我在其中将圆形框注释掉,换成矩形框。代码如下:

    // moving detection.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    
    
    
    
    #include <opencv2/opencv.hpp>
    #include <iostream>
    #include "opencv2/core/core.hpp"                                                                                                     
    #include "opencv2/video/background_segm.hpp"
    #include "opencv2/imgproc/imgproc_c.h"
    #include "opencv2/highgui/highgui.hpp"
    #include "opencv2/legacy/legacy.hpp"
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <ctype.h>
     
    using namespace cv;
     
    int main(int argc, char** argv){
        Mat frame, fgmask, segm, find_shape;
    	vector<vector<Point> > contours;
    	vector<Vec4i> hierarchy;
     
        Ptr<BackgroundSubtractorGMG> fgbg = Algorithm::create<BackgroundSubtractorGMG>("BackgroundSubtractor.GMG");
        if (fgbg.empty()){
            std::cerr << "Failed to create BackgroundSubtractor.GMG Algorithm." << std::endl;
            return -1;
        }
     
        fgbg->set("initializationFrames", 20);
        fgbg->set("decisionThreshold", 0.7);
     
        VideoCapture cap;
        cap.open("C:\\Users\\Administrator\\Desktop\\数据\\chuli\\chuli\\car.avi");
        if (!cap.isOpened()){
            std::cerr << "Cannot read video. Try moving video file to sample directory." << std::endl;
            return -1;
        }
        namedWindow("detection", WINDOW_NORMAL);
    	for (;;){
    		if (!cap.read(frame)){
    			break;
    		}
     
    		(*fgbg)(frame, fgmask);
     
                    frame.copyTo(segm);
    		IplImage ImaskCodeBook = fgmask;
    		cvSegmentFGMask(&ImaskCodeBook);
    		fgmask.copyTo(find_shape);
     
    		findContours(find_shape, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0));
    		//vector<vector<Point> > contours_poly( contours.size());
    		vector<Rect>boundRect(contours.size());
    		//vector<Point2f>center( contours.size());
    		//vector<float>radius( contours.size());
    		for( int i = 0; i < contours.size(); i++){
    			boundRect[i]=boundingRect( Mat(contours[i]));
    			//approxPolyDP( Mat(contours[i]), contours_poly[i], 3, true);//绘制曲线逼近多边形
    			//minEnclosingCircle( contours_poly[i], center[i], radius[i]);//圆形
    		}
    		for(int i = 0; i< contours.size(); i++ ){
    			rectangle(segm,boundRect[i].tl(),boundRect[i].br(), Scalar(255, 0, 0), 2, 8, 0);
    			//circle(segm, center[i], (int)radius[i], Scalar(100, 100, 0), 2, 8, 0);	
    		}
     
            imshow("detection", segm);
           // imshow("mask", fgmask);
     
            int c = waitKey(30);
            if (c == 'q' || c == 'Q' || (c & 255) == 27)
                break;
        }
     
        return 0;
    }
    
    


    展开全文
  • 图像处理目标跟踪:运动模型

    千次阅读 2019-07-21 11:27:46
    图像处理目标跟踪:运动模型 来源:机动目标跟踪算法的研究,为Singer模型和相关模型。 Singer模型提出论文下载地址:Estimating OptimalTracking Filter Performance for MannedManeuvering Targets。 ...

                                                 图像处理目标跟踪:运动模型

     

    来源:机动目标跟踪算法的研究,为Singer模型和相关模型。

    Singer模型提出论文下载地址:Estimating OptimalTracking Filter Performance for MannedManeuvering Targets

     

     

     

     

     

    展开全文
  • 注:本博文将讲解一个FPGA设计图像处理系统实例,此实例的功能为高速追踪乒乓球。读者可以参考本博文的算法思路、工程框架,但博主并不提供工程。 当前,实用的图像处理系统都要求高速处理。目前广泛采用软件进行...
  • 图像处理项目-监控视频的行人追踪

    千次阅读 2017-08-17 09:57:19
    要求:根据提供的监控视频图像追踪视频中行人并对其运动轨迹做出预判。 实现 视频图像的行人认定为图像的前景区域,识别新人即为分割图像的前景背景,故可使用knn实现分割 利用opencv的BackgroundSubtractorKNN...
  • 图像处理之目标跟踪 简单分类 罗列    目标跟踪发展十分快,门类非常多,这里简单将其罗列,主要参考:   HakaseH Tracking Benchmark for Correlation Filters  另外推荐:  foolwood Benchmark...
  • 运动物体检测以及追踪

    万次阅读 2020-01-15 14:26:49
    概括:运动物体检测是应用差分法实现,运动物体追踪是利用基于时间序列预测模型实现。 运动物体检测 常用的检测方法为背景减除法和帧差法,这两种方法原理基本上都是图片相减。两种方法各有优缺点: 帧差法适用...
  • 数字图像处理第八章——图像压缩

    千次阅读 2019-05-09 08:40:13
    数字图像处理第八章数字图像处理---图像压缩(一) 背景(二) 编码冗余2.1 霍夫曼码2.2 霍夫曼编码2.3 霍夫曼译码(三)空间冗余(四)不相关的信息(五)JPEG 压缩5.1 JPEG5.2 JPEG 2000(六)视频压缩6.1 MATLAB...
  • opencv实现运动追踪

    千次阅读 2015-05-20 20:48:53
     在本篇中,我们分别使用opencv提供的方法:BackgroundSubtractorMOG 和 CvBGCodeBookModel两种方式来实现video的运动跟踪。 BackgroundSubtractorMOG  在这里,首先要感谢:...
  • OPENCV运动追踪研究和PYTHON及JAVA实现

    千次阅读 2017-08-24 09:34:40
    opencv运动追踪可以用来捕捉到运行物体或者活物,在被动摄像头上应用,可以在运行时录相,节省宝贵的存储空间。一个外国老哥借助树霉派的摄像头使用PYTHON做一个简单的运行捕捉摄像头,用于捕捉工作时间偷喝他冰箱里...
  • 数字图像处理(冈萨雷斯 第三版)

    万次阅读 2019-01-13 15:37:54
    1.1 图像与图像处理的概念 图像(Image): 使用各种观测系统以不同形式和手段观测客观世界而获得的,可以直接或间接作用于人眼并进而产生视觉的实体。包括: ·各类图片,如普通照片、X光片、遥感图片; ·各类...
  • 《数字图像处理》复习提纲

    千次阅读 2019-06-11 09:44:34
    本文在撰写过程中参考了由何东健教授主编、西安电子科技大学出版社出版的《数字图像处理》(第三版),一切著作权归原书作者和出版社所有。特别感谢长安大学软件系老师的认真负责的教导。 第1章 概论 1.1 数字...
  • 图像处理也可以分为好几种,比如做人脸识别的,机器视觉的等等,本文所说的图像处理并不是这两个类型,而是用于摄像测量方向的,摄像测量学可以分为单目测量和多目立体测量,本文所提供的方法的程序,均可使用,因为...
  • 检测是计算机视觉任务中的主要任务之一,而且应用很广泛。... 理解颜色模型与在图像上绘制图形(图像处理基本操作)。 基本的图像处理与滤波技术。 从特征检测到人脸检测。 轮廓检测...
  • 视频图像处理系统即基于图像处理算法对视频图像进行处理的系统。视频图像处理系统跟当代科学技术的发展是密不可分的。一个方面随着计算机技术的发展,CPU计算能力的不断提高,存储空间的大幅度提升,硬件支持方法的...
  • 运动物体追踪迹(含图像和代码,可直接运行),主要是乒乓球追踪,但是修改代码同样可适用于其他物体追中,是图像处理课大型试验
  • 用MATLAB实现对运动物体识别与跟踪

    万次阅读 多人点赞 2016-12-03 17:28:25
    不得不说MATLAB的图像处理函数有点多,但速度有时也是出奇的慢。还是想c的指针,虽然有点危险,但速度那是杠杠的。 第二个MATLAB程序,对运动物体的识别与追踪。 这里我们主要运用帧差法实现运动物体与背景图像的...
  • 官方卡尔曼滤波目标追踪实例c++版,本文的opencv版本代码是由改代码改编而来 link kalman滤波相关知识,理解等 link hsv色彩对照表:(设置运动目标hsv阈值时要用到) 实现效果: 需要视频的话可以去我的下载里面...
1 2 3 4 5 ... 20
收藏数 6,661
精华内容 2,664
关键字:

图像处理运动追踪