跌倒检测基于matlab GUI人体跌倒检测系统含Matlab源码 2428期

Posted 海神之光

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了跌倒检测基于matlab GUI人体跌倒检测系统含Matlab源码 2428期相关的知识,希望对你有一定的参考价值。

⛄一、跌倒检测

1 跌倒行为分析
尽管跌倒的概念是常识,但是很难准确去描述跌倒,因此很难指定跌倒的检测手段。1987年,Kellogg预防老年人跌倒国际工作组将跌倒定义为“无意倒地,或不是由于遭受猛烈打击、失去意识、突然出现中风或癫痫发作等原因造成的突然处于较低水平的物体上”[5]。这一定义在许多跌倒检测的研究中已经被广泛使用。

跌倒是瞬间动作,因为人体摔倒时有一个快速跌落的过程,人体的中心点会从一个较高的位置快速下降到地面或者接近地面的高度,人体的高度、加速度等特征数据会快速的改变。因此通常研究人员会将高度、加速度、角速度等数据信息作为检测特征从而应用到其研究当中去。

2 跌倒检测指标
跌倒检测指标指的是在跌倒检测算法中选择用来区分跌倒和非跌倒活动的变量。用于定义跌倒检测指标的运动学度量通常分为两类:平移度量和旋转度量。在平移度量中,身体躯干的速度和加速度是跌倒检测系统研究中最为被广泛使用的两个检测指标。另外,头部的加速度和上臂的加速度也用于定义跌倒检测指标。而通过旋转度量定义的跌倒检测指标则包括人体胸部的角速度、腰部和躯干的加速度以及躯干和大腿的节段方向。

在现有的跌倒检测研究中,大多数研究者都使用一种运动学方法来定义跌倒检测的数据指标,只有少量的研究使用到的运动学方法不止一种。特别是,Nyan等人[6]实现了用与逻辑来链接选定的运动学测量值,只有当所有选定的运动学测量值都超出预定义的阈值时,才认为可以检测到跌倒。Hu和Qu[7]则是使用躯干的垂直速度和小腿前部速度的线性组合作为跌倒检测指标。线性组合被认为是使跌倒检测实施变得容易的最简单的一种数据组合形式。结果表明,与使用单一运动学方法相比,这种组合方法改善了跌倒检测性能,提高了系统的准确性。

从不同的实现方法来看,跌倒检测技术大致分为以下三种:计算机视觉、场景传感器和可穿戴式设备,接下来将分别讨论每一类方法的系统原理以及各自的特点。

3 基于计算机视觉的跌倒检测技术
3.1 系统原理

基于计算机视觉的方法主要是通过安装在用户生活环境中的图像或视频采集设备来对人体的运动行为进行数据采集,然后通过图像或视频处理来进行人体行为识别,从而判断是否发生了跌倒事件。

Chong等人[8]提出一种结合了超像素聚类的Horprasert算法进行背景建模和背景分割的方法,利用边界框和近似椭圆的运动量化对所提出的方法提取的前景进行了两种不同的跌倒检测方法测试,结果表明,在改善了原始的Horprasert分割处理速度的同时还降低了复杂度。魏振钢[9]等人提出一种基于计算机视觉的包含一个两级检测过程的人体跌倒检测算法,通过形态学操作对提取的前景块绘制矩形边界,根据矩形宽高比从中筛选出所有可能是跌倒的行为。

3.2 系统特点
基于计算机视觉的方法最大的特点就是设备安装简单,视觉直观。但是由于二维成像需要统一的背景,会受到难以将主题与背景分离的困扰,因此它们要么性能差,要么需要具有静态背景的固定式摄像机进行背景替换,另外视频监控设备也会受到室内环境的约束,存在一定的监控死角,还存在泄露个人隐私等问题。因此,越来越多的趋势是使用深度相机,最常见的是提取3D骨骼数据,并跟踪头部和臀部等身体部位,通过人体部位跟踪或关节偏移量、关节定位可自动获取骨骼数据,这样能够有效地解决传统摄像头的缺点,极大的保护用户的个人隐私不被泄露,同时深度图像数据的获取相对不容易受到室内环境的干扰。Bian等人[10]开发了一个两级系统,先从分割出的身体部位通过插值提取出人体关节的三维坐标,再基于提取的关节轨迹随时间变化的位置,使用SVM分类器检测关节的位置。这种方法的局限性在于高度依赖于头部位置和预定义的阈值。杨张振[11]提出一种基于Kinect体感设备对人体摔倒行为进行判断识别的方法,通过设置在人体活动范围里的Kinect来获取人体骨骼节点的图像和位置信息,以两肩的三维坐标为参考目标,结合肩膀的相对位移变化和位移向量的方向夹角对跌倒事件进行综合判断。Kwolek等人[12]所使用的系统还合并了微软的Kinect和加速度计,其中模糊系统合并传感器数据以确定是否发生了跌倒。

⛄二、部分源代码

function varargout = GUI(varargin)
% GUI MATLAB code for GUI.fig
% GUI, by itself, creates a new GUI or raises the existing
% singleton*.
%
% H = GUI returns the handle to a new GUI or the handle to
% the existing singleton*.
%
% GUI(‘CALLBACK’,hObject,eventData,handles,…) calls the local
% function named CALLBACK in GUI.M with the given input arguments.
%
% GUI(‘Property’,‘Value’,…) creates a new GUI or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before GUI_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to GUI_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE’s Tools menu. Choose “GUI allows only one
% instance to run (singleton)”.
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help GUI

% Last Modified by GUIDE v2.5 02-Mar-2023 11:24:08

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct(‘gui_Name’, mfilename, …
‘gui_Singleton’, gui_Singleton, …
‘gui_OpeningFcn’, @GUI_OpeningFcn, …
‘gui_OutputFcn’, @GUI_OutputFcn, …
‘gui_LayoutFcn’, [] , …
‘gui_Callback’, []);
if nargin && ischar(varargin1)
gui_State.gui_Callback = str2func(varargin1);
end

if nargout
[varargout1:nargout] = gui_mainfcn(gui_State, varargin:);
else
gui_mainfcn(gui_State, varargin:);
end
% End initialization code - DO NOT EDIT

% — Executes just before GUI is made visible.
function GUI_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to GUI (see VARARGIN)

% Choose default command line output for GUI
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes GUI wait for user response (see UIRESUME)
% uiwait(handles.figure1);

% — Outputs from this function are returned to the command line.
function varargout = GUI_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout1 = handles.output;

% — Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
[filename,pathname] = uigetfile(‘*.avi’,‘选择视频’);
handles.filename = filename;
guidata(hObject,handles);

% — Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global Bili;
A=[];
B=imread(‘46.jpg’);
B=rgb2gray(B);
B=medfilt2(B); %中值滤波
fileName = handles.filename;
obj = VideoReader(fileName); %读取录制的视频
vidFrames=read(obj); %读取所有帧图像
numFrames=get(obj, ‘NumberOfFrames’);%总帧数
for k = 63:250 %帧数循环,人为选取33帧作为背景帧
mov(k).cdata=vidFrames(:,:,:,k);
mov(k).cdata=rgb2gray(mov(k).cdata);
mov(k).cdata=medfilt2(mov(k).cdata);
R=imabsdiff(mov(k).cdata,B);
z=im2bw(R,graythresh®);
z=bwmorph(z,‘erode’,3); % 3次腐蚀处理掉噪点
P = bwmorph(z,‘dilate’,3); %3次膨胀膨胀
P= bwareaopen(P,50);
axes(handles.axes1); imshow(vidFrames(:,:,:,k));title(‘原视频’)
axes(handles.axes2);imshow§;title(‘人体异常行为检测’)
x=sum(P(😃);
s=x/(480640);
if s>=0.03
[m1,n1] = find(P == 1);
%第一级检测,角度
top1= min(m1);%纵向
bottom1= max(m1);
left1= min(n1);%横向
right1= max(n1);
height1=bottom1-top1+1;%纵向高;
width1 = right1-left1+1;%横向宽
rectangle(‘Position’,[left1,top1,width1,height1],‘EdgeColor’,‘r’);
line([left1,right1],[top1,bottom1],‘color’,‘r’,‘LineWidth’,1);%标记对角线
line([left1,right1],[bottom1,top1],‘color’,‘r’,‘LineWidth’,1);
tan=(bottom1-top1)/(right1-left1);
tan=atan(tan);
J=tan
180/pi;
set(handles.edit2,‘string’,J);
%第二级检测,质心高度比Rz

⛄三、运行结果


⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]郑杨娇子,张上.人体跌倒检测技术研究分类综述[J].长江信息通信. 2021,34(01)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

以上是关于跌倒检测基于matlab GUI人体跌倒检测系统含Matlab源码 2428期的主要内容,如果未能解决你的问题,请参考以下文章

图像识别基于帧差法跌倒检测matlab源码

视频分析:走路看手机跌倒检测

Android 跌倒检测问题

心电信号基于matlab GUI自适应滤波+平滑滤波+小波滤波心电信号处理含Matlab源码 1809期

Watchkit 跌倒检测 api

毕设参考跌倒检测 ESP32+HaaS Python Motion API 快速打造上云的跌倒检测系统