您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > MATLAB运动目标检测代码
运动目标检测matlab程序:clearclcnStar=1;nNUM=164;Background=double(rgb2gray(imread(['car(',int2str(nStar),').bmp'])));%第一帧当做初始背景%背景更新过程,其中int2str将整型常量转为字符串fork=nStar+1:1:nNUMCurrentImage=double(rgb2gray(imread(['car(',int2str(k),').bmp'])));%当前帧FormerImage=double(rgb2gray(imread(['car(',int2str(k-1),').bmp'])));%前一帧ID=uint8(abs(CurrentImage-FormerImage));%帧间差分%选择阈值T=yuzhi(ID);%迭代法计算二值化阈值,比较耗时BW=im2bw(ID,T/255);%更新背景alpha=0.1;%背景更新的速度CurrentBack=Background.*BW+(alpha.*CurrentImage+(1-alpha).*Background).*(1-BW);%前后两帧有变化的区域不更新,无变化的区域更新到背景中去Background=CurrentBack;%背景更新完毕Cut=abs(CurrentImage-Background);%前景与背景差分Cut=uint8(Cut);Tcut=yuzhi(Cut);%迭代法计算二值化阈值,比较耗时BWCut=im2bw(Cut,Tcut/255);%差分后的图像进行二值化SE=[111;111;111];%结构元素BWCutero=imerode(BWCut,SE);%对二值图像进行腐蚀,以消除微小变动的区域BWCuterodil=bwmorph(BWCutero,'dilate',3);%膨胀figure(1),imshow(BWCuterodil),title('差分后的二值化图像')figure(2),imshow(imread(['car(',int2str(k),').bmp']))[L,nm]=bwlabel(BWCuterodil,8);%找出图像中的八连通区域,视为车辆所在的区域fori=1:nm[r,c]=find(L==i);left=min(c);right=max(c);top=min(r);buttom=max(r);width=right-left+1;height=buttom-top+1;rectangle('Position',[left,top,width,height],'EdgeColor','r');%对车辆用矩形标记pause(0.01);endend%用来计算灰度图像二值化时的阈值,采用迭代法functionm=yuzhi(Imgray)mingray=min(min(Imgray));maxgray=max(max(Imgray));m=double(mingray)/2+double(maxgray)/2;%初始分割阈值while1a=find(Imgray=m);A=sum(Imgray(a))/length(a);b=find(Imgraym);B=sum(Imgray(b))/length(b);n=(A+B)/2;ifabs(m-n)1break;elsem=n;endend
本文标题:MATLAB运动目标检测代码
链接地址:https://www.777doc.com/doc-2060356 .html