Matlab中的运动历史图像(MHI)

时间:2015-04-29 05:54:03

标签: image matlab opencv motion

我的项目是通过存储的视频剪辑检测人类活动。 我成功地做到了以下几点:

  1. 使用OpenCV
  2. 从视频中获取动态历史记录图像(MHI)
  3. 使用Matlab
  4. 训练和分类图像集

    但是,我想使用Matlab来获取运动历史图像(MHI)。是否有可能,如果是,有人可以指导我吗?谢谢。

    我附上了动态历史记录图像(MHI)样本

    MHI sample

    我已将以下代码用于MHI: http://www.ece.iastate.edu/~alexs/classes/2007_Fall_401/code/09_MotionHistory/motempl.c

1 个答案:

答案 0 :(得分:1)

MHI只是实现运动检测的一种方式(并使用轮廓作为其基础)。

假设已创建最近对象的轮廓。它还使用时间戳来识别当前轮廓是否是最近的。必须将较旧的轮廓与当前轮廓进行比较,以实现运动检测。因此,较早的轮廓也保存在图像中,具有较早的时间戳。

MHI描述了图像序列上某些移动物体的变化。基本上,您应该只维护一个图像,其中每个像素编码时间信息 - 轮廓是否是最近的,或者在给定时间发生移动的位置。

因此,MHI的实施非常简单,例如:

function MHI = MHI(fg)

% Initialize the output, MHI a.k.a. H(x,y,t,T)
MHI = fg;

% Define MHI parameter T
T = 15; % # of frames being considered; maximal value of MHI.

% Load the first frame
frame1 = fg{1};

% Get dimensions of the frames
[y_max x_max] = size(frame1);

% Compute H(x,y,1,T) (the first MHI)
MHI{1} = fg{1} .* T;

% Start global loop for each frame
for frameIndex = 2:length(fg)

    %Load current frame from image cell
    frame = fg{frameIndex};

    % Begin looping through each point
    for y = 1:y_max
        for x = 1:x_max
            if (frame(y,x) == 255)
                MHI{frameIndex}(y,x) = T;
            else
                if (MHI{frameIndex-1}(y,x) > 1)
                    MHI{frameIndex}(y,x) = MHI{frameIndex-1}(y,x) - 1;
                else
                    MHI{frameIndex}(y,x) = 0;
                end
            end
        end
    end
end

代码来自:https://searchcode.com/codesearch/view/8509149/

更新#1:

尝试按如下方式绘制:

% showMHI.m
% Input frame number and motion history vector to display normalized MHI
% at the specified frame.

function showMHI(n, motion_history)

frameDisp = motion_history{n};
frameDisp = double(frameDisp);
frameDisp = frameDisp ./ 15;
figure, imshow(frameDisp)
title('MHI Image');