目录
1.算法描述
2.仿真效果预览
3.MATLAB核心程序
4.完整MATLAB
当今科技飞速发展,带来了智能交通的空前发达,也为经济可持续发展做出一定贡献。交通运输在一个国家的经济社会发展中起着助推器的作用。交通运输的监控与管理智能化也变得尤为重要。基于视频的车辆检测作为智能交通系统的基石, 具有直观性、大范围检测、安装和维护方便等优势,成为采集交通信息技术的有力工具。因而视频车辆检测研究具有非常重要的意义。
形态学是图像处理中应用最为广泛的技术之一,主要用于从图像中提取对表达和描绘区域形状有意义的图像分量,使后续的识别工作能够抓住目标对象最为本质的形状特征,如边界和连通区域等。同时像细化、像素化和修剪毛刺等技术也常应用于图像的预处理和后处理中,成为图像增强技术的有力补充。形态学的基本思想是利用一种特殊的结构元来测量或提取输入图像中相应的形状或特征,以便进一步进行图像分析和目标识别。
计算机和电子信息技术的高速发展,使得数据处理加工能力逐步增强,为图像处理、计算机视觉和模式识别技术应用于智能交通信息采集提供了强有力的保障。该系统通过摄像机对交通信息流进行摄像,利用图像处理和模式识别技术对连续的交通信息流进行处理,以此达到监测交通信息流的目的。同时,现场的交通视频信号也能够为电视监控共用。近年来,该系统得到快速发展,作为一种检测手段,视频检测技术所提供的丰富交通信息,以及所具有的各种优点,都是其他方法难以比拟的。
形态学处理
腐蚀:对核范围内的像素,只要有一个是非前景,则设置为背景;比如对于3*3的核函数,如果当前像素的3*3邻域内像素全是前景则保留,否者设置为背景;常用于去除较小噪声,分离物体。
膨胀:对核范围内的像素,只要有一个是前景,则设置为前景;比如对于3*3的核函数,如果当前像素的3*3邻域内像素有一个是前景则当前像素设置为前景,否者设置为背景;通常膨胀会用在腐蚀之后,腐蚀会去除小的噪声,但也会把前景变瘦,而膨胀则会再变胖。
开运算:先腐蚀,再膨胀;主要处理噪点在前景外的图像。
闭运算:先膨胀,再腐蚀;主要处理噪点在前景内的图像。
如果图像前景内外都有噪点,先开再闭 或 先闭再开 都可以得到前景图像。
形态学梯度:膨胀-腐蚀;可以得到前景轮廓。
顶帽运算:原图-开运算;可以得到前景外的噪点。
黑帽运算:闭运算-原图;可以得到前景内的噪点。
————————————————
matlab2022a仿真结果如下:
.............................................................
th=zeros(1,(length(imageFiles)-1)/4);
se1=[1 1 1];
se2=ones(9);
color=[1 0 0;0 1 0;0 0 1;1 0 1;0 1 1;1 1 0;1 1 1];
a=0;
q=0;
for z=1:(length(imageFiles)-1)/4:length(imageFiles)-1
figure,
%%%%%%%%%%%%%%%%%%%%%%%%%%求取阈值%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for k = z:(length(imageFiles)-1)/4+z-1
fileName = imageFiles(k).name; % 当前文件名,注意这里不含路径信息
I = rgb2gray(imread( [folderPath, fileName] ))- GrayRoad; % 将图像数据读入矩阵
th(k-z+1)=graythresh(I);
end
th1=sum(th)/length(th)-0.045;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for k = z:(length(imageFiles)-1)/4+z-1
fileName = imageFiles(k).name; % 当前文件名,注意这里不含路径信息
I0 = imread([folderPath, fileName]);
% J=midfilter(I);
I = rgb2gray(I0)- GrayRoad; % 将图像数据读入矩阵
I=im2bw(I,th1); %分割
J=midfilter(I);
I=imclose(J,se2); %闭运算
I=imopen(I,se1); %开运算
[Car,num,Rect] = CarProc(I); %标记、计数、求坐标
subplot(m,n,k-z+1);imshow(I0,[]); title(num2str(k))
midCar=Car;
if k~=1
for v=1:num
[r,c]=size(Car);
Car1=Car;
for x=1:r
for y=1:c
if Car1(x,y)~=v
Car1(x,y)=0;
end
end
end
J=Car1.*Car0;
if J==0
[r1,c1]=find(Car1~=0);
a=a+1;
for k1=1:length(r1)
midCar(r1(k1),c1(k1))=a;
end
q=a;
if (q>7)&&(q<=14)
q=q-7;
end
if q>14
q=q-14;
end
rectangle('Position',Rect(v,:),'EdgeColor',color(q,:),'LineWidth',1);
text(Rect(v,1),Rect(v,2),num2str(a),'color','r');
else
[r1,c1]=find(Car1~=0);
[c2,d2]=find(Car1.*Car0~=0);
for k1=1:length(r1)
midCar(r1(k1),c1(k1))=Car0(c2(1),d2(1));
end
g=Car0(c2(1),d2(1));
if (Car0(c2(1),d2(1))>7)&&(Car0(c2(1),d2(1))<=14)
g=Car0(c2(1),d2(1))-7;
end
if Car0(c2(1),d2(1))>14
g=Car0(c2(1),d2(1))-14;
end
rectangle('Position',Rect(v,:),'EdgeColor',color(g,:),'LineWidth',1);
text(Rect(v,1),Rect(v,2),num2str(Car0(c2(1),d2(1))),'color','r');
end
end
....................................................
A164
V