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

📄 iframecoder.m

📁 用matlab写的仿真H.263标准的程序
💻 M
字号:
function [RFrameY, RFrameU, RFrameV] = IFrameCoder(FrameY, FrameU, FrameV, StructParameter)
%h263编码
%输入 FrameY,FrameU,FrameV:原始图像数据,uint8
%输入 StructParameter: Qp,量化值(uint8),
%                       ImageRow,图像行数(uint32),ImageCol,图像列数(uint32)
%输出 RFrameY,RFrameU,RFrameV,重建帧,uint8                        
% 

msg = nargchk(4,4,nargin);

if ~(isempty(msg)) %检查输入参数是否为4个
    disp(msg)
    return ;
end

Qp = StructParameter.Qp;
ImageRow = StructParameter.ImageRow;
ImageCol = StructParameter.ImageCol;

for i = 1:ImageRow/16
    for j = 1:ImageCol/16
    
    MBlockY = GetMacroBlockFromFrame(FrameY,i,j); %返回16x16 uint8
    BlockU = GetBlockFromFrame(FrameU,i,j);%返回8x8 uint8
    BlockV = GetBlockFromFrame(FrameV,i,j);%返回8x8 uint8
    
    MBCoeffY = MacroDct2(MBlockY);
    BCoeffU = BlockDct2(BlockU);
    BCoeffV = BlockDct2(BlockV);
%     close all;
%     View3D(MBCoeffY);
    MBQCoeffY = MacroQuant(MBCoeffY,Qp);
    BQCoeffU = BlockQuant263(BCoeffU,Qp);
    BQCoeffV = BlockQuant263(BCoeffV,Qp);
%     View3D(MBQCoeffY);
    RMBCoeffY = MacroDeQuant(MBQCoeffY,Qp);
    RBCoeffU = BlockDeQuant263(BQCoeffU,Qp);
    RBCoeffV = BlockDeQuant263(BQCoeffV,Qp);
    
    RMBDataY = MacroIDct2(RMBCoeffY);
    RBDataU = BlockIDct2(RBCoeffU);
    RBDataV = BlockIDct2(RBCoeffV);  

    rindex_mrow = (i - 1) * 16 + 1;
    rindex_mcol = (j - 1) * 16 + 1;
    RFrameY(rindex_mrow:rindex_mrow + 15,rindex_mcol:rindex_mcol + 15) = uint8(RMBDataY);
    rindex_brow = (i - 1) * 8 + 1;
    rindex_bcol = (j - 1) * 8 + 1;    
    RFrameU(rindex_brow:rindex_brow + 7,rindex_bcol:rindex_bcol + 7) = uint8(RBDataU);
    RFrameV(rindex_brow:rindex_brow + 7,rindex_bcol:rindex_bcol + 7) = uint8(RBDataV);
             
    end
end

⌨️ 快捷键说明

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