⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ebma_vectorcode.m

📁 该函数的功能:进行运动矢量的矢量量化编码
💻 M
字号:
%子函数的功能:进行运动矢量的矢量量化编码,返回的是解码后的运动场
function vecode_m_field=ebma_vectorcode(motionfield)
%图像块的xy运动分量
x1=motionfield(:,:,1);
x2=motionfield(:,:,2);
[wdnum hgnum]=size(x1);
N=128;%码书大小
%码书
for i=1:wdnum
    for j=1:hgnum
        if (j-1)*wdnum+i<=N
            codebox((j-1)*wdnum+i,1:2)=double(motionfield(i,j,1:2));
        end
    end
end
%每个块属于哪个码字
codenum=zeros(wdnum,hgnum);
%属于每个码字的块的数目
total=zeros(N,1);
%修改码字的累计值
total_pel=zeros(N,2);
%编码程序,得到最终的码书
T=0;
pre=0;
past=0;
while (T==0&pre==0&past==0)|(T>0&abs(past-pre)>pre*0.01)
T=T+1;
pre=past;
past=0;
for i=1:wdnum 
    for j=1:hgnum
        element1=double(x1(i,j));
        element2=double(x2(i,j));
        result=Inf;
        for m=1:N
            codemember1=codebox(m,1);
            codemember2=codebox(m,2);
            if result>sqrt((element1-codemember1)^2+(element2-codemember2)^2)
                result=sqrt((element1-codemember1)^2+(element2-codemember2)^2);
                codenum(i,j)=m;
            end
        end
        past=past+result;
    end
end
for i=1:wdnum 
    for j=1:hgnum
        element1=double(x1(i,j));
        element2=double(x2(i,j));
        num=codenum(i,j);
        total(num,1)=total(num,1)+1;
        total_pel(num,1)=total_pel(num,1)+element1;
        total_pel(num,2)=total_pel(num,2)+element2;
    end
end
for i=1:N
    if total(i,1)~=0
        codebox(i,1:2)=total_pel(i,1:2)/total(i,1);
    end
end
end
%解码过程
%运动场解码后的数据decode(1:wdnum,1:hgnum,1:2)
for i=1:wdnum
    for j=1:hgnum
        num=codenum(i,j);
        decode(i,j,1:2)=codebox(num,1:2);
    end
end
decode=uint8(decode);
decode=double(decode);
vecode_m_field=decode;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -