武汉理工大学《通信工程应用技术综合训练与实习》报告
%%%%%
[rownum colnum] = size(I1);
II=zeros(rownum+2*dm,colnum+2*dm); II(dm+1:dm+rownum,dm+1:dm+colnum)=I1; for i=1:dm
II(i,dm+1:dm+colnum)=II(dm+1,dm+1:dm+colnum);
II(rownum+dm+i,dm+1:dm+colnum)=II(dm+rownum,dm+1:dm+colnum); end for j=1:dm
II(1:rownum+2*dm,j)=II(1:rownum+2*dm,dm+1);
II(1:rownum+2*dm,colnum+dm+j)=II(1:rownum+2*dm,dm+colnum); end
blocksize=16;
rowblocks =rownum/blocksize; colblocks =colnum/blocksize;
A=99999999999999999999; %为了找到最小的均方误差,A用于设定一个很大的初值
Eij=0;
xrecord=ones(16,16); %xrecord,yrecord用于存放匹配块的块号,即运动矢量
yrecord=ones(16,16);
diff=zeros(256,256); %这幅图像的大小为256*256,diff用于存放像素差值
tic
for x=0:(rowblocks-1) %x表示行中第几个子块 row=x*blocksize;
22
武汉理工大学《通信工程应用技术综合训练与实习》报告
for y=0:(colblocks-1) %y表示列中第几个子块
col=y*blocksize;
tempx=x*blocksize+1:(x+1)*blocksize; tempy=y*blocksize+1:(y+1)*blocksize;
for p=-dm:dm
for q=-dm:dm %(p,q)表示在x,y对应子块在前一帧中所的搜索位置
Eij=0;
Eij=sum(sum((I2(row+1:row+blocksize,col+1:col+blocksize)-II(row+dm+p+1:row+dm+p+blocksize,col+dm+q+1:col+dm+q+blocksize)).^2))/(blocksize^2);
if Eij
A=Eij; xrecord(x+1,y+1)=p;
yrecord(x+1,y+1)=q;
end end end
A=999999999999999999; for mx=1:blocksize for ny=1:blocksize
diff(row+mx,col+ny)=I2(row+mx,col+ny)-II(row+mx+dm+xrecord(x+1,y+1),col+ny+dm+yrecord(x+1,y+1));
23
武汉理工大学《通信工程应用技术综合训练与实习》报告
end end end end
for x=0:(rowblocks-1) %x表示行中第几个子块
row=x*blocksize;
for y=0:(colblocks-1) %y表示列中第几个子块
col=y*blocksize;
III(row+1:row+blocksize,col+1:col+blocksize)=II(row+dm+xrecord(x+1,y+1)+1:row+dm+xrecord(x+1,y+1)+blocksize,col+dm+yrecord(x+1,y+1)+1:col+dm+yrecord(x+1,y+1)+blocksize)+diff(row+1:row+blocksize,col+1:col+blocksize);
end end toc FS_time=toc; mse=sum(sum(diff.^2)); mse=mse/(rownum*colnum); FS_PSNR=10*log10(255*255/mse); 三.三步搜索法子程序 %三步搜索法
24
武汉理工大学《通信工程应用技术综合训练与实习》报告
function [TSS_PSNR,TSS_time,diff,III,xrecord,yrecord]=TSS(I1,I2) dm=7;
%给图像扩边,每个边都扩dm大小 [rownum colnum] = size(I1);
II=zeros(rownum+2*dm,colnum+2*dm); II(dm+1:dm+rownum,dm+1:dm+colnum)=I1; for i=1:dm
II(i,dm+1:dm+colnum)=II(dm+1,dm+1:dm+colnum);
II(rownum+dm+i,dm+1:dm+colnum)=II(dm+rownum,dm+1:dm+colnum); end for j=1:dm
II(1:rownum+2*dm,j)=II(1:rownum+2*dm,dm+1);
II(1:rownum+2*dm,colnum+dm+j)=II(1:rownum+2*dm,dm+colnum); end
blocksize=16;
rowblocks =rownum/blocksize; colblocks =colnum/blocksize;
A=99999999999999999999; %为了找到最小的均方误差,A用于设定一个很大的初值
Eij=0;
xrecord=ones(16,16); %xrecord,yrecord用于存放匹配块的块号,即运动矢量
yrecord=ones(16,16);
diff=zeros(256,256); %这幅图像的大小为256*256,diff用于存放像素差值
tic
for x=0:(rowblocks-1) %x表示行中第几个子块
25
武汉理工大学《通信工程应用技术综合训练与实习》报告
row=x*blocksize;
for y=0:(colblocks-1) %y表示列中第几个子块
col=y*blocksize;
tempx=x*blocksize+1:(x+1)*blocksize; tempy=y*blocksize+1:(y+1)*blocksize;
for p1=-4:4:4 %第一步
for q1=-4:4:4 %(p,q)表示在x,y对应子块在前一帧中所的搜索位置
Eij=0;
Eij=sum(sum((I2(row+1:row+blocksize,col+1:col+blocksize)-II(row+dm+p1+1:row+dm+p1+blocksize,col+dm+q1+1:col+dm+q1+blocksize)).^2))/(blocksize^2);
if Eij
A=Eij; xrecord(x+1,y+1)=p1;
yrecord(x+1,y+1)=q1;
end end end
p1=xrecord(x+1,y+1); q1=yrecord(x+1,y+1);
26