function[mi,mj]=PackMatch(a,b,pi,pj) % 进行运动搜索块匹配
% a是前一桢,b是当前桢
% pi,pj是被匹配块的第一个像素的位置
% mi,mj是结果块的第一个像素的位置
M=144;
N=176;
framesize=M*N;
blocksize=8;
vnum=M/blocksize;
hnum=N/blocksize;
min=10000000;
mi=1;
mj=1;
matchok=zeros(144,176); % 标记是否已经搜索过
% % 全搜索
% w=7;
% % for i=1:M-blocksize
% % for j=1:N-blocksize
% for i=pi-w:pi+w
% for j=pj-w:pj+w
% if i>0 & i<=144 & j>0 & j<=176 & i+w<=144 & j+w<=176
% mse=0;
% for m=0:blocksize-1
% for n=0:blocksize-1
% mse=mse+(b(pi+m,pj+n)-a(i+m,j+n)).^2;
% end
% end
% % for m=0:blocksize/2-1
% % for n=0:blocksize/2-1
% % mse=mse+(b(pi+2*m,pj+2*n)-a(i+2*m,j+2*n)).^2; % 隔点匹配
% % end
% % end
% if mse<=min
% min=mse;
% mi=i;
% mj=j;
% end
% end
% end
% end
% % 三步法
% w=4;
% ci=pi;
% cj=pj;
% while w>=1
% tempi=ci;
% tempj=cj;
% for i=-1:1
% for j=-1:1
% if ci+i*w>0 & ci+i*w<=144 & cj+j*w>0 & cj+j*w<=176 & matchok(ci+i*w,cj+j*w)==0
% mse=0;
% for m=0:blocksize-1
% for n=0:blocksize-1
% mse=mse+(b(pi+m,pj+n)-a(ci+i*w+m,cj+j*w+n)).^2;
% end
% end
% matchok(ci+i*w,cj+j*w)=1;
% if mse<=min
% min=mse;
% tempi=ci+i*w;
% tempj=cj+j*w;
% end
% end
% end
% end
% ci=tempi;
% cj=tempj;
% w=w/2;
% end
% mi=ci;
% mj=cj;
% 四步法
w=2;
ci=pi;
cj=pj;
while w>=1
tempi=0;
tempj=0;
for i=-1:1
for j=-1:1
if ci+i*w>0 & ci+i*w<=144 & cj+j*w>0 & cj+j*w<=176 & matchok(ci+i*w,cj+j*w)==0
mse=0;
for m=0:blocksize-1
for n=0:blocksize-1
mse=mse+(b(pi+m,pj+n)-a(ci+i*w+m,cj+j*w+n)).^2;
end
end
% for m=0:blocksize/2-1
% for n=0:blocksize/2-1
% mse=mse+(b(pi+2*m,pj+2*n)-a(ci+i*w+2*m,cj+j*w+2*n)).^2; % 隔点匹配
% end
% end
matchok(ci+i*w,cj+j*w)=1;
if mse<=min
min=mse;
tempi=i;
tempj=j;
end
end
end
end
if tempi==0 & tempj==0
w=w/2;
else
ci=ci+tempi*w;
cj=cj+tempj*w;
end
end
mi=ci;
mj=cj;
% % 菱形法 diamond search
% w=2;
% ci=pi;
% cj=pj;
% while w>=1
% tempi=0;
% tempj=0;
% sw=1;
% switch w
% case 2
% for i=-1:1
% for j=-1:1
% if ci+i*2>0 & ci+i*2<=144 & cj+j*2>0 & cj+j*2<=176 & matchok(ci+i*2,cj+j*2)==0 & i*j==0
% mse=0;
% for m=0:blocksize-1
% for n=0:blocksize-1
% mse=mse+(b(pi+m,pj+n)-a(ci+i*2+m,cj+j*2+n)).^2;
% end
% end
% matchok(ci+i*2,cj+j*2)=1;
% if mse<=min
% min=mse;
% tempi=i;
% tempj=j;
% sw=2;
% end
% end
% end
% end
% for i=-1:1
% for j=-1:1
% if ci+i>0 & ci+i<=144 & cj+j>0 & cj+j<=176 & matchok(ci+i,cj+j)==0 & i*j~=0
% mse=0;
% for m=0:blocksize-1
% for n=0:blocksize-1
% mse=mse+(b(pi+m,pj+n)-a(ci+i+m,cj+j+n)).^2;
% end
% end
% matchok(ci+i,cj+j)=1;
% if mse<=min
% min=mse;
% tempi=i;
% tempj=j;
% sw=1;
% end
% end
% end
% end
% case 1
% for i=-1:1
% for j=-1:1
% if ci+i>0 & ci+i<=144 & cj+j>0 & cj+j<=176 & matchok(ci+i,cj+j)==0 & i*j==0
% mse=0;
% for m=0:blocksize-1
% for n=0:blocksize-1
% mse=mse+(b(pi+m,pj+n)-a(ci+i+m,cj+j+n)).^2;
% end
% end
% matchok(ci+i,cj+j)=1;
% if mse<=min
% min=mse;
% tempi=i;
% tempj=j;
% sw=1;
% end
% end
% end
% end
% end
% if tempi==0 & tempj==0
% w=w/2;
% else
% ci=ci+tempi*sw;
% cj=cj+tempj*sw;
% end
% end
% mi=ci;
% mj=cj;
自己编的的关于各种图像运动估计的方法
4星 · 超过85%的资源 需积分: 15 103 浏览量
2010-10-15
11:01:27
上传
评论 2
收藏 8.71MB RAR 举报
litt240
- 粉丝: 0
- 资源: 6
最新资源
- 前端开发-什么是前端开发-关于前端开发的一些相关介绍
- Sora AI-关于文生视频的使用场景说明
- suno AI文生视频的相关教程和介绍使用
- 什么是后端开发-关于后端开发的一些小介绍分享
- Jurassic Pack Vol. II Dinosaurs 侏罗纪包卷恐龙二号Unity游戏模型资源unitypackage
- Jurassic Pack Vol. III Dinosaurs 侏罗纪包卷恐龙三号Unity游戏模型资源unitypackag
- Ultimate Seating Controller 终极座椅控制器Unity游戏开发插件资源unitypackage
- 什么是人工智能-关于人工智能的相关介绍说明
- Figma Converter for Unity适用Unity的Figma转换器Unity游戏开发插件unitypackage
- Creepy Animatronic Anims 令人毛骨悚然的电子动画Unity游戏动画插件资源unitypackage
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈