gold matlab 编解码_JPEG编码解码(Matlab)

搜索了网上的JPEG的matlab实现方式,发现只有寥寥几个,几乎都是只实现了一半,要么就是哈夫曼编码没有实现,要么就是只算出了哈夫曼的码长计算了一下效率,但是没有实际编码。要么就是太难我看不懂(汗。。。)比如github上几位大神的作品。在此只是简单的按照[1]中的过程实现了一个简单的JPEG,没有任何优化,只求简单。

在此简述一下JPEG编码解码的过程中需要关注的点。

其中仍有许多简化的部分:

(1)只计算了一张灰度图的编码解码,如果要是RGB通道的图需要额外处理RGB到YUV的变化,然后再分别对YUV进行编码,本文所讨论的即主要对其中的Y分量进行了编码。但是这部分的内容网上很容易搜索到。

(2)只对固定的图片进行了操作(512*512),因为没有添加jpeg文件头,所以很多变量都是我直接指定的。可以添加文件头来增加对多种文件格式的JPEG。

(3)存在一个假设,即每一个block在Z字形编排后后边全是0,如果存在一组最后不全是0,最后一位如果是个数的话这个代码可能就不行了,需要特殊处理一下。(这个可能性很小,但是应该依然存在,我猜。。。)

问题1:DCT变换

离散余弦变换的实现有三种方式[1],第一种是用的矩阵的形式,这个在[4]中也采用的这种方式。[3]中详细的介绍了DCT的原理,非常好评!!!

为了方便没有书的同学,在此简述一下方式一:

当进行离散余弦变换时,$ Y = AXA^T $ , 其中A即为下边生成的变换矩阵。X是输入样本矩阵,Y是变换后的系数矩阵。

进行逆变换时:$ X = A^{T}XA $ 。

其中A的公式如下:$ A_{ij} = C_i\cos{\frac{(2j+1)i\pi}{2N}} $

其中:$ C_i = \sqrt{\frac1N} \text{(i=0)}, C_i = \sqrt{\frac2N} \text{(i>0)}$

在matlab中只需要一行代码就可以实现:T = dctmtx(8),当然我们也可以自己创建自己的变换矩阵:

N = 8;

T = zeros(N,N);

fo

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值