• 大小: 51KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-12
  • 语言: Matlab
  • 标签: EBMA  

资源简介

经典的运动块估计算法EBMA,能够有效地估计目标块的运动,可用于目标跟踪。

资源截图

代码片段和文件信息

clear all
x = imread(‘1.bmp‘);
pre = rgb2gray(x);
sizepre = size(pre);
sizex = sizepre(2);
sizey = sizepre(1);
y = imread(‘2.bmp‘);
next = rgb2gray(y);
N = 16;%图像划分为16*16的小块
R = 16; %搜索区域

% 获得图像的运动矢量
xnum = sizex/N; % 横向含有块的个数
ynum = sizey/N; % 纵向含有块的个数

motionfield = zeros(ynumxnum2);%初始化运动场矩阵

%对每一个块进行全局搜索,找出最佳匹配的块,从而确定每个块的运动矢量
for i = 1:ynum
    for j = 1:xnum
        ty = (i-1)*N+1;% 对应块块的顶点坐标
        tx = (j-1)*N+1;
        x1(1:N1:N) = pre(ty:ty+N-1tx:tx+N-1); % 取出某一个匹配块进行操作
        fty = (i-1)*N+1-R;%搜索区域的左上角和右下角坐标
        ftx = (j-1)*N+1-R;
        fdy = (i-1)*N+N+R;
        fdx = (j-1)*N+N+R;
        result=Inf;      %匹配块的最小DFD
        vx = 0;
        vy = 0;
        for m = fty:fdy-N+1  % 块可以移动的搜索范围
            for n = ftx:fdx-N+1
                if m>=1 & n>=1 & m+N-1<=sizey & n+N-1<=sizex
                    test(1:N1:N) = next(m:m+N-1n:n+N-1);
                    %计算DFD
                    sum = 0;
                    for i1=1:N
                        for i2=1:N
                            sum = sum+(double(test(i1i2))-double(x1(i1i2)))^2;
                        end
                    end
                    sum = sqrt(sum)/N;
                    %寻找最小的误差,可以得到运动矢量
                    if sum                         result=sum;
                         vy = m - ty;
                         vx = n - tx ;
                    end
                end
            end
        end
        motionfield(ij1) = vx;
        motionfield(ij2) = vy;
    end
end

% *****************矢量量化编码***********************
%  得到了运动矢量场后,将运动矢量抽象为训练样本
TrainMatrix = zeros(ynum*xnum2);
for i=1:1:ynum
    for j=1:1:xnum
        num = (i-1)*ynum+j;
        TrainMatrix(num1) = motionfield(ij1);
        TrainMatrix(num2) = motionfield(ij2);
    end
end

%生成初始码字
L = 17;
codeMatrix = zeros(L2);

for i=1:L
    codeMatrix(i:) = i-9;
end

%  已经得到了运动矢量了,现在进行对下一帧的预测了
est = zeros(sizeysizex); % 初始化第二幅图像
for i=1:ynum
    for j=1:xnum
        vx = motionfield(ij1);
        vy = motionfield(ij2);
        ty = (i-1)*N+1; % 要恢复的图像的块的顶点坐标
        tx = (j-1)*N+1;
        nx = tx + vx;
        ny = ty + vy;
        x1(1:N1:N) = next(ny:ny+N-1nx:nx+N-1); % 依次取出某一个匹配块进行操作
        est(ty:ty+N-1tx:tx+N-1) =  x1(1:N1:N);
    end
end


sum=0;
for i=1:sizey
    for j=1:sizex
        sum=sum+(double(pre(ij))-double(est(ij)))^2/(sizex*sizey);
    end
end
PSNR=10*log10(255*255/sum);

imshow(uint8(est));

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     239670  2010-05-31 15:24  EBMA\1.bmp

     文件     239670  2010-05-31 15:24  EBMA\2.bmp

     文件       2778  2010-05-31 15:25  EBMA\EBMA.m

     目录          0  2010-06-03 09:24  EBMA

----------- ---------  ---------- -----  ----

               482118                    4


评论

共有 条评论