基于Canny边缘提取和形态学处理的公交车上车人数跟踪和统计matlab仿真

目录

一、理论基础

二、核心MATLAB程序

三、MATLAB仿真测试结果


一、理论基础

        基于Canny边缘提取和形态学处理的公交车上车人数跟踪和统计是一种基于计算机视觉技术的乘客计数方法。该方法的主要思想是通过对公交车上下车的视频图像进行边缘提取和形态学处理,获得每个乘客的轮廓信息,进而实现上车人数的跟踪和统计。

Canny边缘提取是一种经典的边缘检测算法,其主要步骤如下:

  1. 高斯滤波:对原始图像进行高斯滤波,以平滑图像并去除噪声。
  2. 计算梯度:通过计算图像中每个像素的梯度幅值和梯度方向,得到图像的边缘信息。梯度幅值反映了边缘的强度,梯度方向反映了边缘的方向。
  3. 非极大值抑制:对梯度幅值进行非极大值抑制,即将梯度方向上的非局部最大值抑制为0,以细化边缘。
  4. 双阈值检测:设置两个阈值,对梯度幅值进行双阈值检测。大于高阈值的像素被标记为边缘像素,小于低阈值的像素被排除,介于两者之间的像素如果与边缘像素相连则被标记为边缘像素,否则被排除。
  5. 边缘连接:对标记为边缘的像素进行连接,形成连续的边缘。

整个算法的整体流程图如下图所示:

       这里,我们使用的是canny边缘检测,其基本原理如下所示:

       阶跃形的边缘,Canny推导出的最优边缘检测器的形状与高斯函数和一阶导数类似,因此Canny边缘检测器就是由高斯函数的一阶导数构成的。我们知道,高斯函数是圆对称的,因此Canny算子在边缘方向上是对称的,在垂直于边缘的方向上是反对称的。这就意味着该算子对最急剧的变化方向上的边缘特别敏感,但在沿边缘方向上是不敏感的。

       利用高斯函数的可分性,将▽G的两个滤波卷积模板分解为两个一维的行列滤波器:

        根据Canny的定义,中心边缘点为算子nG与图像f(x,y)的卷积在边缘梯度方向上的区域中的最大值。这样,就可以在每一点的梯度方向上判断此点强度是否为其领域的最大值来确定该点是否为边缘点。当一个像素满足以下三个条件时,则被认为是图像的边缘点。 

(1)该点的边缘强度大于沿该点梯度方向的两个相邻像素点的边缘强度;

(2)与该点梯度方向上相邻两点的方向差小于45度; 

(3)以该点为中心的33领域中的边缘强度极大值小于某个阈值。  此外,如果(1)和(2)同时被满足,那么在梯度方向上的两相邻像素就从候选边缘点中取消,条件(3)相当于区域梯度最大值组成的阈值图像与边缘点进行匹配,这一过程消除了许多虚假的边缘点。  图像边缘检测的基本步骤: 

(1) 滤波,边缘检测主要基于导数计算,但受噪声的影响。但滤波器在降低噪 声的同时也导致了边缘强度的损失。  

(2) 增强,增强算法将邻域咴度有显著变化的点突出显示。一般通过计算梯度 幅值完成。  (3) 检测,但在有些图像中梯度幅值较大的并不是边缘点。最简单的边缘检测 是梯度幅值阈值的判定。 

(4) 定位,精确确定边缘的位置。

        一般情况下,获得的边缘,会存在较大的缺口,这里,我们使用膨胀处理,修复边缘,膨胀原理如下所示:

假定二值图像A和形态学处理的结构元素B是定义在笛卡儿网格上的集合,网格中值为1的点是集合的元素,当结构元素的原点移到点(x,y)时,记为Sxy

膨胀是以得到B的相对与它自身原点的映像并且由z对映像进行移位为基础的。A被B膨胀是所有位移z的集合,这样, 和A至少有一个元素是重叠的。我们可以把上式改写为: 结构元素B可以看作一个卷积模板,区别在于膨胀是以集合运算为基础的,卷积是以算术运算为基础的,但两者的处理过程是相似的。

⑴ 用结构元素B,扫描图像A的每一个像素

⑵ 用结构元素与其覆盖的二值图像做“与”操作

⑶ 如果都为0,结果图像的该像素为0。否则为1

二、核心MATLAB程序

clc;
clear;
close all;
warning off;
addpath 'func\'

global xlag;
global CNT;
global frm;
global PEOPLE;
frm  = 1;
xlag = 0;
CNT  = 0;
PEOPLE    = 0;
START     = 150;
%读取视频
PIX       = VideoReader('test.avi');
PIX_Size  = [PIX.Width,PIX.Height];
Num_Frame = floor(PIX.Duration * PIX.FrameRate);
%参数初始化
for i = START:550
    PIX_each_frame = imresize(read(PIX,i),1/4);
    %1:预处理
    I0             = func_median(PIX_each_frame,5);
    %2:头部提取
    %边缘检测
    I1             = edge(I0,'canny');
    %边缘修复
    I2             = func_distancemap(I1);
    %轮廓检测,检测边缘中最接近圆的区域,头部定位
    [I3,L1]        = func_head_detection(I2,PIX_each_frame);
    figure(1);
    subplot(231);
    imshow(PIX_each_frame);
    title('原始视频');
    subplot(232);
    imshow(I0);
    title('中值滤波视频');    
    subplot(233);
    imshow(I1);
    title('边缘检测效果');       
    subplot(234);
    imshow(I3,[]);
    title('头部定位');  
    subplot(236);
    imshow(I3,[]);
    STR = ['第',num2str(i-START+1),'帧','共检测到',num2str(PEOPLE),'人'];
    title(STR,'Color','r','fontsize',15);
    drawnow;
end


三、MATLAB仿真测试结果

 

 A10-28

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我来回答你的问题。首先,我需要明确一下你的要求:你希望用 MATLAB 对一张图像进行 Sobel、Laplace、Canny 边缘提取和预支分割,并将它们显示在同一张图中,是吗? 如果是这样,那么可以按照以下步骤进行操作: 1. 读取图像 使用 MATLAB 中的 imread 函数读取你要处理的图像。假设你的图像名为 "test.jpg",那么可以使用以下代码进行读取: ``` img = imread('test.jpg'); ``` 2. Sobel 边缘提取 使用 MATLAB 中的 fspecial 和 imfilter 函数进行 Sobel 边缘提取。具体操作如下: ``` sobel_filter = fspecial('sobel'); img_sobel = imfilter(img, sobel_filter); ``` 3. Laplace 边缘提取 使用 MATLAB 中的 fspecial 和 imfilter 函数进行 Laplace 边缘提取。具体操作如下: ``` laplace_filter = fspecial('laplacian'); img_laplace = imfilter(img, laplace_filter); ``` 4. Canny 边缘提取 使用 MATLAB 中的 edge 函数进行 Canny 边缘提取。具体操作如下: ``` img_canny = edge(img, 'Canny'); ``` 5. 预处理分割 使用 MATLAB 中的 im2bw 函数进行预处理分割。具体操作如下: ``` img_preseg = im2bw(img); ``` 6. 合并图像并显示 使用 MATLAB 中的 imshow 函数将所有处理后的图像合并并显示在同一张图中。具体操作如下: ``` img_merged = [img_sobel, img_laplace; img_canny, img_preseg]; imshow(img_merged); ``` 这样,就完成了将 Sobel、Laplace、Canny 边缘提取和预处理分割的图像合并并显示在同一张图中的操作。希望这对你有帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

fpga和matlab

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

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

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

打赏作者

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

抵扣说明:

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

余额充值