zoukankan      html  css  js  c++  java
  • L-K光流法---视频追踪

         光流法基本概念介绍如下:https://chunqiu.blog.ustc.edu.cn/?p=661

         原文作者阐述的十分详细,按照我一个行外人的理解来说就是一个运动模糊轨迹实时检测。视频光流检测所有代码如下:

      

    % 光流法测试--视频
    clc
    clear
    close all
    % 读取文件对象
    videoReader = vision.VideoFileReader('D:桌面图像处理0-1-
    
    1.avi','ImageColorSpace','Intensity','VideoOutputDataType','uint8');
    % 类型转化对象
    converter = vision.ImageDataTypeConverter;
    % 光流对象
    opticalFlow = vision.OpticalFlow('ReferenceFrameDelay', 1);
    opticalFlow.OutputValue = 'Horizontal and vertical components in complex form';
    if 0 % 使用的算法
    opticalFlow.Method = 'Lucas-Kanade';
    opticalFlow.NoiseReductionThreshold = 0.001; % 默认是0.0039
    else
    opticalFlow.Method = 'Horn-Schunck';
    opticalFlow.Smoothness = 0.5; % 默认是1
    end
    % 显示对象
    frame = step(videoReader);
    figure
    subplot(121)
    himg = imshow(frame);
    subplot(122)
    hof = imshow(frame);
    % 开始播放
    while ~isDone(videoReader)
    % 得到一帧
    frame = step(videoReader);
    % 格式转化
    im = step(converter, frame);
    % 计算光流
    of = step(opticalFlow, im);
    % 光流图转化
    ofI = computeColor(real(of), imag(of));
    % 显示
    set(himg, 'cdata', frame)
    set(hof, 'cdata', ofI)
    drawnow
    end
    release(videoReader);
    
    function img = computeColor(u,v)
    %   computeColor color codes flow field U, V
    %   According to the c++ source code of Daniel Scharstein
    %   Contact: schar@middlebury.edu
    %   Author: Deqing Sun, Department of Computer Science, Brown University
    %   Contact: dqsun@cs.brown.edu
    %   $Date: 2007-10-31 21:20:30 (Wed, 31 Oct 2006) $
    % Copyright 2007, Deqing Sun.
    %
    %                         All Rights Reserved
    %
    % Permission to use, copy, modify, and distribute this software and its
    % documentation for any purpose other than its incorporation into a
    % commercial product is hereby granted without fee, provided that the
    % above copyright notice appear in all copies and that both that
    % copyright notice and this permission notice appear in supporting
    % documentation, and that the name of the author and Brown University not be used in
    % advertising or publicity pertaining to distribution of the software
    % without specific, written prior permission.
    %
    % THE AUTHOR AND BROWN UNIVERSITY DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
    % INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ANY
    % PARTICULAR PURPOSE.  IN NO EVENT SHALL THE AUTHOR OR BROWN UNIVERSITY BE LIABLE FOR
    % ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    % WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    % ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
    % OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    nanIdx = isnan(u) | isnan(v);
    u(nanIdx) = 0;
    v(nanIdx) = 0;
    colorwheel = makeColorwheel();
    ncols = size(colorwheel, 1);
    rad = sqrt(u.^2+v.^2);         
    a = atan2(-v, -u)/pi;
    fk = (a+1) /2 * (ncols-1) + 1;  % -1~1 maped to 1~ncols
    k0 = floor(fk);                 % 1, 2, ..., ncols
    k1 = k0+1;
    k1(k1==ncols+1) = 1;
    f = fk - k0;
    
    for i = 1:size(colorwheel,2)
        tmp = colorwheel(:,i);
        col0 = tmp(k0)/255;
        col1 = tmp(k1)/255;
        col = (1-f).*col0 + f.*col1;  
        idx = rad <= 1;  
        col(idx) = 1-rad(idx).*(1-col(idx));    % increase saturation with radius
        col(~idx) = col(~idx)*0.75;             % out of range
        img(:,:, i) = uint8(floor(255*col.*(1-nanIdx)));        
    end;   
    
    %%
    function colorwheel = makeColorwheel()
    %   color encoding scheme
    %   adapted from the color circle idea described at
    %   http://members.shaw.ca/quadibloc/other/colint.htm
    RY = 15;
    YG = 6;
    GC = 4;
    CB = 11;
    BM = 13;
    MR = 6;
    
    ncols = RY + YG + GC + CB + BM + MR;
    colorwheel = zeros(ncols, 3); % r g b
    col = 0;
    %RY
    colorwheel(1:RY, 1) = 255;
    colorwheel(1:RY, 2) = floor(255*(0:RY-1)/RY)';
    col = col+RY;
    %YG
    colorwheel(col+(1:YG), 1) = 255 - floor(255*(0:YG-1)/YG)';
    colorwheel(col+(1:YG), 2) = 255;
    col = col+YG;
    %GC
    colorwheel(col+(1:GC), 2) = 255;
    colorwheel(col+(1:GC), 3) = floor(255*(0:GC-1)/GC)';
    col = col+GC;
    colorwheel(col+(1:CB), 2) = 255 - floor(255*(0:CB-1)/CB)';
    colorwheel(col+(1:CB), 3) = 255;
    col = col+CB;
    %BM
    colorwheel(col+(1:BM), 3) = 255;
    colorwheel(col+(1:BM), 1) = floor(255*(0:BM-1)/BM)';
    col = col+BM;
    %MR
    colorwheel(col+(1:MR), 3) = 255 - floor(255*(0:MR-1)/MR)';
    colorwheel(col+(1:MR), 1) = 255;
    

     运行结果如下图所示:

        

        

       

  • 相关阅读:
    最全的曲文检测整理
    论文速读(Chuhui Xue——【arxiv2019】MSR_Multi-Scale Shape Regression for Scene Text Detection)
    论文速读(Jiaming Liu——【2019】Detecting Text in the Wild with Deep Character Embedding Network )
    论文速读(Yongchao Xu——【2018】TextField_Learning A Deep Direction Field for Irregular Scene Text)
    【论文速读】Yuliang Liu_2017_Detecting Curve Text in the Wild_New Dataset and New Solution
    【论文速读】XiangBai_CVPR2018_Rotation-Sensitive Regression for Oriented Scene Text Detection
    【论文速读】XiangBai_TIP2018_TextBoxes++_A Single-Shot Oriented Scene Text Detector
    【论文速读】Shitala Prasad_ECCV2018】Using Object Information for Spotting Text
    【论文速读】Sheng Zhang_AAAI2018_Feature Enhancement Network_A Refined Scene Text Detector
    【论文速读】Shangbang Long_ECCV2018_TextSnake_A Flexible Representation for Detecting Text of Arbitrary Shapes
  • 原文地址:https://www.cnblogs.com/Martin-Ma/p/4325633.html
Copyright © 2011-2022 走看看