【图像识别-步态识别】基于计算机视觉实现步态周期检测与步态角度特征提取附MATLAB源码

 1 内容介绍

人体步态是人行走的姿态。它作为一种新的行为特征,具有非接触性、可感知性和非侵犯性、难以伪装和隐藏、易于捕捉等特点,而且在系统的低分辨率下、一定距离时它是唯一可感知的特征。步态识别就是根据步态进行身份识别。随着安全敏感场合对大范围视觉监控系统的迫切需求,步态识别在视觉监控领域的潜在应用引起了计算机视觉研究者们浓厚兴趣。一种步态特征提取方法及基于步态特征的行人身份识别方法,步态特征提取方法包括以下步骤:步骤A:对步态图像序列中的每一帧步态图像,获取其中行人所在区域,作为感兴趣区域;步骤B:分割感兴趣区域中的行人目标;步骤C:获取每一帧步态图像中行人目标的关节点位置信息;步骤D:基于该步态图像序列的各帧步态图像中行人目标的关节点位置信息,进行步态周期检测。

2 仿真代码

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                              图像处理函数 测试
%
%    从二值轮廓图像,获取其轮廓的质心位置;并以质心为中心,建立坐标轴,求轮廓
%    从x坐标轴与轮廓边缘相交的交点为起点,逆时针旋转360°,计算每一个像素到
%    质心方向与x坐标轴的夹角以及每个像素到质心的距离

% 函数:  
%       [angle,centroid] = Outlinepixel2Centroid_Angle(logicalpic,sampletime)
% 参数:  
%       logicalpic —— 二值化轮廓图像 轮廓点为白色,即“1” 
%       sampletime —— 划分区域个数(采样点数)
%       angle      —— 轮廓点-质心与水平轴夹角
%       distance   —— 距离
%       centroid   —— 质心,数据格式为[行heigh,列weigh]
%       nthsector  —— 对每张图的第nth个分区数据集合,用于分析步态过程中对应分区的数据变化情况
%
% 注意:
%       该函数应当考虑极限位置,即下肢垂直时的分析!!
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [nthsector,Outlinepixel,centroid] = test_Outlinepixel2Centroid_AngleDistance(logicalpic,sampletime)
%%%% %%%% %%%% %%%% 预处理
[height,width,picnums] = size(logicalpic); % 获取图片大小、张数

%%%% %%%% %%%% %%%% 第一步:求得各个质心
center = zeros(picnums,2);
for pn = 1:picnums 
    % 初始化参数
    sum_x=0;sum_y=0;area=0;
    for i=1:height
        for j=1:width
            if logicalpic(i,j,pn) == 1 % 轮廓像素点
                sum_x = sum_x + i;     % 记录轮廓像素点位置的总和
                sum_y = sum_y + j;     
                area = area + 1;       % 轮廓像素点个数
                Outlinepixel(pn).position(area,1) = i;    % 记录该幅图轮廓像素点位置,用于第二步使用
                Outlinepixel(pn).position(area,2) = j;    % 记录该幅图轮廓像素点位置,用于第二步使用
            end
        end
    end
    % 记录该幅图的轮廓像素个数
    Outlinepixel(pn).pixelnums = area;
    % 质心坐标
    center(pn,1) = fix(sum_x/area); % height
    center(pn,2) = fix(sum_y/area); % width  
end
%%%% 获得质心位置
centroid = center;

%%%% %%%% %%%% %%%% 第二步:以质心为中心,求得下半身轮廓到各个质心与水平轴夹角,以及距离;这里求下半身!!
% 计算下半身分区角度区域
sectorangle = 180 / sampletime; % 下半身180°,总共分为sampletime块区域,每块区域角度范围为sectorangle
% 对每张图片进行处理
for pn = 1:picnums
    

 1 内容介绍

人体步态是人行走的姿态。它作为一种新的行为特征,具有非接触性、可感知性和非侵犯性、难以伪装和隐藏、易于捕捉等特点,而且在系统的低分辨率下、一定距离时它是唯一可感知的特征。步态识别就是根据步态进行身份识别。随着安全敏感场合对大范围视觉监控系统的迫切需求,步态识别在视觉监控领域的潜在应用引起了计算机视觉研究者们浓厚兴趣。一种步态特征提取方法及基于步态特征的行人身份识别方法,步态特征提取方法包括以下步骤:步骤A:对步态图像序列中的每一帧步态图像,获取其中行人所在区域,作为感兴趣区域;步骤B:分割感兴趣区域中的行人目标;步骤C:获取每一帧步态图像中行人目标的关节点位置信息;步骤D:基于该步态图像序列的各帧步态图像中行人目标的关节点位置信息,进行步态周期检测。

2 仿真代码

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                              图像处理函数 测试
%
%    从二值轮廓图像,获取其轮廓的质心位置;并以质心为中心,建立坐标轴,求轮廓
%    从x坐标轴与轮廓边缘相交的交点为起点,逆时针旋转360°,计算每一个像素到
%    质心方向与x坐标轴的夹角以及每个像素到质心的距离

% 函数:  
%       [angle,centroid] = Outlinepixel2Centroid_Angle(logicalpic,sampletime)
% 参数:  
%       logicalpic —— 二值化轮廓图像 轮廓点为白色,即“1” 
%       sampletime —— 划分区域个数(采样点数)
%       angle      —— 轮廓点-质心与水平轴夹角
%       distance   —— 距离
%       centroid   —— 质心,数据格式为[行heigh,列weigh]
%       nthsector  —— 对每张图的第nth个分区数据集合,用于分析步态过程中对应分区的数据变化情况
%
% 注意:
%       该函数应当考虑极限位置,即下肢垂直时的分析!!
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [nthsector,Outlinepixel,centroid] = test_Outlinepixel2Centroid_AngleDistance(logicalpic,sampletime)
%%%% %%%% %%%% %%%% 预处理
[height,width,picnums] = size(logicalpic); % 获取图片大小、张数

%%%% %%%% %%%% %%%% 第一步:求得各个质心
center = zeros(picnums,2);
for pn = 1:picnums 
    % 初始化参数
    sum_x=0;sum_y=0;area=0;
    for i=1:height
        for j=1:width
            if logicalpic(i,j,pn) == 1 % 轮廓像素点
                sum_x = sum_x + i;     % 记录轮廓像素点位置的总和
                sum_y = sum_y + j;     
                area = area + 1;       % 轮廓像素点个数
                Outlinepixel(pn).position(area,1) = i;    % 记录该幅图轮廓像素点位置,用于第二步使用
                Outlinepixel(pn).position(area,2) = j;    % 记录该幅图轮廓像素点位置,用于第二步使用
            end
        end
    end
    % 记录该幅图的轮廓像素个数
    Outlinepixel(pn).pixelnums = area;
    % 质心坐标
    center(pn,1) = fix(sum_x/area); % height
    center(pn,2) = fix(sum_y/area); % width  
end
%%%% 获得质心位置
centroid = center;

%%%% %%%% %%%% %%%% 第二步:以质心为中心,求得下半身轮廓到各个质心与水平轴夹角,以及距离;这里求下半身!!
% 计算下半身分区角度区域
sectorangle = 180 / sampletime; % 下半身180°,总共分为sampletime块区域,每块区域角度范围为sectorangle
% 对每张图片进行处理
for pn = 1:picnums
    
    pixeln = Outlinepixel(pn).pixelnums; % 读取当前图片所具有的像素个数   
    % 第一步:对每个像素进行查询,然后将其质心作为中心,对各个像素点求得新的坐标
    for i = 1:pixeln 
        % 获取该图片中,第i个轮廓像素点的中心化位置。
        % 坐标轴垂直向上为正,水平向右为左;但是像素点为从上到下-从左到右为增,所以中心化时,y轴处理特殊
        Outlinepixel(pn).centralizationposition(i,1) = center(pn,1) - Outlinepixel(pn).position(i,1); % height
        Outlinepixel(pn).centralizationposition(i,2) = Outlinepixel(pn).position(i,2) - center(pn,2); % width
    end
    
    % 第二步-1:划分各个区域,并初始化必要参数;并将像素点分类
    for secs = 1:sampletime % 划分各个区域的角度范围;总共将人体下半身分为sampletime个分区;下半身以低于中心点的像素点
        % 建立分区,初始化分区相关参数
        Outlinepixel(pn).sampsector(secs).anglerange = 180 + secs * sectorangle; % 根据下半身所划分块个数,对下半身像素标记分区
        Outlinepixel(pn).sampsector(secs).pixelnums = 0; % 该分区的像素个数      
    end
    
    % 第二步-2:将每个像素点分类
    for i = 1:pixeln
        % 判断该点是否属于下半身轮廓像素点
        lowerflog = Outlinepixel(pn).centralizationposition(i,1);
        if lowerflog <= 0 % 如果该点属于下半身
            % 以质心为原点,得到该下半身轮廓像素点的夹角
            pixelheight = Outlinepixel(pn).centralizationposition(i,1); % 该像素的y
            pixelwidth  = Outlinepixel(pn).centralizationposition(i,2); % 该像素的x
            pixelangle = 2*pi - acos( pixelwidth / (sqrt(pixelheight^2 + pixelwidth^2)) ); % 反余弦获得夹角     
            Outlinepixel(pn).pixelpiAngle(i,1) = pixelangle;
            Outlinepixel(pn).pixelAngle(i,1) = 180*pixelangle/pi;
            
            % 根据所需采样块数目建立分区,并分类
            for secs = 1:sampletime % 划分各个区域的角度范围
                % 当前像素的角度、距离
                nowangle = Outlinepixel(pn).pixelAngle(i,1);
                nowdista = norm( Outlinepixel(pn).centralizationposition(i,:) );
                % 对该像素进行分区,如果该像素角度小于当前的角度范围,将该像素分为该区域
                if nowangle <= Outlinepixel(pn).sampsector(secs).anglerange 
                    % 记录当前分区像素个数
                    Outlinepixel(pn).sampsector(secs).pixelnums = Outlinepixel(pn).sampsector(secs).pixelnums + 1; 
                    pnums = Outlinepixel(pn).sampsector(secs).pixelnums;
                    % 以质心为原点,记录该像素角度
                    Outlinepixel(pn).sampsector(secs).samppixelangle(pnums,1) = nowangle; % 将该像素放置对应分区中
                    % 以质心为原点,得到该像素距离
                    Outlinepixel(pn).sampsector(secs).samppixeldistance(pnums,1) = nowdista; 
                    break; % 如果该像素已经划分至某个分区中,则中断循环 !!! 非常重要,该步骤会避免重复将该像素点进行分区
                end
            end
        end
    end
   

 1 内容介绍

人体步态是人行走的姿态。它作为一种新的行为特征,具有非接触性、可感知性和非侵犯性、难以伪装和隐藏、易于捕捉等特点,而且在系统的低分辨率下、一定距离时它是唯一可感知的特征。步态识别就是根据步态进行身份识别。随着安全敏感场合对大范围视觉监控系统的迫切需求,步态识别在视觉监控领域的潜在应用引起了计算机视觉研究者们浓厚兴趣。一种步态特征提取方法及基于步态特征的行人身份识别方法,步态特征提取方法包括以下步骤:步骤A:对步态图像序列中的每一帧步态图像,获取其中行人所在区域,作为感兴趣区域;步骤B:分割感兴趣区域中的行人目标;步骤C:获取每一帧步态图像中行人目标的关节点位置信息;步骤D:基于该步态图像序列的各帧步态图像中行人目标的关节点位置信息,进行步态周期检测。

2 仿真代码

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                              图像处理函数 测试
%
%    从二值轮廓图像,获取其轮廓的质心位置;并以质心为中心,建立坐标轴,求轮廓
%    从x坐标轴与轮廓边缘相交的交点为起点,逆时针旋转360°,计算每一个像素到
%    质心方向与x坐标轴的夹角以及每个像素到质心的距离

% 函数:  
%       [angle,centroid] = Outlinepixel2Centroid_Angle(logicalpic,sampletime)
% 参数:  
%       logicalpic —— 二值化轮廓图像 轮廓点为白色,即“1” 
%       sampletime —— 划分区域个数(采样点数)
%       angle      —— 轮廓点-质心与水平轴夹角
%       distance   —— 距离
%       centroid   —— 质心,数据格式为[行heigh,列weigh]
%       nthsector  —— 对每张图的第nth个分区数据集合,用于分析步态过程中对应分区的数据变化情况
%
% 注意:
%       该函数应当考虑极限位置,即下肢垂直时的分析!!
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [nthsector,Outlinepixel,centroid] = test_Outlinepixel2Centroid_AngleDistance(logicalpic,sampletime)
%%%% %%%% %%%% %%%% 预处理
[height,width,picnums] = size(logicalpic); % 获取图片大小、张数

%%%% %%%% %%%% %%%% 第一步:求得各个质心
center = zeros(picnums,2);
for pn = 1:picnums 
    % 初始化参数
    sum_x=0;sum_y=0;area=0;
    for i=1:height
        for j=1:width
            if logicalpic(i,j,pn) == 1 % 轮廓像素点
                sum_x = sum_x + i;     % 记录轮廓像素点位置的总和
                sum_y = sum_y + j;     
                area = area + 1;       % 轮廓像素点个数
                Outlinepixel(pn).position(area,1) = i;    % 记录该幅图轮廓像素点位置,用于第二步使用
                Outlinepixel(pn).position(area,2) = j;    % 记录该幅图轮廓像素点位置,用于第二步使用
            end
        end
    end
    % 记录该幅图的轮廓像素个数
    Outlinepixel(pn).pixelnums = area;
    % 质心坐标
    center(pn,1) = fix(sum_x/area); % height
    center(pn,2) = fix(sum_y/area); % width  
end
%%%% 获得质心位置
centroid = center;

%%%% %%%% %%%% %%%% 第二步:以质心为中心,求得下半身轮廓到各个质心与水平轴夹角,以及距离;这里求下半身!!
% 计算下半身分区角度区域
sectorangle = 180 / sampletime; % 下半身180°,总共分为sampletime块区域,每块区域角度范围为sectorangle
% 对每张图片进行处理
for pn = 1:picnums
    
    pixeln = Outlinepixel(pn).pixelnums; % 读取当前图片所具有的像素个数   
    % 第一步:对每个像素进行查询,然后将其质心作为中心,对各个像素点求得新的坐标
    for i = 1:pixeln 
        % 获取该图片中,第i个轮廓像素点的中心化位置。
        % 坐标轴垂直向上为正,水平向右为左;但是像素点为从上到下-从左到右为增,所以中心化时,y轴处理特殊
        Outlinepixel(pn).centralizationposition(i,1) = center(pn,1) - Outlinepixel(pn).position(i,1); % height
        Outlinepixel(pn).centralizationposition(i,2) = Outlinepixel(pn).position(i,2) - center(pn,2); % width
    end
    
    % 第二步-1:划分各个区域,并初始化必要参数;并将像素点分类
    for secs = 1:sampletime % 划分各个区域的角度范围;总共将人体下半身分为sampletime个分区;下半身以低于中心点的像素点
        % 建立分区,初始化分区相关参数
        Outlinepixel(pn).sampsector(secs).anglerange = 180 + secs * sectorangle; % 根据下半身所划分块个数,对下半身像素标记分区
        Outlinepixel(pn).sampsector(secs).pixelnums = 0; % 该分区的像素个数      
    end
    
    % 第二步-2:将每个像素点分类
    for i = 1:pixeln
        % 判断该点是否属于下半身轮廓像素点
        lowerflog = Outlinepixel(pn).centralizationposition(i,1);
        if lowerflog <= 0 % 如果该点属于下半身
            % 以质心为原点,得到该下半身轮廓像素点的夹角
            pixelheight = Outlinepixel(pn).centralizationposition(i,1); % 该像素的y
            pixelwidth  = Outlinepixel(pn).centralizationposition(i,2); % 该像素的x
            pixelangle = 2*pi - acos( pixelwidth / (sqrt(pixelheight^2 + pixelwidth^2)) ); % 反余弦获得夹角     
            Outlinepixel(pn).pixelpiAngle(i,1) = pixelangle;
            Outlinepixel(pn).pixelAngle(i,1) = 180*pixelangle/pi;
            
            % 根据所需采样块数目建立分区,并分类
            for secs = 1:sampletime % 划分各个区域的角度范围
                % 当前像素的角度、距离
                nowangle = Outlinepixel(pn).pixelAngle(i,1);
                nowdista = norm( Outlinepixel(pn).centralizationposition(i,:) );
                % 对该像素进行分区,如果该像素角度小于当前的角度范围,将该像素分为该区域
                if nowangle <= Outlinepixel(pn).sampsector(secs).anglerange 
                    % 记录当前分区像素个数
                    Outlinepixel(pn).sampsector(secs).pixelnums = Outlinepixel(pn).sampsector(secs).pixelnums + 1; 
                    pnums = Outlinepixel(pn).sampsector(secs).pixelnums;
                    % 以质心为原点,记录该像素角度
                    Outlinepixel(pn).sampsector(secs).samppixelangle(pnums,1) = nowangle; % 将该像素放置对应分区中
                    % 以质心为原点,得到该像素距离
                    Outlinepixel(pn).sampsector(secs).samppixeldistance(pnums,1) = nowdista; 
                    break; % 如果该像素已经划分至某个分区中,则中断循环 !!! 非常重要,该步骤会避免重复将该像素点进行分区
                end
            end
        end
    end
   
    % 求得各个分区角度、距离均值
    for secs = 1:sampletime
        Outlinepixel(pn).sampsector(secs).pixelAveAngle = mean(Outlinepixel(pn).sampsector(secs).samppixelangle);
        Outlinepixel(pn).sampsector(secs).pixelAveDistance = mean(Outlinepixel(pn).sampsector(secs).samppixeldistance);
    % 对整个图集的各个扇区进行集合,用于用于分析步态过程中对应分区的数据变化情况
        nthsector(secs).averageAngle(pn,1) = Outlinepixel(pn).sampsector(secs).pixelAveAngle; 
        nthsector(secs).averageDistance(pn,1) = Outlinepixel(pn).sampsector(secs).pixelAveDistance;
    end
end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  end  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

3 运行结果

4 参考文献

[1]郭璠, 向达, 唐琎,等. 一种步态特征提取方法及基于步态特征的行人身份识别方法:, CN110084156A[P]. 2019.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。


    % 求得各个分区角度、距离均值
    for secs = 1:sampletime
        Outlinepixel(pn).sampsector(secs).pixelAveAngle = mean(Outlinepixel(pn).sampsector(secs).samppixelangle);
        Outlinepixel(pn).sampsector(secs).pixelAveDistance = mean(Outlinepixel(pn).sampsector(secs).samppixeldistance);
    % 对整个图集的各个扇区进行集合,用于用于分析步态过程中对应分区的数据变化情况
        nthsector(secs).averageAngle(pn,1) = Outlinepixel(pn).sampsector(secs).pixelAveAngle; 
        nthsector(secs).averageDistance(pn,1) = Outlinepixel(pn).sampsector(secs).pixelAveDistance;
    end
end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  end  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

3 运行结果

4 参考文献

[1]郭璠, 向达, 唐琎,等. 一种步态特征提取方法及基于步态特征的行人身份识别方法:, CN110084156A[P]. 2019.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。


    pixeln = Outlinepixel(pn).pixelnums; % 读取当前图片所具有的像素个数   
    % 第一步:对每个像素进行查询,然后将其质心作为中心,对各个像素点求得新的坐标
    for i = 1:pixeln 
        % 获取该图片中,第i个轮廓像素点的中心化位置。
        % 坐标轴垂直向上为正,水平向右为左;但是像素点为从上到下-从左到右为增,所以中心化时,y轴处理特殊
        Outlinepixel(pn).centralizationposition(i,1) = center(pn,1) - Outlinepixel(pn).position(i,1); % height
        Outlinepixel(pn).centralizationposition(i,2) = Outlinepixel(pn).position(i,2) - center(pn,2); % width
    end
    
    % 第二步-1:划分各个区域,并初始化必要参数;并将像素点分类
    for secs = 1:sampletime % 划分各个区域的角度范围;总共将人体下半身分为sampletime个分区;下半身以低于中心点的像素点
        % 建立分区,初始化分区相关参数
        Outlinepixel(pn).sampsector(secs).anglerange = 180 + secs * sectorangle; % 根据下半身所划分块个数,对下半身像素标记分区
        Outlinepixel(pn).sampsector(secs).pixelnums = 0; % 该分区的像素个数      
    end
    
    % 第二步-2:将每个像素点分类
    for i = 1:pixeln
        % 判断该点是否属于下半身轮廓像素点
        lowerflog = Outlinepixel(pn).centralizationposition(i,1);
        if lowerflog <= 0 % 如果该点属于下半身
            % 以质心为原点,得到该下半身轮廓像素点的夹角
            pixelheight = Outlinepixel(pn).centralizationposition(i,1); % 该像素的y
            pixelwidth  = Outlinepixel(pn).centralizationposition(i,2); % 该像素的x
            pixelangle = 2*pi - acos( pixelwidth / (sqrt(pixelheight^2 + pixelwidth^2)) ); % 反余弦获得夹角     
            Outlinepixel(pn).pixelpiAngle(i,1) = pixelangle;
            Outlinepixel(pn).pixelAngle(i,1) = 180*pixelangle/pi;
            
            % 根据所需采样块数目建立分区,并分类
            for secs = 1:sampletime % 划分各个区域的角度范围
                % 当前像素的角度、距离
                nowangle = Outlinepixel(pn).pixelAngle(i,1);
                nowdista = norm( Outlinepixel(pn).centralizationposition(i,:) );
                % 对该像素进行分区,如果该像素角度小于当前的角度范围,将该像素分为该区域
                if nowangle <= Outlinepixel(pn).sampsector(secs).anglerange 
                    % 记录当前分区像素个数
                    Outlinepixel(pn).sampsector(secs).pixelnums = Outlinepixel(pn).sampsector(secs).pixelnums + 1; 
                    pnums = Outlinepixel(pn).sampsector(secs).pixelnums;
                    % 以质心为原点,记录该像素角度
                    Outlinepixel(pn).sampsector(secs).samppixelangle(pnums,1) = nowangle; % 将该像素放置对应分区中
                    % 以质心为原点,得到该像素距离
                    Outlinepixel(pn).sampsector(secs).samppixeldistance(pnums,1) = nowdista; 
                    break; % 如果该像素已经划分至某个分区中,则中断循环 !!! 非常重要,该步骤会避免重复将该像素点进行分区
                end
            end
        end
    end
   
    % 求得各个分区角度、距离均值
    for secs = 1:sampletime
        Outlinepixel(pn).sampsector(secs).pixelAveAngle = mean(Outlinepixel(pn).sampsector(secs).samppixelangle);
        Outlinepixel(pn).sampsector(secs).pixelAveDistance = mean(Outlinepixel(pn).sampsector(secs).samppixeldistance);
    % 对整个图集的各个扇区进行集合,用于用于分析步态过程中对应分区的数据变化情况
        nthsector(secs).averageAngle(pn,1) = Outlinepixel(pn).sampsector(secs).pixelAveAngle; 
        nthsector(secs).averageDistance(pn,1) = Outlinepixel(pn).sampsector(secs).pixelAveDistance;
    end
end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  end  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

3 运行结果

4 参考文献

[1]郭璠, 向达, 唐琎,等. 一种步态特征提取方法及基于步态特征的行人身份识别方法:, CN110084156A[P]. 2019.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

matlab科研助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值