数字图像处理(1):JPEG分析 实践(C语言)

编程入门 行业动态 更新时间:2024-10-09 20:28:20

数字<a href=https://www.elefans.com/category/jswz/34/1769353.html style=图像处理(1):JPEG分析 实践(C语言)"/>

数字图像处理(1):JPEG分析 实践(C语言)

文章目录

  • 1. JPEG格式
  • 2. JPEG原理&压缩流程
    • 2.1 步骤一:图像分割
    • 2.2 步骤二:颜色空间转换RGB->YCbCr
    • 2.3 步骤三:离散余弦变换
    • 2.4 步骤四:数据量化
    • 2.5 步骤五:哈弗曼编码
  • 3. 下载实现代码并调通运行
    • 3.1 测试平台
    • 3.2 测试图片
    • 3.3 压缩后输出图片
  • 4. 压缩率
  • 附:代码


生命短暂而信息无穷……缩写是无法避免的灾难,而缩写创造者的任务就是要尽力做好工作。尽管缩写有害,但总比什么都不做强。 ——阿道斯· 赫胥黎

1. JPEG格式

JPEG是Joint Photographic Experts Group(联合图像专家组)的缩写,文件后辍名为".jpg"或".jpeg",是最常用的图像文件格式,由一个软件开发联合会组织制定,是一种有损压缩格式,能够将图像压缩在很小的储存空间,图像中重复或不重要的资料会被丢失,因此容易造成图像数据的损伤。尤其是使用过高的压缩比例,将使最终解压缩后恢复的图像质量明显降低,如果追求高品质图像,不宜采用过高压缩比例。

但是JPEG压缩技术十分先进,它用有损压缩方式去除冗余的图像数据,在获得极高的压缩率的同时能展现十分丰富生动的图像,换句话说,就是可以用最少的磁盘空间得到较好的图像品质。而且 JPEG是一种很灵活的格式,具有调节图像质量的功能,允许用不同的压缩比例对文件进行压缩,支持多种压缩级别,压缩比率通常在10:1到40:1之间,压缩比越大,品质就越低;相反地,压缩比越小,品质就越好。


2. JPEG原理&压缩流程

原理可简单理解为:把数据分为“重要部分”和“不重要部分”,滤掉不重要的部分。

2.1 步骤一:图像分割

JPEG算法的第一步,图像被分割成大小为8X8的小块,这些小块在整个压缩过程中都是单独被处理的。

2.2 步骤二:颜色空间转换RGB->YCbCr

Y表示亮度(Luminance),Cb和Cr分别表示绿色和红色的“色差值”。 有损压缩首先要做的事情就是“把重要的信息和不重要的信息分开”,YCbCr恰好能做到这一点。对于人眼来说,图像中明暗的变化更容易被感知到,这是由于人眼的构造引起的。

2.3 步骤三:离散余弦变换

数据经过DCT变化后,被明显分成了直流分量和交流分量两部分,为后面的进一步压缩起到了充分的铺垫作用,可以说是整个JPEG中最重要的一步。

2.4 步骤四:数据量化

JPEG提供的量子化算法如下:

量化后的二维矩阵转变成一个一维数组。

2.5 步骤五:哈弗曼编码

根据数据中元素的使用频率,调整元素的编码长度,以得到更高的压缩比。


3. 下载实现代码并调通运行

3.1 测试平台


平台:VS2015 语言:C++

3.2 测试图片


图片信息:
weiminglake.bmp
34.8 MB
(36,578,360 字节)
分辨率:4032*3024
位深度:24

3.3 压缩后输出图片


图片信息:
out.jpg
1.48 MB
(1,558,067 字节)
分辨率:4032*3024
位深度:24

4. 压缩率

1,558,067 / 36,578,360 * 100% = 4.26%

附:代码

mian.c

#include <stdio.h>
#include "jpeg_encoder.h"int main(int argc, char* argv[])
{const char* inputFileName = "weiminglake.bmp";JpegEncoder encoder;if(!encoder.readFromBMP(inputFileName))return 1;if(!encoder.encodeToJPG("out.jpg", 50))return 1;return 0;
}

代码来源:/?p=69


本工程源码已更新至github,欢迎star,欢迎PR:)

更多推荐

数字图像处理(1):JPEG分析 实践(C语言)

本文发布于:2024-02-07 09:57:05,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1755396.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:图像处理   语言   数字   JPEG

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!