您现在的位置:首页 >> 图像处理 >> 内容

m通过目标形心提取、颜色模型以及边缘提取实现两个相向移动人员交叉遮挡过程的检测和分割matlab仿真

时间:2023/2/12 20:27:09 点击:

  核心提示:09_016_m,包括程序操作录像+说明文档+参考文献...

1.完整项目描述和程序获取

>面包多安全交易平台:https://mbd.pub/o/bread/ZJWUk5hv

>如果链接失效,可以直接打开本站店铺搜索相关店铺:

点击店铺

>如果链接失效,程序调试报错或者项目合作可以加微信或者QQ联系。

2.部分仿真图预览




3.算法概述

       我对这种类型的问题的做了几方面研究,总的归纳来讲又如下几个方面:对于交叉问题,目前所了解的方法,视频必须满足如下几个要求:

       第一:视频的背景需要静止,或者说不能又太大的抖动,否则会导致较大的干扰;

       第二:视频上物体必须又出现物体分开的效果,这样可以提取物体物体的特征,所以你提供的第二个视频,两个人一直重合,这会导致无法识别;

       第三:视频的特征提取方法,如果两个物体颜色相似,那么通过提取颜色是不可取的,如果根据动作来区分,如果两个物体运动一致,那么也不行,这里我们通过提取物体的形心来区分不同的物体,只有当两个物体完全重合的时候,形心才有可能重合;

        第四:物体的分割,采用传统的方框来分,人物轮廓的分割方法在交叉的时候,或者是物体在较远的时候,不太可行。

       本算法是根据物体的特征提取进行的。

4.部分源码

...................................................................................

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  

%第二级显示,人体轮廓

%第二级显示,人体轮廓

%第二级显示,人体轮廓

        jj=0;

        for j=1:nobjs        

            rc=[min(B{j}(:,2)) min(B{j}(:,1)) max(B{j}(:,2))-min(B{j}(:,2)) max(B{j}(:,1))-min(B{j}(:,1))];

            [l_x l_y] = find(L==j);%计算坐标

            cx        = mean(l_x);

            cy        = mean(l_y);

            Area      = size(l_x,1);        

            jj        = jj+1;

 

            if check_frame>0

               check1(nseg) = abs(Xn_ref(nseg,1) - Xn(nseg,1));

               check2(nseg) = abs(Xn_ref(nseg,1) - Xn(nseg,2));   

            end

            %为了计算精度,将形心坐标的差值的平均作为预测增量 

            if nobjs == 2

                 if check1 >= check2

                     if jj == 1

                         figure(1);

                         plot(B{j}(:,2),B{j}(:,1),'g','LineWidth',1);hold on  

                     else

                         figure(1);

                         plot(B{j}(:,2),B{j}(:,1),'r','LineWidth',1);hold on 

                     end   

                 else

                     if jj == 1

                         figure(1);

                         plot(B{j}(:,2),B{j}(:,1),'r','LineWidth',1);hold on  

                     else

                         figure(1);

                         plot(B{j}(:,2),B{j}(:,1),'g','LineWidth',1);hold on 

                     end   

                 end

            end

            if nobjs == 1

                 plot(B{j}(:,2),B{j}(:,1),'y','LineWidth',1);hold on                 

            end  

        end

%第二级显示,人体轮廓

%第二级显示,人体轮廓

%第二级显示,人体轮廓        

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%          

%第三级显示,人物形心跟踪效果

%第三级显示,人物形心跟踪效果 

%第三级显示,人物形心跟踪效果

        jj=0;

        for j=1:nobjs       

            jj        = jj+1;

            if check_frame>0

               check1 = abs(Xn_ref(nseg,1) - Xn(nseg,1));

               check2 = abs(Xn_ref(nseg,1) - Xn(nseg,2));   

            end

            %为了计算精度,将形心坐标的差值的平均作为预测增量 

            if nobjs == 2

 

                 if check1 >= check2 

                     plot(Xn(nseg,1),Yn(nseg,1),'g*');hold on

                     plot(Xn(nseg,2),Yn(nseg,2),'r*');hold on

                 else

                     plot(Xn(nseg,1),Yn(nseg,1),'r*');hold on

                     plot(Xn(nseg,2),Yn(nseg,2),'g*');hold on 

                 end

            end

            if nobjs == 1

               plot(Xn(nseg,1),Yn(nseg,1),'g*');hold on

               plot(Xn(nseg,2),Yn(nseg,2),'r*');hold on               

            end              

        end

%第三级显示,人物形心跟踪效果

%第三级显示,人物形心跟踪效果 

%第三级显示,人物形心跟踪效果

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%          

%第四级显示,交叉分割,利用方框进行交叉分割

%第四级显示,交叉分割,利用方框进行交叉分割

%第四级显示,交叉分割,利用方框进行交叉分割

        %根据B值的平均值求得分割方框

        if nobjs >1%当有多个物体的时候,计算每个物体的形心值

           for ii = 1:2 

               %分割框的长和宽  

               X_top(ii) =max(B{ii}(:,2))-5;

               X_bot(ii) =min(B{ii}(:,2))+7;

               Y_top(ii) =max(B{ii}(:,1))-5;

               Y_bot(ii) =min(B{ii}(:,1))+7;

           end 

        end   

        if nobjs ==1

           for ii = 1:2 

               %分割框的长和宽  

               X_top(ii) =X_top(ii)+ Cx(ii);

               X_bot(ii) =X_bot(ii)+ Cx(ii);

               Y_top(ii) =Y_top(ii);

               Y_bot(ii) =Y_bot(ii);

           end 

        end         

        

 

        for j=1:nobjs       

            jj        = jj+1;

            if check_frame>0

               check1 = abs(Xn_ref(nseg,1) - Xn(nseg,1));

               check2 = abs(Xn_ref(nseg,1) - Xn(nseg,2));   

            end

            %为了计算精度,将形心坐标的差值的平均作为预测增量 

            if nobjs == 2

 

                 if check1 >= check2 

                    plot(X_bot(1):X_top(1),Y_bot(1),'g--','LineWidth',4);hold on;

                    plot(X_bot(1):X_top(1),Y_top(1),'g--','LineWidth',4);hold on;

                    plot(X_bot(1),Y_bot(1):Y_top(1),'g--','LineWidth',4);hold on;

                    plot(X_top(1),Y_bot(1):Y_top(1),'g--','LineWidth',4);hold on;    

 

                    plot(X_bot(2):X_top(2),Y_bot(2),'r-','LineWidth',4);hold on;

                    plot(X_bot(2):X_top(2),Y_top(2),'r-','LineWidth',4);hold on;

                    plot(X_bot(2),Y_bot(2):Y_top(2),'r-','LineWidth',4);hold on;

                    plot(X_top(2),Y_bot(2):Y_top(2),'r-','LineWidth',4);hold on;     

                 else

                    plot(X_bot(1):X_top(1),Y_bot(1),'r-','LineWidth',4);hold on;

                    plot(X_bot(1):X_top(1),Y_top(1),'r-','LineWidth',4);hold on;

                    plot(X_bot(1),Y_bot(1):Y_top(1),'r-','LineWidth',4);hold on;

                    plot(X_top(1),Y_bot(1):Y_top(1),'r-','LineWidth',4);hold on;    

 

                    plot(X_bot(2):X_top(2),Y_bot(2),'g--','LineWidth',4);hold on;

                    plot(X_bot(2):X_top(2),Y_top(2),'g--','LineWidth',4);hold on;

                    plot(X_bot(2),Y_bot(2):Y_top(2),'g--','LineWidth',4);hold on;

                    plot(X_top(2),Y_bot(2):Y_top(2),'g--','LineWidth',4);hold on;     

                 end

            end

            if nobjs == 1

                plot(X_bot(1):X_top(1),Y_bot(1),'g--','LineWidth',4);hold on;

                plot(X_bot(1):X_top(1),Y_top(1),'g--','LineWidth',4);hold on;

                plot(X_bot(1),Y_bot(1):Y_top(1),'g--','LineWidth',4);hold on;

                plot(X_top(1),Y_bot(1):Y_top(1),'g--','LineWidth',4);hold on;    

 

                plot(X_bot(2):X_top(2),Y_bot(2),'r-','LineWidth',4);hold on;

                plot(X_bot(2):X_top(2),Y_top(2),'r-','LineWidth',4);hold on;

                plot(X_bot(2),Y_bot(2):Y_top(2),'r-','LineWidth',4);hold on;

                plot(X_top(2),Y_bot(2):Y_top(2),'r-','LineWidth',4);hold on;               

            end              

        end        

%第四级显示,交叉分割,利用方框进行交叉分割

%第四级显示,交叉分割,利用方框进行交叉分割

%第四级显示,交叉分割,利用方框进行交叉分割

        else

            disp('未检查到行人或目标行人太小');

            figure(1);imshow(img);hold on; %原始图像

        end 

    end 

% 为了使仿真电脑屏幕刷新出现的问题,这里对每次处理做暂停1.2s操作    

pause(1.2);   

end

09_016_m

作者:我爱C编程 来源:我爱C编程
本站最新成功开发工程项目案例
相关评论
发表我的评论
  • 大名:
  • 内容:
本类固顶
  • 没有
  • FPGA/MATLAB商业/科研类项目合作(www.store718.com) © 2025 版权所有 All Rights Reserved.
  • Email:1480526168@qq.com 站长QQ: 1480526168