文档

光学传感器图像生成

从模拟运动数据生成光学传感器图像

这个例子展示了如何生成一个64帧的电影,帧大小为64 * 64像素(每秒10帧)。电影中模拟了一个移动的目标,这个目标正在通过一个本身也在移动的结构化背景。由随机振动引起的抖动运动也会产生(在名为“aero_vibrati”的Simulink®模型中),抖动运动被添加到整体传感器运动中。万博1manbetx最后,利用高斯光学点扩散函数对图像进行模糊处理。

注意:此处更改delta也需要更改Simulink模型“振动”中的参数设置对话框。万博1manbetx

delta = 0.1;%生成序列的采样时间num_frames = 64;%要生成的帧数Framesize = 64;%正方形帧大小(像素)Out = 0 (framesize,framesize,num_frames);将电影存储初始化为3D数组。

生成一个目标并定义它的运动

第一阶段是定义目标物体的形状和运动。所选择的形状是一个大的加号,图像由表示每个像素位置的图像强度的矩阵定义。目标被定义为从图像的中心到右下移动。

目标= [0 (3,11)0 (1,5)6 0 (1,5)0 (1,5)6 0 (1,5)0 (1,3)6 6 6 6 0 (1,3)目标是一个5乘5像素的加号0(1,5) 6个0 (1,5)%,强度为6(信噪比~4)。0(1,5) 6个0 (1,5)总目标图像是在一个11x11的网格0 (11)];%允许图像被插入而没有错误。Target_velx = 1;% x方向上的目标速度,单位为像素/秒Target_vely = 1;%目标速度在y方向,单位是像素/秒target_x_initial = framesize/2;%目标最初在x帧的中心target_y_initial = framesize/2;%和y图(1);colormap (“灰色”);图像(目标* 32);标题(目标图像的

构建背景和目标合成图像

生成一个正弦相关的背景,并给它一个漂移运动。然后,将目标叠加到背景图像上。

Backsize = framesize+36;使背景比框架大,这样当它%漂移有新的像素可漂移。Xygrid = (1:backsize)/backsize;B = 2 * sin(2 *π* xygrid) ^ 2”* cos(2 *π* xygrid) ^ 2;psd = fft2(B);PSD = real(PSD .*conj(PSD));background = B + 0.5*randn(backsize);添加高光高斯白色的结构的%序列%方差为0.25 (σ为0.5)。Xoff = 10;Yoff = 10;%传感器位置与背景的0,0偏移Driftx = 1;漂移= 1;背景在a和y方向上的漂移率% pix/sec。Minout = min(min(min(背景)));Maxout = max(max(max(背景)));colormap (“灰色”);图像((background-minout) * 64 / (maxout-minout))标题(“背景图像加白色镜面噪声”

模拟跟踪器的旋转振动

利用aero_vibrati模型对跟踪器的旋转振动进行了仿真。模拟跟踪器振动所需的数据是通过运行Simulink模型“aero_vibrati”生成的。万博1manbetx

使用si万博1manbetxm命令运行Simulink振动模型(注意——如果delta从0.1秒改变,Simulink模型也必须改变,以确保振动的采样时间与跟踪器图像模型中的采样时间匹配。

由此产生的随机旋转如图1所示。

= 2* *5;模型中的结构频率为5,10,15hz。Zeta = 0.01;%所有模式的阻尼比open_system (“aero_vibrati”) simout = sim(“aero_vibrati”“SrcWorkspace”“当前”);Vibdat = simout.get(“vibdat”);Simuli万博1manbetxnk模型“aero_vibrati”%生成点的振动数据% 0.01秒的采样时间。Vibx = vibdat(1:10:1000);%模拟输出为返回为变量simout变量simout包含的%Viby = vibdat(2001:10:2000);包含的vibdat数组%振动数据Levarmx = 10;%旋转杠杆臂振动噪声在xLevarmy = 10;%和y。次要情节(211);图(0.01 * (1:10:1000),vibx);网格;标题(“跟踪器随机旋转的时间历史”)包含(“时间”); ylabel (“x方向”)次要情节(212);图(0.01 * (1:10:1000),viby);网格;包含(“时间”); ylabel (“y方向”

从背景,目标和抖动模拟运动效果

组成电影的帧现在被创建并存储在多维数组(out)中。由于目标运动、背景漂移和跟踪器振动,每一帧的背景和目标位置不同。电影的第一帧如图1所示。

clf;drawnow;T = 1:num_frames以driftx和drifty的速率漂移背景%(单位:像素/秒),并加入振动:Xshift = driftx*delt*t+levarmx*vibx(t,1);Yshift = drify *delt*t+levarmy*viby(t,1);使用MATLAB(R)函数interp2插值二维图像:[xgrid, ygrid] = meshgrid(1:backsize);[xindex, yindex] = meshgrid(xshift:1:xshift+backsize,yshift:1:yshift+backsize);Outtemp = interp2(xgrid,ygrid,background,xindex,yindex);将漂移图像从后退大小截断为帧大小:Out (:,:,t) = outtemp(xoff:xoff+ framsize -1,xoff:xoff+ framsize -1);现在让目标也移动:Tpixinx = floor(target_velx* delta *t);Tpixiny = floor(target_vely*delt*t);在插值之前,提取移动的像素数Txi = target_velx*delt*t - tpixinx;Tyi = target_vely* delta *t - tpixiny;只在原点周围的子像素上进行插值[txgrid tygrid] = meshgrid(1:11);% meshgrid在这里生成网格元素的矩阵[txi tyi] = meshgrid(txi+1:txi+11,tyi+1:tyi+11);% meshgrid使用x和y网格生成2个矩阵首先使用内置的MATLAB命令interp2插值强度值Temp = interp2(txgrid,tygrid,目标,txi,tyi);将目标插入由初始偏移量和整个移动像素数决定的位置Tx = tpixinx + target_x_initial -1;Ty = tpixiny + target_y_initial -1;(tx: tx + 6,泰:泰+ 6,t) = temp(9: 1:3, 9: 1:3) +出(tx: tx + 6,泰:泰+ 6,t);结束Minout = min(min(min(out)));max(max(max(out)));colormap (“灰色”);Image ((out(:,:,1)-minout) * 64/(maxout-minout));标题(第一帧目标和背景图像

通过光学传输图像-使用高斯“孔径函数”

这段代码可以很容易地使用测量孔径函数——只需将接下来的五行替换为“load measured_aperture”,其中measured_aperture是存储在ASCII中的测量函数,数据存储在文件measured_aperture中。mat是一个MATLAB®.mat文件,包含矩阵函数。(在MATLAB中输入“帮助加载”以了解如何使用加载,并查看显示如何读写MATLAB .mat文件的c和fortran代码)。

(注:当点扩散函数为高斯分布时,孔径函数也为高斯分布)

为了模拟跟踪器光学的效果,现在使用二维FFT(快速傅里叶变换)对每个电影帧进行模糊处理。生成图像的第一帧如图1所示。

X = 1:帧大小;Y = 1:帧大小;Sigma = 120;apfunction = exp (- (x-framesize / 2) ^ 2 /(2 *σ))的* exp (- (y-framesize / 2) ^ 2 /(2 *σ));Apfunction = fftshift(Apfunction);%旋转,使它符合FFT公约j = 1: num_frames (:,:, j) =实际(ifft2 (apfunction。* fft2 ((:,:, j))));结束Minout = min(min(min(out)));max(max(max(out)));colormap (“灰色”);图像(((:,:1)-minout) * 64 / (maxout-minout));标题(“第一帧模糊图像。”

生成MATLAB®电影和播放它回来

缩放电影帧,使其具有从最小到最大的64个强度值,然后将结果显示为图像。关于moviein和getframe如何工作,请参阅MATLAB帮助。

Minout = min(min(min(out)));max(max(max(out)));M = moviein(num_frames);j = 1:num_frames image((out(:,:,j)-minout)*64/(maxout-minout)) drawnow M(:,j) = getframe;结束colormap (“灰色”)电影(M);

可选:将影片保存在.mat文件中

您可以选择将生成的跟踪器电影保存在一个mat文件中,也可以保存背景的psd,以便以后与电影一起使用。

保存trackerimage保存psdbackpsd保存moviedat
bdclose (“aero_vibrati”);
这个话题有用吗?