HOF特征+MBH特征

本文深入解析了HOF(光流方向直方图)和MBH(运动边界直方图)两种特征提取方法。HOF特征通过计算光流方向的直方图,有效表征动作信息,对尺度和运动方向不敏感。MBH特征则是在x和y方向的光流图像上提取HOG特征,突出运动物体边界,适用于行人检测。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HOF特征+MBH特征

上文学习了HOG特征,了解了HOG是这样的计算过程。接下来学习HOF特征和MBH特征,不足之处,还望指正!

1.HOF特征

1)概念  

  HOF(Histograms of Oriented Optical Flow)是计算光流方向的直方图,通常用于Action Recogntion中。而HOG则是计算图像梯度方向的直方图

2)提出原因

  一方面,光流对于运动方向,背景变化敏感。另一方面,在动作识别中,相应的光流特征描述子的维度在变化。于是,需要寻找一个基于光流的既能表征时域动作信息,又对尺度和运动信息方向不敏感的特征。这就是HOF的由来。

3)计算步骤:

  1.计算光流,对于光流法,参考

  2.统计直方图

    计算光流矢量与横轴的夹角,根据角度将其投影到对应的直方图bin中,并根据该光流的幅值进行加权(消除背景的影响!)

    v表示光流,θ表示光流方向,b表示直方图第几bin,B一般表示要投影到对于直方图的bin数,如下例则表示是4

      

  

   当角度落在范围时,

   其幅值作用到直方图第b个bin中最后归一化直方图。

 

    

 

  3.归一化

 

  补充:

  1. 横轴为基准计算夹角能够使HOF特征对运动方向(向左和向右)不敏感。
  2. 通过归一化直方图实现HOF特征的尺度不变性。
  3. HOF直方图通过光流幅值加权得到,因此小的背景噪声对直方图的影响微乎其微。
  4. 通常直方图bin取30以上识别效果较好。

2.MBH特征

学习了HOG和HOF后,MBH(Motion Boundary Histograms)也就相对好理解了!通俗来说,MBH是对光流图像视为x方向和y方向的灰度图像,然后提取这些灰度图像的梯度直方图。也就是MBH特征是分别在图像的x和y方向光流图像上分别计算HOG特征!

    由上图可以看出,MBH特征的计算效果就是提取了运动物体的边界信息(也因此被称为Motion Boundary Histograms),在行人检测这个应用场景能起到不错的效果。此外,其计算也非常简单方便,易于使用。

 

参考自    (1)https://blog.youkuaiyun.com/u013089961/article/details/44981815

    (2)https://blog.youkuaiyun.com/wzmsltw/article/details/52752587

posted on 2018-08-08 17:05 Magic_chao 阅读(...) 评论(...) 编辑 收藏

### 时空特征提取方法及其实现 #### 方法概述 时空特征提取是一种从视频或动态场景中获取空间和时间维度上重要信息的技术。它通过捕捉对象运动模式及其随时间变化的空间分布来描述行为特性[^1]。 #### 基于传统方法的时空特征提取 传统的时空特征提取通常依赖手工设计的特征,这些特征能够反映目标物体在时间和空间上的变化规律。例如: - **时空兴趣点(Space-Time Interest Points, STIPs)** 是一种常用的时空特征检测方法。该方法利用 Harris-Laplace 或 Hessian-Laplace 检测器定位显著的兴趣点,并结合梯度直方图(HOG)、光流直方图(HOF)以及运动边界直方图(MBH)等描述子进行表征。 - **时空金字塔匹配(STPM)** 将视频分割成不同尺度的时间片段和空间区域,构建多层次的特征表示。这种方法可以有效捕获局部和全局的行为模式。 以下是基于 OpenCV 的 Python 实现示例代码用于提取时空兴趣点: ```python import cv2 import numpy as np def extract_stip(video_path): cap = cv2.VideoCapture(video_path) sift = cv2.SIFT_create() keypoints_list = [] descriptors_list = [] while True: ret, frame = cap.read() if not ret: break gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) keypoints, descriptors = sift.detectAndCompute(gray_frame, None) keypoints_list.append(keypoints) descriptors_list.append(descriptors) cap.release() return keypoints_list, descriptors_list video_path = 'example_video.mp4' keypoints, descriptors = extract_stip(video_path) print(f"Extracted {len(keypoints)} frames with SIFT features.") ``` #### 基于深度学习的时空特征提取 随着深度学习的发展,卷积神经网络(CNN)逐渐成为主流工具之一。特别是针对时空特征提取的任务,3D-CNN 和两流 CNN 成为了重要的研究方向[^2]。 - **3D 卷积神经网络 (3D-CNN)** 使用三维滤波器同时处理空间和时间维度的信息,从而自动学习到高层次的时空特征。 - **双流架构(Two-stream Network)** 结合 RGB 流和光流分别建模外观和运动信息。RGB 流专注于静态视觉内容的学习,而光流则关注帧间的变化趋势。 下面是一个简单的 PyTorch 实现框架展示如何加载预训练模型并提取特征: ```python import torch from torchvision import models class TwoStreamModel(torch.nn.Module): def __init__(self): super(TwoStreamModel, self).__init__() rgb_model = models.resnet50(pretrained=True) flow_model = models.resnet50(pretrained=True) self.rgb_features = torch.nn.Sequential(*list(rgb_model.children())[:-1]) self.flow_features = torch.nn.Sequential(*list(flow_model.children())[:-1]) def forward(self, rgb_input, flow_input): rgb_out = self.rgb_features(rgb_input).squeeze(-1).squeeze(-1) flow_out = self.flow_features(flow_input).squeeze(-1).squeeze(-1) combined = torch.cat((rgb_out, flow_out), dim=1) return combined model = TwoStreamModel() dummy_rgb = torch.randn(1, 3, 224, 224) dummy_flow = torch.randn(1, 3, 224, 224) features = model(dummy_rgb, dummy_flow) print(features.shape) # 输出形状应为 [batch_size, feature_dim] ``` #### 提议级特征聚合改进 尽管上述方法已经取得了较好的效果,但在实际应用中仍存在一些挑战。例如,现有的一些提议级特征聚合方法虽然能减少部分背景噪声干扰,但由于过度依赖框级标注信息,难以彻底排除无关背景特征的影响[^3]。 #### 时间序列的小波变换辅助分析 对于某些特定领域内的时空数据分析任务,还可以引入小波变换作为补充手段来进行多分辨率分解。这有助于进一步增强对复杂信号的理解能力[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值