JPEG解码详解--实例

根据前面学习到的jpeg解码知识,编写jpeg解码code,此处采用实际的解码过程对jpeg进行讲解

如图1,为实际的jpg图像数据,根据JPEG格式,解析出对应的标识符与对应的数据信息。

FF D8:SOI    文件头

FF E0:APP0 图像信息识别

FF DB:DQT  量化表

FF C0:SOF0 帧开始

FF C4:DHT   Huffman表

FF DA:SOS  扫描行开始

encode数据

FF D9:SOI   文件尾

扫描文件头,得到有效的DQT量化表信息,如图1:

SOF识别图像基本信息,如图2:

 图像分辨率:1920*1080,解码4:1:1图像,y分量是Cb、Cr的4倍;

MCU大小为8*8,4:1:1模式下,1920/(8*2)=120,1080/(2*8)=67.5,此时需要补偿整数个MCU,所以实际宽为68*16=1088,共有120行,68列个MCU。

所以,实际处理的图像大小为1920*1088,120*68个MCU,每个MCU大小是8*8,Y分量按照2*2个MCU解码。

DHT Huffman表信息,并根据 JPEG中Huffman解码实例讲解 ,重建Huffman树,得到Huffman的code与size表, 如图3,00 -> Y-DC,tablenum=0:

图4,10 -> Y-AC,tablenum=1:

图5,01 -> CbCr-DC,tablenum=2:

图6,11 -> CbCr-AC,tablenum=3:

SOS之后,3byte数据省略(用作他途),后续即可读取有效的32bit数据,解码如下:

获取32bit数据:0xe2e8a28a --> 1110 0010 1110 1000 1010 0010 1000 1010

Huffman查表得到DHT码字:0x06,高4bit表示零保留位数,低4bit表示数据位长,即取接下来6bit数据;

取得6bit数据:0010 11 ==>0xb

计算实际的数据值:(0xb+1)-(1<<6) = -52,累计使用的bit数量为10 bit

DC数据经过DPCM编码。即当前DC值减去前一个DC值的结果,MCU首个DC值必为0,所以DC值为得出的数据+DC数据,此时DC量化后的实际值为-52;(AC数据不需要做DPCM编码)

量化:用像素值÷量化表对应值所得的结果

所以,逆量化数据值=DQT*(-52),此时得到-416;

对逆量化数据做反Zig-Zag,得到-416;

 反Zig-Zag表:

0181692310
17243225181145
1219263340484134
27201367142128
3542495657504336
2922152330374451
5859524538313946
53606154475562

原图像是分割为8*8的MCU块单独编码,所以解码也是按照一个MCU来解码。

当一个MCU解码时:

1. DC分量遇到数据位长为0时,数据也为0;

2. AC分量遇到EOB结束符号时,结束该MCU解码:零保留个数为0,数据位长也为0时;

3. AC分量遇到ZRL码时,是为15个零数据:零保留个数为0xF,数据位长为0时;

最终解码出来的MCU的DCT数据为:

将DCT数据做反DCT变化,得到实际的YUV像素数据:

将YUV数据转换为RGB格式,保存为可视bmp格式。

 R = (u8_t)(Y+ 1.4075*(Cr - 128));  
 G = (u8_t)(Y-0.7169*(Cr - 128)-0.3455*(Cb - 128));  
 B = (u8_t)(Y+1.779*(Cb- 128)); 

 

  • 4
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: FODICOM是一个医学图像格式,它使用JPEG-LS作为其图像编码和解码的标准。JPEG-LS是一种专为无损和有损压缩的图像编码算法。要解码FODICOM JPEG-LS图像,需要执行以下步骤。 首先,从FODICOM文件中获取JPEG-LS编码的图像数据。这些数据以二进制的方式存储在文件中。 接下来,根据JPEG-LS算法中的压缩步骤,对图像数据进行解压缩。这包括反量化、反预测和反差分编码等过程。通过这些步骤,可以还原出原始的灰度或彩色图像数据。 然后,将解压缩后的图像数据转换为适当的像素格式。例如,如果图像是灰度的,则将数据转换为8位灰度像素;如果图像是彩色的,则将数据转换为RGB像素。 最后,将像素数据渲染成可视化的图像。可以使用计算机图形库或处理图像的软件工具来实现渲染过程。渲染后的图像可以在计算机屏幕上显示或保存为其他格式,如BMP、PNG或JPEG。 总而言之,FODICOM JPEG-LS解码涉及从FODICOM文件中获取图像数据,解压缩数据,转换为适当的像素格式,并最终渲染可视化图像。以上所述的步骤可以使用编程语言或图像处理软件来实现。 ### 回答2: fodicom是医学图像处理方面的开源库,而jpeg-ls是一种用于有损压缩的图像编码和解码算法。下面我来介绍一下fodicom的jpeg-ls解码过程。 首先,fodicom库会读取存储在DICOM格式中的jpeg-ls压缩图像数据。DICOM是医学图像存储和传输的标准格式,而jpeg-ls则是其中一种常用的压缩算法。 解码的第一步是扫描jpeg-ls编码图像数据,然后解析压缩图像的各个参数。这些参数包括图像的宽度、高度、颜色通道数等信息。 接下来,fodicom会根据jpeg-ls的编码方式来解码图像数据。jpeg-ls算法的核心是基于预测的无损压缩技术,它使用差值来表示图像中的像素值,从而减少数据存储和传输的大小。解码过程中,fodicom会根据预测模型对差值进行计算和还原,最终得到原始的像素值。 解码完成后,fodicom会将解码后的图像数据存储在内存中,以便后续的图像处理和分析。用户可以通过调用fodicom提供的接口,对解码后的图像数据进行进一步的操作,例如显示、保存或者进行图像特征提取等。 总结来说,fodicom的jpeg-ls解码是一个将DICOM格式中存储的jpeg-ls压缩图像数据进行解析并恢复原始像素值的过程。这个过程涉及到图像参数解析、差值计算和图像数据还原等步骤,最终得到的是可以在计算机上进行进一步分析和处理的原始图像数据。 ### 回答3: Fodicom是一种用于医学图像传输和存储的传输协议,而JPEG-LS是一种无损压缩算法。当我们需要解码Fodicom中的JPEG-LS图像时,我们需要以下步骤: 1. 解析Fodicom文件:首先,我们需要解析Fodicom文件,提取出图像数据所在的位置和压缩参数等信息。这些信息通常在文件的头部或标签中存储。 2. 解压缩JPEG-LS数据:将提取出的JPEG-LS数据进行解压缩。JPEG-LS是一种无损压缩算法,可以还原原始图像数据。解压缩算法通常使用查找表和预测算法来还原图像数据。 3. 还原图像:解压缩后的数据是原始图像的像素值,但还不是可视化的图像。我们需要将这些像素值转换为图像的RGB(红绿蓝)通道,以便可以正确显示图像。 4. 显示图像:将还原的图像数据显示在屏幕上或保存为文件。这可以通过使用图像处理库或编写自定义代码实现。 需要注意的是,Fodicom中可能包含其他的图像编码格式,例如JPEGJPEG2000等。因此在解码Fodicom图像时,我们需要根据文件的标识信息判断图像的编码格式,并根据对应的解码算法进行处理。 总结起来,Fodicom JPEG-LS解码的过程包括解析Fodicom文件、解压缩JPEG-LS数据、还原图像和显示图像。这些步骤可以通过使用相应的库或编写自定义代码来实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值