init
This commit is contained in:
61
LBPTOP.py
Normal file
61
LBPTOP.py
Normal file
@@ -0,0 +1,61 @@
|
||||
import cv2
|
||||
import numpy as np
|
||||
from skimage.feature import local_binary_pattern
|
||||
|
||||
|
||||
def extract_lbp_top(video_path, radius=2, n_points=8, method='uniform', block_size=10):
|
||||
cap = cv2.VideoCapture(video_path)
|
||||
frames = []
|
||||
|
||||
# 读取所有帧
|
||||
while True:
|
||||
ret, frame = cap.read()
|
||||
if not ret:
|
||||
break
|
||||
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
|
||||
frames.append(gray)
|
||||
cap.release()
|
||||
|
||||
frames = np.array(frames)
|
||||
T, H, W = frames.shape # 时间、空间维度
|
||||
|
||||
# 使用滑动窗口计算 XT, YT 平面
|
||||
hist_xy = np.zeros((n_points + 2,))
|
||||
hist_xt = np.zeros((n_points + 2,))
|
||||
hist_yt = np.zeros((n_points + 2,))
|
||||
|
||||
# LBP on XY plane
|
||||
for t in range(0, T, block_size):
|
||||
if t >= T:
|
||||
break
|
||||
lbp = local_binary_pattern(frames[t], n_points, radius, method)
|
||||
hist, _ = np.histogram(lbp.ravel(), bins=np.arange(0, n_points + 3), density=True)
|
||||
hist_xy += hist
|
||||
|
||||
# LBP on XT plane
|
||||
for y in range(0, H, block_size):
|
||||
if y >= H:
|
||||
break
|
||||
xt_plane = frames[:, y, :]
|
||||
lbp = local_binary_pattern(xt_plane, n_points, radius, method)
|
||||
hist, _ = np.histogram(lbp.ravel(), bins=np.arange(0, n_points + 3), density=True)
|
||||
hist_xt += hist
|
||||
|
||||
# LBP on YT plane
|
||||
for x in range(0, W, block_size):
|
||||
if x >= W:
|
||||
break
|
||||
yt_plane = frames[:, :, x]
|
||||
lbp = local_binary_pattern(yt_plane, n_points, radius, method)
|
||||
hist, _ = np.histogram(lbp.ravel(), bins=np.arange(0, n_points + 3), density=True)
|
||||
hist_yt += hist
|
||||
|
||||
# 拼接三个平面的直方图作为最终特征向量
|
||||
feature_vector = np.concatenate([hist_xy, hist_xt, hist_yt])
|
||||
feature_vector /= np.linalg.norm(feature_vector) # 归一化
|
||||
|
||||
return feature_vector
|
||||
|
||||
video_path = r'D:\DESKTOP\2025\44\a1\dataset\org\1.mp4'
|
||||
features = extract_lbp_top(video_path)
|
||||
print(f"特征向量维度: {features.shape}")
|
||||
Reference in New Issue
Block a user