- 浏览: 356587 次
文章分类
最新评论
-
lord_is_layuping:
...
PYQT4 + Python2.6 + eric4-4.2.2a的安装全过程 -
597272095:
3Q
Oracle客户端PL/SQL 中文乱码解决 -
lpluck08:
如果不是在git本地版本目录中执行的话,会有问题。到本地版本目 ...
git 中文文件名 乱码 mac -
aiove:
-API
分享到: 阿撒旦发撒旦发速度飞洒发
iOS开发开源项目推荐 -
Wallian_hua:
感谢,楼主的详细分析,对我的启发很大。。我也正在研究这方面的技 ...
[ZT]简单OCR实现原理
微处理机中的存放顺序有正序(big endian)和逆序(little endian)之分。正序存放就是高字节存放在前低字节在后,而逆序存放就是低字节在前高字节在后。例如,十六进制数为A02B,正序存放就是A02B,逆序存放就是2BA0。摩托罗拉(Motorola)公司的微处理器使用正序存放,而英特尔(Intel)公司的微处理器使用逆序。JPEG文件中的字节是按照正序排列的。
JPEG委员会在制定JPEG标准时,定义了许多标记(marker)用来区分和识别图像数据及其相关信息,但笔者没有找到JPEG委员会对JPEG文件交换格式的明确定义。直到1998年12月从分析网上具体的JPG图像来看,使用比较广泛的还是JPEG文件交换格式(JPEG File Interchange Format,JFIF)版本号为1.02。这是1992年9月由在C-Cube Microsystems公司工作的Eric Hamilton提出的。此外还有TIFF JPEG等格式,但由于这种格式比较复杂,因此大多数应用程序都支持JFIF文件交换格式。
JPEG文件使用的颜色空间是CCIR 601推荐标准进行的彩色空间(参看第7章)。在这个彩色空间中,每个分量、每个像素的电平规定为255级,用8位代码表示。从RGB转换成YCbCr空间时,使用下面的精确的转换关系:
Y = 256 * E'y
Cb = 256 * [E'Cb] + 128
Cr = 256 * [E'Cr] + 128
其中亮度电平E'y和色差电平E'Cb和E'Cb分别是CCIR 601定义的参数。由于E'y的范围是0~1,E'Cb和E'Cb的范围是-0.5~+0.5,因此Y, Cb和Cr的最大值必须要箝到255。于是RGB和YCbCr之间的转换关系需要按照下面的方法计算。
(1) 从RGB转换成YCbCr
YCbCr(256级)分量可直接从用8位表示的RGB分量计算得到:
Y = 0.299 R + 0.587 G + 0.114 B
Cb = - 0.1687R - 0.3313G + 0.5 B + 128
Cr = 0.5 R - 0.4187G - 0.0813 B + 128
需要注意的是不是所有图像文件格式都按照R0,G0,B0,…… Rn,Gn,Bn的次序存储样本数据,因此在RGB文件转换成JFIF文件时需要首先验证RGB的次序。
(2) 从YCbCr转换成RGB
RGB分量可直接从YCbCr(256级)分量计算得到:
R = Y + 1.402 (Cr-128)
G = Y - 0.34414 (Cb-128) - 0.71414 (Cr-128)
B = Y + 1.772 (Cb-128)
在JFIF文件格式中,图像样本的存放顺序是从左到右和从上到下。这就是说JFIF文件中的第一个图像样本是图像左上角的样本。
JFIF文件格式直接使用JPEG标准为应用程序定义的许多标记,因此 JFIF格式成了事实上JPEG文件交换格式标准。JPEG的每个标记都是由2个字节组成,其前一个字节是固定值0xFF。每个标记之前还可以添加数目不限的0xFF填充字节(fill byte)。下面是其中的8个标记:
- SOI 0xD8 图像开始
- APP0 0xE0 JFIF应用数据块
- APPn 0xE1 - 0xEF 其他的应用数据块(n, 1~15)
- DQT 0xDB 量化表
- SOF0 0xC0 帧开始
- DHT 0xC4 霍夫曼(Huffman)表
- SOS 0xDA 扫描线开始
- EOI 0xD9 图像结束
为使读者对JPEG定义的标记一目了然,现将JPEG的标记码列于表6-05,并保留英文解释。
表6-05 JPEG定义的标记
Symbol (符号) |
Code Assignment (标记代码) |
Description (说明) |
Start Of Frame markers, non-hierarchical Huffman coding |
||
SOF0 |
0xFFC0 |
Baseline DCT |
SOF1 |
0xFFC1 |
Extended sequential DCT |
SOF2 |
0xFFC2 |
Progressive DCT |
SOF3 |
0xFFC3 |
Spatial (sequential) lossless |
Start Of Frame markers, hierarchical Huffman coding |
||
SOF5 |
0xFFC5 |
Differential sequential DCT |
SOF6 |
0xFFC6 |
Differential progressive DCT |
SOF7 |
0xFFC7 |
Differential spatial lossless |
Start Of Frame markers, non-hierarchical arithmetic coding |
||
JPG |
0xFFC8 |
Reserved for JPEG extensions |
SOF9 |
0xFFC9 |
Extended sequential DCT |
SOF10 |
0xFFCA |
Progressive DCT |
SOF11 |
0xFFCB |
Spatial (sequential) Lossless |
Start Of Frame markers, hierarchical arithmetic coding |
||
SOF13 |
0xFFCD |
Differential sequential DCT |
SOF14 |
0xFFCE |
Differential progressive DCT |
SOF15 |
0xFFCF |
Differential spatial Lossless |
Huffman table specification |
||
DHT |
0xFFC4 |
Define Huffman table(s) |
arithmetic coding conditioning specification |
||
DAC |
0xFFCC |
Define arithmetic conditioning table |
Restart interval termination |
||
RSTm |
0xFFD0~0xFFD7 |
Restart with modulo 8 counter m |
Other marker |
||
SOI |
0xFFD8 |
Start of image |
EOI |
0xFFD9 |
End of image |
SOS |
0xFFDA |
Start of scan |
DQT |
0xFFDB |
Define quantization table(s) |
DNL |
0xFFDC |
Define number of lines |
DRI |
0xFFDD |
Define restart interval |
DHP |
0xFFDE |
Define hierarchical progression |
EXP |
0xFFDF |
Expand reference image(s) |
APPn |
0xFFE0~0xFFEF |
Reserved for application use |
JPGn |
0xFFF0~0xFFFD |
Reserved for JPEG extension |
COM |
0xFFFE |
Comment |
Reserved markers |
||
TEM |
0xFF01 |
For temporary use in arithmetic coding |
RES |
0xFF02~0xFFBF |
Reserved |
JPEG文件由下面的8个部分组成:
(1) 图像开始SOI(Start of Image)标记
(2) APP0标记(Marker)
① APP0长度(length)
② 标识符(identifier)
③ 版本号(version)
④ X和Y的密度单位(units=0:无单位;units=1:点数/英寸;units=2:点数/厘米)
⑤ X方向像素密度(X density)
⑥ Y方向像素密度(Y density)
⑦ 缩略图水平像素数目(thumbnail horizontal pixels)
⑧ 缩略图垂直像素数目(thumbnail vertical pixels)
⑨ 缩略图RGB位图(thumbnail RGB bitmap)
(3) APPn标记(Markers),其中n=1~15(任选)
① APPn长度(length)
② 由于详细信息(application specific information)
(4) 一个或者多个量化表DQT(difine quantization table)
① 量化表长度(quantization table length)
② 量化表数目(quantization table number)
③ 量化表(quantization table)
(5) 帧图像开始SOF0(Start of Frame)
① 帧开始长度(start of frame length)
② 精度(precision),每个颜色分量每个像素的位数(bits per pixel per color component)
③ 图像高度(image height)
④ 图像宽度(image width)
⑤ 颜色分量数(number of color components)
⑥ 对每个颜色分量(for each component)
-
- ID
- 垂直方向的样本因子(vertical sample factor)
- 水平方向的样本因子(horizontal sample factor)
- 量化表号(quantization table#)
(6) 一个或者多个霍夫曼表DHT(Difine Huffman Table)
① 霍夫曼表的长度(Huffman table length)
② 类型、AC或者DC(Type, AC or DC)
③ 索引(Index)
④ 位表(bits table)
⑤ 值表(value table)
(7) 扫描开始SOS(Start of Scan)
① 扫描开始长度(start of scan length)
② 颜色分量数(number of color components)
③ 每个颜色分量
-
- ID
- 交流系数表号(AC table #)
- 直流系数表号(DC table #)
④ 压缩图像数据(compressed image data)
(8) 图像结束EOI(End of Image)
表6-06表示了APP0域的详细结构。有兴趣的读者可通过UltraEdit或者PC TOOLS等工具软件打开一个JPG图像文件,对APP0的结构进行分析和验证。
表6-06 JFIF格式中APP0域的详细结构
偏移 |
长度 |
内容 |
块的名称 |
说明 |
0 |
2 byte |
0xFFD8 |
(Start of Image,SOI) |
图像开始 |
2 |
2 byte |
0xFFE0 |
APP0(JFIF application segment) |
JFIF应用数据块 |
4 |
2 bytes |
length of APP0 block |
APP0块的长度 |
|
6 |
5 bytes |
"JFIF"+"0" |
识别APP0标记 |
|
11 |
1 byte |
<Major version> |
主要版本号(如版本1.02中的1) |
|
12 |
1 byte |
<Minor version> |
次要版本号(如版本1.02中的02) |
|
13 |
1 byte |
<Units for the X |
X和Y的密度单位 units=0:无单位 units=1:点数/英寸 units=2:点数/厘米 |
|
14 |
2 bytes |
<Xdensity> |
水平方向像素密度 |
|
16 |
2 bytes |
<Ydensity> |
垂直方向像素密度 |
|
18 |
1 byte |
<Xthumbnail> |
缩略图水平像素数目 |
|
19 |
1 byte |
<Ythumbnail> |
缩略图垂直像素数目 |
|
3n |
< Thumbnail RGB bitmap> |
缩略RGB位图(n为缩略图的像素数) |
||
Optional JFIF extension APP0 marker segment(s) |
任选的JFIF扩展APP0标记段 |
|||
…… |
…… |
|||
2 byte |
0xFFD9 |
(EOI) end-of-file |
图像文件结束标记 |
发表评论
-
最强大脑第六期饶舜涵和倪梓强 他们的大脑是天生的么?
2014-02-15 01:39 2907刚看了 最强大脑第6期, 里面有两个人我比较关注 饶舜 ... -
宏碁 Acer AS4738ZG-P622G32Mncc 驱动
2011-06-13 22:37 1538主板 Intel 主板驱动 9.1.1.102 ... -
git 中文文件名 乱码 mac
2011-06-10 18:32 3598git 默认中文文件名是 xx% 是因为 对0x80以上的字 ... -
必看电影
2010-09-03 11:50 1662moxue32 提名的电影是《 ... -
jQuery.validate使用必备
2010-09-01 19:34 1213jQuery.validate使用必备 ... -
centos 雅黑
2010-04-07 15:39 1621#所有操作均在root权限下进行 1、到xp或者vi ... -
【转】西厢计划原理
2010-03-19 10:28 20558转 http://blog.youxu.info/2010 ... -
CENTOS install mysql
2010-01-21 14:53 2127当前的数据库种类比较多,有MS-SQL,Oracle,MYSQ ... -
不需要让青少年有判断力和批判力
2010-01-21 13:14 1484“不需要让青少年有判断力和批判力。只要给他们汽车、摩托车、美丽 ... -
putty中文乱码问题解决
2010-01-20 21:16 1401用putty从windows xp连接ubuntu serve ... -
vi backspace
2010-01-16 14:07 1031vi ~/.vimrc set backspace=i ... -
如何做SVN迁移
2009-07-31 10:43 1502如何做SVN 迁移 ... -
pdf 免费 转换网站
2009-04-26 13:46 11977在dig网站上看到一个在线转换pdf的网站,现在收集整理如下: ... -
ruby 遍历文件夹 所有文件
2009-04-03 17:00 7420def traverse_dir(file_path) i ... -
ruby watir 整理
2009-03-18 23:54 58085. 异常对象识别(Watir应用解决方案) Watir基于处 ... -
大姐~~~假钞不是这么做的
2009-01-06 22:20 1124大姐~~~假钞不是这么做的 楼主发帖 一妇女拿假钞去买早 ... -
JPEG 原理详细实例分析及其在嵌入式 Linux 中的应用 developerWorks
2008-11-17 01:44 1650JPEG 原理详细实例分析及其在嵌入式 Linux 中 ... -
Bmp 标准
2008-11-13 16:44 2200工具软件:工具软件:H ... -
JPEG文件格式简单分析
2008-10-27 23:19 3082摘要: 这篇文章大体上介绍了 JPEG 文件的结构信息以及它 ...
相关推荐
立体光刻文件格式(ANSI和二进制):STL 初始图形交换规范:IGES1 产品模型数据交换的标准:STEP1 PS Adobe Windows图元文件:EMF,WMF 支持所有流行的光栅图,包括TIFF,BMP,JPG,PSD和GIF ABViewer Enterprise ...
RFC856 Telnet二进制传输 RFC857 Telnet回声选项 RFC858 Telnet抑制前进选项 RFC859 Telnet状态选项 RFC860 Telnet定时标记选项 RFC861 Telnet扩展选项列表选项 RFC862 回声协议 RFC863 废除协议 RFC864 字符产生...
javax.xml.bind.attachment 此包由基于 MIME 的包处理器实现,该处理器能够解释并创建基于 MIME 的包格式的已优化的二进制数据。 javax.xml.bind.helpers 仅由 JAXB 提供者用于: 提供某些 javax.xml.bind 接口的...
RFC856 Telnet二进制传输 RFC857 Telnet回声选项 RFC858 Telnet抑制前进选项 RFC859 Telnet状态选项 RFC860 Telnet定时标记选项 RFC861 Telnet扩展选项列表选项 RFC862 回声协议 RFC863 废除协议 RFC864 字符产生...
RFC856_Telnet二进制传输 RFC857_Telnet回声选项 RFC858_Telnet抑制前进选项 RFC859_Telnet状态选项 RFC860_Telnet定时标记选项 RFC861_Telnet扩展选项列表选项 RFC862_回声协议 RFC863 废除协议 RFC864 字符产生...
H 支持模拟量、数字量、SOE、二进制数据类型的采集 I 提供设备配置参数、通讯数据配置模板,支持通讯状态的在线诊断与在线配置参数; J 软件可提供3000个以上的IO通讯驱动程序,支持与国内外主流的设备的通信与联网...
javax.xml.bind.attachment 此包由基于 MIME 的包处理器实现,该处理器能够解释并创建基于 MIME 的包格式的已优化的二进制数据。 javax.xml.bind.helpers 仅由 JAXB 提供者用于: 提供某些 javax.xml.bind 接口的...
javax.xml.bind.attachment 此包由基于 MIME 的包处理器实现,该处理器能够解释并创建基于 MIME 的包格式的已的二进制数据。 javax.xml.bind.helpers 仅由 JAXB 提供者用于: 提供某些 javax.xml.bind 接口的部分...
javax.xml.bind.attachment 此包由基于 MIME 的包处理器实现,该处理器能够解释并创建基于 MIME 的包格式的已优化的二进制数据。 javax.xml.bind.helpers 仅由 JAXB 提供者用于: 提供某些 javax.xml.bind 接口的...
MIDI(musical instrument digital interface)是数字乐器接口的国际标准,它定义了电子音乐设备与计算机的通讯接口,规定了使用数字编码来描述音乐乐谱的规范。 常见的MIDI设备有电子琴等。计算机中以MID为扩展名的...
javax.xml.bind.attachment 此包由基于 MIME 的包处理器实现,该处理器能够解释并创建基于 MIME 的包格式的已优化的二进制数据。 javax.xml.bind.helpers 仅由 JAXB 提供者用于: 提供某些 javax.xml.bind 接口的...
javax.xml.bind.attachment 此包由基于 MIME 的包处理器实现,该处理器能够解释并创建基于 MIME 的包格式的已优化的二进制数据。 javax.xml.bind.helpers 仅由 JAXB 提供者用于: 提供某些 javax.xml.bind 接口的...
javax.xml.bind.attachment 此包由基于 MIME 的包处理器实现,该处理器能够解释并创建基于 MIME 的包格式的已优化的二进制数据。 javax.xml.bind.helpers 仅由 JAXB 提供者用于: 提供某些 javax.xml.bind 接口的...
javax.xml.bind.attachment 此包由基于 MIME 的包处理器实现,该处理器能够解释并创建基于 MIME 的包格式的已优化的二进制数据。 javax.xml.bind.helpers 仅由 JAXB 提供者用于: 提供某些 javax.xml.bind 接口的...
Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...
Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...
Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...