image and video processing听课笔记(三)

昨天把JPEG压缩过程梳理完毕,今天给出实现前向DCT代码,更详细的过程可以问wiki姐姐

首先把图像分割出不重合的8*8小块,

下面以将64*64图像4*4分块为例(实际运用时,如果图像分辨率不是4的整数倍,可以取模在后面的转换过程忽略余下部分)

B=reshape(cat(3,B{:}),16,[]);%B就是要求的矩阵,16行256列 

%下面是说明
%大概的关系是这样的,设A= 
%A1 A17 … A241 
%A2 A18 … A242 
%∶ ∶ ∶ 
%A16 A19 … A256 
%(这里每个Ai都是4*4的矩阵块) 
%那么B= 
%B1 B2 B3 … B256 
%每个Bi就是对应Ai的16*1列向量 
% 
%即假设Ai= 
%a1 a5 a9 a13 
%a2 a6 a10 a14 
%a3 a7 a11 a15 
%a4 a8 a12 a16 
% 
%那么Bi= 
%a1 
%a2 
%∶ 
%a16

现在对其中一个8*8blockDCT转换

% this is a given 8x8 subimage. 
 SI = [ 52, 55, 61,  66,  70,  61, 64, 73;
        63, 59, 55,  90, 109,  85, 69, 72;
        62, 59, 68, 113, 144, 104, 66, 73;
        63, 58, 71, 122, 154, 106, 70, 69;
        67, 61, 68, 104, 126,  88, 68, 70;
        79, 65, 60,  70,  77,  68, 58, 75;
        85, 71, 64,  59,  55,  61, 65, 83;
        87, 79, 69,  68,  65,  76, 78, 94];
 
 
SI=SI-128;
n=8;
 
TT=zeros(n,n);
for u=0:n-1
    for v=0:n-1
        for x=0:n-1
            for y=0:n-1
                TT(u+1,v+1)=TT(u+1,v+1)+myalpha(u,n)*myalpha(v,n)*SI(x+1,y+1)*mydct(x,y,u,v,n);
            end
        end
    end
end
 
TT=round(TT);
%myalpha
function result = myalpha(u,n)
if u == 0
    result = sqrt(1/n);
else
    result = sqrt(2/n);
end
end
%mydct
function myresult = mydct(x,y,u,v,n)
    myresult = cos(((2*x+1)*u*pi)/(2*n))*cos(((2*y+1)*v*pi)/(2*n));
end

end


计算出来应该和下面的结果一样:



后面量化和编码过程用到量化表和Huffman coding,这里就不再多言啦大笑



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值