基于即时图像预测运动时间的优化问题问题重述数码摄像技术被广泛使用于多种场合中。有时由于客观条件的限制,拍摄设备只能在较低的分辨率下成像。为简单起见,我们只考虑单色成像。假设成像的分辨率为3264,成像方式是将整个矩形视野划分成32X64个相同大小的矩形格子,图像中每个像素的取值为对应格子的亮度平均值。每间隔一定时间拍摄一帧图像,运动的画面体现为图像的序列。第一阶段问题:现在整个视野区域向某个方向缓慢运动,拍摄到的系列图像,实时地传输到计算机中。请你建立合理的数学模型和算法,通过分析实时拍摄的图像,使用尽量少的时间,以判断出运动的方向根据以上描述,我们根据如下问题进行探讨与解决:视频的选取及处理,图像的选取及处理图像特征点的计算及优化图像拼接(重叠)技术与视野的识别如何建立具有实时运算且自然合理的坐标系问题分析本题设计视觉追踪的问题,在低分辨率下,由于亮度取平均值,呈现出来的图片辨识度较低,大多数已知的成型方法并不完全适用;同时,题中并未发生局部的运动,而是整个画面上的移动,所以与运动跟踪学科有出入。经过分析讨论,采用了surf算法。我们的预期是通过已知验证模型的合理性。但是,通过我们对实验图像的分析,传统模型显示出了不足,进而进行了改进模型假设符号说明2视频的获取2.1数码摄像技术数码摄像机行进工作的基本理原简单的说就是光---电---数字号信的转变与传输,即通过光感元件将光信转号变成电流,再将拟模电信号转变成字数信号,由专门的片芯进行处理和滤过后得到的信息原还出来就是我们看到的态动画面。数码摄像机的光感元件能把光线变转成电荷,通过模数换转器芯片转换成字数信号,要主有两种:一种是广泛用使的CCD(电荷藕合)元件;另一种是CMOS(互补金属氧化物导体)件器。2.2像素2.2.1像素的概念像素,就是CCD/CMOS上光电应感元件的数量,一个感光元件过经感光,光电信号转换,A/D转换等骤步以后,在输出的照片上就成形一个点,我们如果把影像放数大倍,会发现这些续连色调其实是由许多色彩近相的小方点所组成,这些小方点就是构成像影的最小单位“像素”(Pixel)。2.2.2像素的分类像素分为CCD素像和有效像素,现在市场上的码数相机标示的大部分是CCD的像素而不是效有像素。实验过程中,我们处相了CCD像素对像成的作用,即视频与图片的效有像素与题中要求保持一致。2.3分辨率2.3分辨率2.3.1显示分辨率显示分辨率(屏幕分辨率)是屏幕像图的精密度,是指显示器所能示显的像素有多少。由于幕屏上的点、线和面都是由素像组成的,显示器可示显的像素越多,画面就越细精,同样的屏幕域区内能显示的息信也越多,所以分辨率是个非常要重的性能指标之一。可以把整个图像象想成是一个大型的棋盘,而分辨率的表方示式就是所有经线和线纬交叉点的数目。显示分辨率一定的况情下,显示屏越小像图越清晰,反之,显示屏小大固定时,显示分率辨越高像图越清晰。2.3.2图像分辨率指图像中储存的信息量,是每寸英图像内有多少个像素点,分辨率的位单为PPI(PixelsPerInch),通常叫做:像素每英寸。2.3.3两者关系题中的分辨率指像图分辨率,与显示分率辨没有太大系联。但是,在高辨分率图像下,低分率的频视及图像的示显并不好,自然分辨率高较的显示器显示低辨分率需要进行值插计算,比如1920*1200的示显器给1920*1080的信号源,横像素不变,纵向上要将1080插值成1200行进显示,在这种况情下图像缘边会有损失,反而没有1920*1080分辨率的示显器清楚。这会导致与想理结果不符,但是,在模型立建与运算的程过中,这种影响不大,可以略忽不计。题中给出分辨率为题中成像的分辨率为32x64,即像素为32x64=2048,2048个像素点如上图,为2048个格子,每个小格都将带有一个纯色的彩色块,整体成组一幅图像。2.4视频的内容模型建立初期,我们量尽采取色彩单一、高对比度、且晰清度高的视频。且视频的缘边及噪点保证小于征特点选取的范围。同时,我们用matlab,对图像进行噪降处理。2.5视野的运动规范视野(也可以叫做摄像头)的动运方向是不确定的,可以按照二维直角标坐系内平移,这是算计结果反应际实结果;若视野时在三位间空内的移动,它在图像上的动移方向不能反应际实的视野动移方向,需利用画法几何的识知进行投影计算,这时,视野动运状态的描述会变得极为复杂。3图像的预处理3.1视频中截取图像3.1.1截取图像的规范图像截取的规范与视频的帧数以及视频中视野移动速度的大小有关。但是原则上,应在单位时间内,多截取图像,需要注意的是,在前后两张图片中特征点匹配后,视野的运动方向大致能确定出来,但是,虑到极短时间内拍摄的图像正确的特征点对可能有一些其他影响,所以多拍几张,进行拟合,使得特征点对中矩阵变换系数行成的运动方向序列更圆润。%这段代码可以选择一个或多个视频,根据视频名称和帧的序号对图片命名。设定的只能选择avi格式,至于其它格式的视频你可以改改代码的第一句试试%看。%[filename,pathname,fileindex]=uigetfile('*.avi','选择视频文件','video.avi','Multiselect','on');ifischar(filename)%只有选择了文件才进行以下计算video=mmreader([pathnamefilename]);%%GeneralSettings:%Duration时间%Name视频名称%Path路径%Tag=%Type=mmreader%UserData=[]%%VideoSettings:%BitsPerPixel=24%FrameRate视频采集速率%Height高度%NumberOfFrames总帧数%VideoFormat图像模式%Width=宽度LEN=video.NumberOfFrames;%获得视频长度dir=strcat(pathname,strrep(filename,'.avi',''),'\pic');mkdir(dir);fn=strrep(filename,'.avi','');fork=1:LEN-1%若read到len,常会报错如下???MATLAB:read:readTimedOut,read到len-1就好了frame=rgb2gray(read(video,k));ifk10imwrite(frame,strcat(dir,'\',fn,'-avi-000',int2str(k),'.bmp'),'bmp');%把每帧图像存入硬盘elseifk=10&&k100imwrite(frame,strcat(dir,'\',fn,'-avi-00',int2str(k),'.bmp'),'bmp');%把每帧图像存入硬盘elseifk=100&&k1000imwrite(frame,strcat(dir,'\',fn,'-avi-0',int2str(k),'.bmp'),'bmp');%把每帧图像存入硬盘elseifk=1000&&k10000imwrite(frame,strcat(dir,'\',fn,'-avi-',int2str(k),'.bmp'),'bmp');%把每帧图像存入硬盘endendelseifiscell(filename)navi=length(filename);forn=1:navivideo=mmreader([pathnamefilename{n}]);%%GeneralSettings:%Duration时间%Name视频名称%Path路径%Tag=%Type=mmreader%UserData=[]%%VideoSettings:%BitsPerPixel=24%FrameRate视频采集速率%Height高度%NumberOfFrames总帧数%VideoFormat图像模式%Width=宽度LEN=video.NumberOfFrames;%获得视频长度dir=strcat(pathname,strrep(filename{n},'.avi',''),'\pic');mkdir(dir);fn=strrep(filename{n},'.avi','');fork=1:LEN-1%若read到len,常会报错如下???MATLAB:read:readTimedOut,独到len-1就好了frame=rgb2gray(read(video,k));ifk10imwrite(frame,strcat(dir,'\',fn,'-avi-000',int2str(k),'.bmp'),'bmp');%把每帧图像存入硬盘elseifk=10&&k100imwrite(frame,strcat(dir,'\',fn,'-avi-00',int2str(k),'.bmp'),'bmp');%把每帧图像存入硬盘elseifk=100&&k1000imwrite(frame,strcat(dir,'\',fn,'-avi-0',int2str(k),'.bmp'),'bmp');%把每帧图像存入硬盘elseifk=1000&&k10000imwrite(frame,strcat(dir,'\',fn,'-avi-',int2str(k),'.bmp'),'bmp');%把每帧图像存入硬盘endenddisp(strcat(num2str(n),'/',num2str(navi),':',filename{n},'Finished!',datestr(now,13)));endelsereturnendmsgbox('所有帧提取完毕,已写入磁盘!','提示');clearall3.2图像的灰度化3.2.1基本原理将彩色图像转化成为灰度图像的过程成为图像的灰度化处理。彩色图像中的每个像素的颜色有R、G、B三个分量决定,而每个分量有255中值可取,这样一个像素点可以有1600多万(255*255*255)的颜色的变化范围。而灰度图像是R、G、B三个分量相同的一种特殊的彩色图像,其一个像素点的变化范围为255种,所以在数字图像处理种一般先将各种格式的图像转变成灰度图像以使后续的图像的计算量变得少一些。灰度图像的描述与彩色图像一样仍然反映了整幅图像的整体和局部的色度和亮度等级的分布和特征。图像的灰度化处理可用两种方法来实现。3.2.3灰度图的算法第一种方法使求出每个像素点的R、G、B三个分量的平均值,然后将这个平均值赋予给这个像素的三个分量。第二种方法是根据YUV的颜色空间中,Y的分量的物理意义是点的亮度,由该值反映亮度等级,根据RGB和YUV颜色空间的变化关系可建立亮度Y与R、G、B三个颜色分量的对应:Y=0.3R+0.59G+0.11B,以这个亮度值表达图像的灰度值。3.2.2处理方法采用matlab进行彩色图像的批处理,彩色图像是RGB,直接用rgb2gray。灰度图像是个NxM矩阵。N和M为坐标,存储的数值是灰度深浅强度。RGB为NxMx3的矩阵。N和M为坐标,附带的3是[红,绿,蓝]三色,数值各取0-1.0之间。3.2.3矩阵的选择采用分辨率为1024x768大小的图像进行批处理,建立一个1024x768x3的矩阵。为下一步调整分辨率,模糊图像,取平均亮度预留出空间。3.2.4批量处理%载入文件夹pathname=uigetdir(cd,'请选择文件夹');ifpathname==0msgbox('您没有正确选择文件夹');return;end%搜索jpg格式文件filestif=ls(strcat(pathname,'\*.jpg'));%m×n字符数组files=cellstr(filestif);%m×1元胞数组,m为文件数len=length(files);fori=1:lenfilesname{i}=strcat(pathname,'\',files(i));%读取文件名,保存为cell元胞数组结构IM{i}=imread(cell2