【车辆计数】基于光流法实现车辆检测计数matlab 源码

一、简介

基于matlab行驶车辆检测计数:读入待处理视频,用于色彩空间转换、检测出包含汽车运动的图像块、用高斯混合模型检测背景、对检测出的运动车辆进行框画、标注检测到车辆的个数用于显示结果。
1 案例背景
在这里插入图片描述
2 理论基础
2.1 光流法检测运动原理
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.2 光流法的主要方法
在这里插入图片描述
在这里插入图片描述

二、源代码

clear;close all;
SE = strel('rectangle',[10 10]); %注意:结构元素必须具有适当的大小
BW1=imread('test5.jpg');
subplot(221);imshow(BW1);title('原图');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%添加
GRAY=rgb2gray(BW1); %灰度图像1
h=fspecial('average',9);
GRAY=uint8(round(filter2(h,GRAY))); %进行均值滤波
subplot(222);imshow(GRAY);title('均值滤波');
GRAY = imcrop(GRAY,[10 20 542 355]);   %裁剪
GRAY=double(GRAY); %转换为double类型
[Gx,Gy]=gradient(GRAY); % 计算梯度
G=sqrt(Gx.*Gx+Gy.*Gy); % 水平垂直差分
J=GRAY; 
K=find(G<2); %指定灰度级
J(K)=0;
subplot(223);imshow(J);title('锐化');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
BW2=imdilate(J,SE);%膨胀
BW3 = imfill(BW2,'holes'); %填充
BW4=imerode(BW3,SE);%腐蚀
I=im2bw(BW4);
subplot(224);imshow(I);title('目标块');
%====形态特征值计算===%
A=bwarea(I); % 计算目标的面积
I1=edge(I,'canny',0.7);
[L, num]=bwlabel(I1,8);%存放提取的目标矩阵和数目
STATS = regionprops(L,'BoundingBox');
% 存放经过筛选以后得到的所有矩形块  
n = 1; 
wh=zeros(1,num); 
for i=1:num
    box = STATS(i).BoundingBox;  %图像的长宽
    x = box(1);    %矩形坐标x  
    y = box(2);    %矩形坐标y  
    w = box(3);    %矩形宽度w  
    h = box(4);    %矩形高度h 
    wh(1,i)=w*h;
    ux = ceil(x);  %取整
    uy = ceil(y);  
    if ux > 1  
         ux = ux - 1;  
     end  
     if uy > 1  
        
     end  
     %result(n,:) = [ux uy w h];
         R=zeros(h,w);
         G=zeros(h,w);
         B=zeros(h,w);
        for j=1:w
            for ii=1:h
                R(ii,j)=BW1(ii+uy-1,j+ux-1,1);
                
                B(ii,j)=BW1(ii+uy-1,j+ux-1,3);
            end
        end
       % r(1,n)=mean(mean(R))
       % g(1,n)=mean(mean(G))
       % b(1,n)=mean(mean(B))
       % n = n+1;
      
        if(r(1,i)>130&&g(1,i)<130&&b(1,i)<130)
            disp('检测出车辆是红色')
        elseif(r(1,i)<130&&g(1,i)>130&&b(1,i)<130)
            disp('检测出车辆是绿色')
        elseif(r(1,i)<130&&g(1,i)<130&&b(1,i)>130)
            disp('检测出车辆是蓝色')
        elseif(r(1,i)<80&&g(1,i)<80&&b(1,i)<80)
            disp('检测出车辆是黑色')
        elseif(r(1,i)>170&&g(1,i)>170&&b(1,i)>170)
            disp('检测出车辆是白色')
        else
            disp('检测出车辆是其他色')
        end
end
% 创建系统对象,用于显示结果
sz = get(0,'ScreenSize');
pos = [20 sz(4)-300 200 200];
hVideoOrig = vision.VideoPlayer('Name', 'Original', 'Position', pos);
pos(1) = pos(1)+220;  %在右侧建立下一个视窗
hVideoFg = vision.VideoPlayer('Name', 'Foreground', 'Position', pos);
pos(1) = pos(1)+220;
hVideoRes = vision.VideoPlayer('Name', 'Results', 'Position', pos);
line_row = 23; % 定义感兴趣区域(ROI)
% 以下的程序段为对输入的视频图像进行处理
while ~isDone(hvfr)
    image = step(hvfr);      % 读入视频的每一帧
    y = step(hcsc, image);    % 将彩色图像转换成灰度图像
% 采用自动白平衡算法去除灰度突变
    y = y-mean(y(:));
    fg_image = step(hfdet, y); % 检验背景
    % 采用数学形态学,在前景图像中检测变化的联通图像块区域的面积
    [area, bbox] = step(hblob, fg_image);
    image_out = image;
 
 
end

三、运行结果

在这里插入图片描述
在这里插入图片描述

 

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
红细胞计数是医学领域中常见的一项指标,它可以帮助医生评估患者的健康状况以及某些疾病的发展情况。基于形态学算法的实现红细胞计数Matlab源码如下: ```matlab % 导入图像 img = imread('redcells.jpg'); % 转为灰度图像 gray_img = rgb2gray(img); % 图像二值化 bw_img = imbinarize(gray_img); % 去除小的噪点 bw_img = bwareaopen(bw_img, 20); % 填充空洞 filled_img = imfill(bw_img, 'holes'); % 平滑处理 smoothed_img = medfilt2(filled_img, [3, 3]); % 获取红细胞边缘 boundaries = bwboundaries(smoothed_img); % 计算红细胞的数量 redcell_count = length(boundaries); % 显示结果 imshow(smoothed_img); hold on; for k = 1: redcell_count boundary = boundaries{k}; plot(boundary(:, 2), boundary(:, 1), 'r', 'LineWidth', 1); end title(['红细胞数量:', num2str(redcell_count)]); hold off; ``` 此Matlab源码实现了基于形态学算法的红细胞计数。首先,将彩色图像转换为灰度图像,然后对灰度图像进行二值化处理,以获取红细胞的二值图像。接着,通过去除小的噪点和填充空洞的方式进一步优化二值图像。然后,通过中值滤波对图像进行平滑处理,以减少红细胞边缘的噪声。最后,利用`bwboundaries`函数获取红细胞边缘并计算其数量,在图像上绘制红细胞边界并显示结果。 这段源码能够快速、准确地实现红细胞计数,并可对检测到的红细胞进行可视化展示,方便医生进行观察与分析。值得注意的是,该算法对图像质量、光照等因素敏感,因此在实际应用中可能需要进行进一步的优化和调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Matlab科研辅导帮

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

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

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

打赏作者

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

抵扣说明:

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

余额充值