1、学号:200808205135 姓名:柯锦图像处理技术大作业学号:200808205135姓名:柯锦班级:B08082051学院:数计1 作业题目基于图像的动态景物的监测与跟踪2 作业数据短视频,背景相同,一个目标运动,及多目标运动3 基本方法 (1) 图像增强 (2) 图像基本运算(3) 图像分割见代码注释:单目标主要代码如下function pushbutton4_Callback(hObject, eventdata, handles)% hObject handle to pushbutton4 (see GCBO)% eventdata reserved - to be define
2、d in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)global KeJin;%设置全局变量,用于记录目标单击的按钮axes(handles.axes1); %在 axes1 中处理,实现原动画的显示clear data %数据清理avi = aviread(samplevideo.avi);%读取一个 avi 动画,放到临时数组 avi 中video = avi.cdata;for a = 1:length(video) %一帧一帧的读取 video,并调用绘图函
3、数 imagesc 显示每一帧的内容,以达到 avi 动画的播放imagesc(videoa);axis image offdrawnow;end;%handles.keJin=1;%guidata(hObject, handles);KeJin=1;% - Executes on button press in pushbutton5.function pushbutton5_Callback(hObject, eventdata, handles)% hObject handle to pushbutton5 (see GCBO)% eventdata reserved - to be d
4、efined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)学号:200808205135 姓名:柯锦global KeJin;if KeJin=1axes(handles.axes2);%在 axes2 中处理,实现目标的跟踪的显示clear dataavi = aviread(samplevideo.avi);video = avi.cdata;tracking(video);%调用 tracking 函数,实现动画跟踪(单目标)endif KeJin=2ax
5、es(handles.axes2);MovingDetect();%调用 MovingDetect 函数,实现动画跟踪(多目标)endfunction d = tracking(video) %跟踪处理函数,实现一个运动目标的跟踪if ischar(video)% Load the video from an avi file.avi = aviread(video);pixels = double(cat(4,avi(1:2:end).cdata)/255;%将数据缩小 255 倍,然后以第四维进行组合,图像的增强(像素点的值缩小)clear avielse% Compile the pix
6、el data into a single arraypixels = double(cat(4,video1:2:end)/255; %将数据缩小 255 倍,然后以第四维进行组合,图像的增强(像素点的值缩小)clear videoend% Convert to RGB to GRAY SCALE image.nFrames = size(pixels,4);%pixels 第四维的大小放在 nFrames 中(总帧数)for f = 1:nFrames %对于没一帧,都做如下工作pixel(:,:,f) = (rgb2gray(pixels(:,:,:,f); %转换为灰度图像endrow
7、s=240;cols=320; nrames=f;for l = 2:nrames%从第二帧到最后一帧,都做如下工作%下句为图像的基本运算,减运算,也是该跟踪的根本算法之一 d(:,:,l)=(abs(pixel(:,:,l)-pixel(:,:,l-1);%前后图像相减,得到的矩阵放到 d 中,以实现图像跟踪,此为图像的基本运算k=d(:,:,l);bw(:,:,l) = im2bw(k, .2);%转化为二值图像 学号:200808205135 姓名:柯锦bw1=bwlabel(bw(:,:,l);imshow(bw(:,:,l)%显示二值图像hold on %右方向为横坐标轴%下方向为纵
8、坐标轴cou=1;for h=1:rowsfor w=1:colsif(bw(h,w,l)0.5)%此处用到图像分割,全局阀值分割 toplen = h; %每一帧,如果 cou!=1 的话,下边界纵坐标放在 toplen 中 , if (cou = 1)tpln=toplen; %每一帧,上边界纵坐标放在 tpln 中 endcou=cou+1;breakend endend%disp(toplen);coun=1;for w=1:colsfor h=1:rowsif(bw(h,w,l)0.5)%此处用到图像分割,全局阀值分割 leftsi = w; %每一帧,如果 coun!=1 的话,右
9、边界横坐标放在 leftsi 中 if (coun = 1)lftln=leftsi; %每一帧,左边界横坐标放在 lftln 中coun=coun+1;endbreakend endend widh=leftsi-lftln;%矩形的长(宽度)heig=toplen-tpln;%矩形的宽(高度)widt=widh/2;heit=heig/2;with=lftln+widt;%中心横坐标heth=tpln+heit;%中心纵坐标rectangle(Position,lftln tpln widh heig,EdgeColor,r);%用红色矩形框住目标,以确定目标位置plot(with,het
10、h, r);%用 标出目标的中心学号:200808205135 姓名:柯锦drawnow;hold offend;多目标function x = MovingDetect()clear data%初始化背景所需要的帧数N=15;%背景更新参数p1 = 95;p2 = 100-p1;M_ = 1;%读取 AVI 视频文件mov = aviread(My.AVI);%获取视频帧数dimension = size(mov);frameQTY = dimension(2);M=mov;tmFr = rgb2gray(frame2im(mov(1);s = size(tmFr);scrsz = get(
11、0,ScreenSize);%h1 = figure(position, scrsz(4)/2,scrsz(4)/2,s(2)*2,s(1)*2);cdataSum = int16(zeros(s);sedisk = strel(rectangle,2,2);sedisk2 = strel(rectangle,3,2);count = zeros(s);for c1 = 1:frameQTY;colorFrC = M(c1);%获取第 i 帧frC = rgb2gray(frame2im(colorFrC);frC = im2frame(frC, gray(256);f = int16(frC
12、.cdata);if( c1= 45 );bwf(bw) = 255;%bwf=logical(bwf);cdB = uint8(cdB);f3 = imdilate(bwf, sedisk);f3 = imerode(f3, sedisk);noSmall = bwareaopen( f3, 150 );%标签矩阵L = bwlabel( noSmall, 4 );taggedCars( :,: ) = frC.cdata;if any( L(:) )stats = regionprops(L,boundingbox,filledArea);for label = 1:length(stat
13、s)box = stats(label);if( box.FilledArea 0.3 )continue;endbox = box.BoundingBox;left=round(box(1);top=round(box(2);right=round(box(1)+box(3)-1);bottom=round(box(2)+box(4)-1);if( abs(top - bottom)/abs(right - left) 4 | abs(right - left)/abs(top - bottom) 4 )continue;endtaggedCars(top,left:right)=1; %画
14、矩形框%taggedCars(bottom,left:right)=1;taggedCars(top:bottom,left)=1;taggedCars(top:bottom,right)=1;endend%f5 = imdilate(imerode(f,tk1), tk);学号:200808205135 姓名:柯锦ff = frC.cdata, cdB;f3, taggedCars;%noSmall, taggedCarsff = im2frame(ff,gray(256);movie(ff, 1, 15, 0,0,0,0);%播放第 i 帧%movie(h1, ff, 1, 15, 0,0
15、,0,0);%播放第 i 帧end% end of if-else end%-播放结束4 作业完成目标:动态目标的定位与跟踪,并用方框提示并给出运动轨迹截图如下:单目标:多目标:部分代码来源于:学号:200808205135 姓名:柯锦http:/ function d = tracking(video) 算法中,矩形边界由下面思路得出:从左到右依次扫描图像,第一个为值为 1 的点的横坐标即为矩形左上角点的横坐标,最后一个为 1 的点的横坐标为矩形右下角横坐标;从上到下第一个值为 1 的点的纵坐标即为矩形左上角的纵坐标,最后一个为 1 的点的纵坐标为矩形右下角纵坐标;矩形的中心也就很容易得出。对于多目标的跟踪,涉及到的方面就很多了,关键就是要解决目标遮挡的问题,由于没有好的思路算法,在加上时间短促,其他科目的学习,此问题始终没能解决。但有如下思路:先采用图像相减,将目标区域(多个)存放在一个三维数组中,当有遮挡时,根据记忆算法,然后还原,即可解决目标遮挡的问题。最后,matlab 语法跟 vc 等有很大的区别,用起来不很方便。还有,我要学习的东西还很多很多。路漫漫其修远兮,吾将上下而求索!
Copyright © 2018-2021 Wenke99.com All rights reserved
工信部备案号:浙ICP备20026746号-2
公安局备案号:浙公网安备33038302330469号
本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。