【问题标题】:Real time Motion History Image (MHI) in MatlabMatlab中的实时运动历史图像(MHI)
【发布时间】:2015-05-06 17:35:52
【问题描述】:

我的项目是通过存储的视频剪辑检测人类活动。我使用以下代码来获取视频剪辑的运动历史图像 (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

但是,现在我想扩展我的项目并实时显示运动历史图像 (MHI)。也就是说,将从网络摄像头捕获帧,并且在捕获它们时,将显示运动历史图像 (MHI)。我怎样才能做到这一点?

任何帮助将不胜感激。谢谢。

【问题讨论】:

  • 你推荐我使用 OpenCV 吗?
  • @AmeyKelkar 这绝对可以用 OpenCV 实时实现,我确实会推荐它。
  • @Dima - 从来没有,但如果这是你写的,那我肯定相信它很快!
  • @Dima - 该声明是在之前 我看到你的作品:p 我是从我的经验中汲取的......因此我的声明是“来自处理视频的经验。 ...”,所以是的,很高兴时不时地纠正一下 :) 但是,OP 没有使用计算机视觉工具箱,所以我不知道该工具箱将如何适用于他们的上述工具箱代码。
  • @rayreng,我认为使用矢量化代码,OP 应该获得不错的帧速率。

标签: matlab image-processing computer-vision history motion


【解决方案1】:

您绝对应该对循环进行矢量化。您还可以为 MHI 使用 3D 数组,而不是元胞数组。我还没有测试过,但是代码应该是这样的:

MHI = zeros(y_max, x_max, numel(fg));
MHI(:,:,1) = fg{1} .* T;
for frameIndex = 2:length(fg)
  mhi = MHI(:,:,frameIndex);
  mhi(fg{frameIndex} == 255) = T;

  prevMHI = MHI(:,:,frameIndex-1);
  idx = prevMHI > 1;
  mhi(idx) = prevMHI(idx) - 1;
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-02
    • 2012-08-15
    • 1970-01-01
    • 1970-01-01
    • 2017-08-17
    • 1970-01-01
    • 2015-05-20
    • 2012-03-19
    相关资源
    最近更新 更多