logo资料库

MATLAB运动目标检测代码.docx

第1页 / 共2页
第2页 / 共2页
资料共2页,全文预览结束
运动目标检测 matlab 程序: clear clc nStar = 1; nNUM = 164; Background = double( rgb2gray(imread( [ 'car (',int2str(nStar),').bmp']) ));%第一帧当做初始背景 % 背景更新过程,其中 int2str 将整型常量转为字符串 for k = nStar+1 :1: nNUM CurrentImage =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=[1 1 1;1 1 1;1 1 1];%结构元素 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);%找出图像中的八连通区域,视为车辆所在的区域 for i = 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); end end %用来计算灰度图像二值化时的阈值,采用迭代法 function m=yuzhi(Imgray) mingray=min(min(Imgray));
maxgray=max(max(Imgray)); m=double(mingray)/2+double(maxgray)/2; %初始分割阈值 while 1 a=find(Imgray<=m); A=sum(Imgray(a))/length(a); b=find(Imgray>m); B=sum(Imgray(b))/length(b); n=(A+B)/2; if abs(m-n)<1 break; m=n; else end end
分享到:
收藏