灰度图像的ASCII图像生成
课程设计实验报告设计题目:灰度图像的ASCII图像生成学院:电子工程学院专业:电子信息工程班级:学号:姓名:电子邮件:日期: 2013 年 9 月成绩:指导教师:电子工程学院课程设计任务书学生姓名指导教师邓成学生学号专业电子工程学院题目灰度图像的ASCII图像生成一.设计概述1.课程设计题目:灰度图像的ASCII图像生成2.相关知识:灰度图像:一幅完整的图像,是由红色绿色蓝色三个通道组成的。
红色、绿色、蓝色三个通道的缩览图都是以灰度显示的。
用不同的灰度色阶来表示“红,绿,兰”在图像中的比重。
通道中的纯白,代表了该色光在此处为最高亮度,亮度级别是255。
通道是整个Photoshop显示图像的基础。
色彩的变动,实际上就是间接在对通道灰度图进行调整。
通道是Photoshop处理图像的核心部分,所有的色彩调整工具都是围绕在这个核心周围使用的在计算机领域中,灰度数字图像是每个像素只有一个采样颜色的图像。
这类图像通常显示为从最暗黑色到最亮的白色的灰度,尽管理论上这个采样可以任何颜色的不同深浅,甚至可以是不同亮度上的不同颜色。
灰度图像与黑白图像不同,在计算机图像领域中黑白图像只有黑色与白色两种颜色;灰度图像在黑色与白色之间还有许多级的颜色深度。
但是,在数字图像领域之外,“黑白图像”也表示“灰度图像”,例如灰度的照片通常叫做“黑白照片”。
在一些关于数字图像的文章中单色图像等同于灰度图像,在另外一些文章中又等同于黑白图像ASCII 字符图”这一术语指的是图像的文本表示形式,即使用等宽字体字符(如Courier New 字符)的网格来绘制图像3设计思路:将图像内容用ASCII码显示出来主要就是用不同的字符表示灰度,以此来区分不同的灰度值达到将内容可视化的目的,这个道理很简单,实现起来其实也不难,如果是直接输入到控制台或者txt文件的则比较简单,主要是需要设置一下字体的宽高,最好是正方形的,否则看起来会比较别扭。
下面一个是将lena缩放到100*100之后在控制台窗口直接显示的截图,采用的字符是标点,字体设置的宽高相等为8*8:二:相关程序用OpenCV来将字符写到图像上,使用putText函数,不过OpenCV中的字体好像不能设置为等宽高,没办法,就取了折中的方法,将用来代替灰度的所有字符的宽度和高度取了个平均作为字符宽高,这样就将原图像中的一个像素替换为这样一个字符,而且还设置了几个选项:可以选择标点,字母或者数字来代替灰度,并且可以选择输出二值,灰度或者彩色ascii图像-----文中只使用了8个灰度级,即将整幅图像量化为了8个灰度级,这样的缺点就是对灰度分布比较集中的图像失真比较大,可以先对图像进行灰度均衡化处理之后再转换,这里没有考虑这些,下面是主要的函数代码。
[cpp] view plaincopyprint?charascii_code_symbol[CODE_SIZE-7] = {'#','&','$','*','+',';','.',' ',0};char ascii_code_letter[CODE_SIZE-7] = {'m','n','e','f','t','l','i',' ',0};char ascii_code_number[CODE_SIZE-7] = {'8','9','5','3','2','7','1',' ',0};char *ascii_code_8[3] = { ascii_code_symbol, ascii_code_letter, ascii_code_number}; //check the input image size and return a defined size,// that's the max one of width and height is not bigger than 100;cv::Size get_board_size(Mat &image){if(image.empty())return Size(0,0);int f = 0;float big=(float)image.rows, smal=(float)image.cols;if(image.cols>image.rows){f = 1;big = float(image.cols);smal = float(image.rows);}cv::Size board_size;if(big <= 100.f){board_size = cv::Size(image.cols, image.rows);}else{board_size = cv::Size(int(f==1?100:(100*image.cols/big)), int(f==1?(100*image.rows/big):100));}returnboard_size;}//get the char code stepintget_char_size(const string &asciiStr){//init fontintfontFace = FONT_HERSHEY_PLAIN;doublefontScale = 0.5;int thickness = 1;//max_size is the max of all the char code width and height,//or return the average size of all the char code width and height;intmax_size = 0;inttotal_size = 0;for (size_ti=0; i<asciiStr.size(); ++i){int baseline = 0;stringstr(1, asciiStr[i]);cv::Sizetextsize = getTextSize(str, fontFace, fontScale, thickness, &baseline);if(max_size<textsize.height+baseline)max_size = textsize.height+baseline;if(max_size<textsize.width)max_size = textsize.width;total_size += (textsize.height+textsize.width+baseline);}returntotal_size/(asciiStr.size()*2);// returnmax_size;}/*convert image to ascii image;code_type: 0-symbol,1-letter,2-numbercolor_type: 0-binary,1-gray,2-color*/Mat image_to_ascii(Mat &image, intcode_type, intcolor_type){//check input imageif(image.empty() || code_type<0 || code_type>2 || code_type<0)return Mat();//if input is a gray image, set color_type to gray;if(image.channels()==1&&code_type==2)color_type = 1;//create the output imageintchar_size = get_char_size(ascii_code_8[code_type]);cv::Size board_size = get_board_size(image);Mat out_image(char_size*board_size.height, char_size*board_size.width, CV_8UC3,Scalar::all(0));//resize the input image to defined size;Mat resized_image;resize(image, resized_image, board_size);Mat gray_image;if(resized_image.channels() == 3)cvtColor(resized_image, gray_image, COLOR_BGR2GRAY);elsegray_image = resized_image;//font initintfontFace = FONT_HERSHEY_PLAIN;doublefontScale = 0.5;int thickness = 1;//print char code to the output imagefor (inti=0; i<resized_image.rows; ++i){uchar *ptr_bgr = resized_image.ptr<uchar>(i);uchar *ptr_gray = gray_image.ptr<uchar>(i);for (int j=0; j<resized_image.cols; ++j){//get pixelucharpix_gray = ptr_gray[j];//prepare the char code and coordinate;cv::PointtextOrg(j*char_size, (i+1)*char_size);string text(1, ascii_code_8[code_type][8-(pix_gray>>5)]);//colored or notif (color_type==0){putText(out_image, text, textOrg, fontFace, fontScale, Scalar::all(255));}else if(color_type==1){putText(out_image, text, textOrg, fontFace, fontScale, Scalar::all(pix_gray));}else{putText(out_image, text, textOrg, fontFace, fontScale, Scalar(ptr_bgr[3*j],ptr_bgr[3*j+1],ptr_bgr[3*j+2]));}}}returnout_image;}三:具体实例下面是采用数字的ascii字符的彩色和灰度以及二值lena图像,【对lena图像来说数字的看起来比较好,其他两种效果不如数字的】123人眼可以分辨图像的灰度,ASCII码字符也是有灰度的,比如说下面这片由W 与.组成图案中就可以看到一个“王”字:将截取的图像转换为灰度,并分割为多个小块图像,求出这些小块图像的灰度值,并找到与之灰度值对应的ASCII字符,使用该字符替换这小块图像。
ENVI Sarscape入门教程V1.1
TIFF文件格式中文解说
.
文件结束
以上例子中的software,datatime为可选标签,同时各个Strip可以不安顺序在文件中存储,每个Strip的偏移量必须在文件中指定,而不能缺省认为一个Strip的结尾是下一个Strip的开始,或者Strip是按顺序在文件中存储的
注:以上的例子中没有列出ResolutionUnit,可能是Adobe文档中的错误
Compression=1 or 32773
FieldName TagID DataType Value Description
BitPerSample 258 SHORT 4/8 the number of bits per component 16 or 256 distinct shades of gray
TIFF中的标签种类有很多,按大类可以 BASELINE TIFF 标签 和 TIFF EXTENSIONS标签
在以前版本的TIFF文当中将TIFF文件分为
BASELINE TIFF:
在以前版本中,BASELINE TIFF 分为三种格式:
(BiLevel Images)tiff class b image,(GrayScale Images)tiff class G image,(Palette-Color Images)class P image,(rgb image)tiff class r images
XResolution 282 11a rational
YResolution 283 11b rational
ResolutionUnit 296 128 short
GrayScale Image:
灰度图像是黑白图像的一般化,灰度图像需要的标签基本同上,但是用户需要修改或者添加以下标签
灰度图像处理
•
•
• 对于数字图像,可以对上述公式做离散近似。若原图像f(x,y)在像素点(x,y)处的灰度为rk,则直方 图均化后的图像g(x,y)在点(x,y)处的灰度sk为
图像去噪
去噪的方法很多,常用的有:平滑滤波和中值滤波 1、平滑滤波 在假定加性噪声是随机独立分布的条件下,利用领域的平均或加权平 均可以有效抑制噪声干扰。图像平滑实际是低通滤波,让信号的低频部分 通过,阻截属于高频部分的噪声信号,显然,在减少随机噪声点影响的同时, 由于图像边缘部分也处在高频部分,平滑过程会导致边缘模糊化 平滑模板的思想是:通过待处理点和周围8个相邻点的平均来去除突然 变换的点,从而滤掉一定的噪声,其代价是图像有一定程度的模糊
图像锐化
1、一阶微分算子算法 图像处理种常用的微分方法就是求梯度。对于一个连续函数f(x,y),它在点(x,y)处的梯度是一个矢量,定义为
点(x,y)梯度的幅度即为梯度矢量的模:
(1)
对于数字图像f(x,y),由于数字图像的离散性,采用差分运算来近似替代微分运算,在其像素点(i,j)处,x方向和y方向上 的一阶差分定义为
增强后图像在(i,j)处的灰度值为
Sobel算子在计算x方向和y方向上的梯度时,不像普通梯度算子那样只用两 个像素灰度差值来表示,而是采用两列或两行像素灰度加权和的差值来表 示,这使得Sobel算子具有如下优点: (1)引入了加权平均,将距离远近产生的影响考虑进去,对图像中的随机噪声 具有一定的平滑作用 (2)由于Sobel算子采用间隔两行或者两列的差分,所以图像中边缘两侧的像 素得到增强。Sobel算子得到的锐化图像的边缘显得粗而亮
图像锐化
3、拉普拉斯算子算法 拉普拉斯算子是一种十分常用的图像边缘增 强处理算子。拉普拉斯算子是线性二次微分算子, 具有各向同性和位移不变性,从而满足不同走向 的图像边缘的锐化要求。 对于连续图像f(x,y),它的拉普拉斯算子为 当图像模糊是由于扩散现象引起时,拉斯运算 结果的k倍,即 。f为模糊图像,g为锐化 以后的图像,k是与扩散效应有关的系数。
第十四部分:灰度标准显示函数
医学数字影像和通讯(DICOM)第十四部分:灰度标准显示函数由国际电气制造业协会出版1300 N. 17th StreetRosslyn,Virginia 22209 USA版权所有(C)国际电气制造业协会2003。
包括译成其他语言的版权所有,受世界版权公约、伯尔尼公约或文学艺术著作保护公约、以及国际和泛美版权公约保护。
-标准-通知及免责声明该出版物技术方面的信息得到了参加该开发成员的一致同意目录通知及免责声明 (2)目录 (3)前言 (5)1.应用的领域和范围 (6)2.标准参考 (6)3.定义 (8)4.符号和缩略语 (8)5.惯例 (8)6.概述 (8)7.灰度标准显示函数 (11)7.1一般规则 (12)7.2传输式硬拷贝打印机 (13)7.3放射式硬拷贝打印机..................................................................... 错误!未定义书签。
8.参考.................. ..................................................................................... 错误!未定义书签。
附录A(提供资料)灰度标准显示函数的出处 (16)A.1.选择灰度标准显示函数的原因................................................ 错误!未定义书签。
A.2.BARTEN模型的详细资料 ....................................................... 错误!未定义书签。
A.3.参考............................................................................................... 错误!未定义书签。
遥感图像处理系统ENVI功能简介
遥感图像处理系统ENVIENVI(The Enviroment for Visualizing Images)是美国著名的遥感科学家用交互式数据语言IDL(Interactive Data Language)开发的一套功能强大的遥感图像处理软件,能够有效地从遥感影像中提取各种目标信息,可用于地物监测和目标识别;IDL也使得ENVI具有其它同类软件无可比拟的可扩展性,全模块化的设计使得软件易于使用,操作方便灵活,界面友好,广泛地应用于地质、环境、林业、农业、军事、自然资源勘探、海洋资源管理等多个领域,并在2000、2001、2002年连续三年获得美国权威机构NIMA遥感软件测评第一。
1、ENVI功能体系ENVI包含齐全的遥感影像处理功能,包括数据输入/输出、常规处理、几何校正、大气校正及定标、全色数据分析、多光谱分析、高光谱分析、雷达分析、地形地貌分析、矢量分析、神经网络分析、区域分析、GPS联接、正射影像图生成、三维景观生成、制图等;这些功能连同丰富的可供二次开发调用的函数库,组成了非常全面的图像处理系统。
1.1数据输入/输出1972年美国发射了第一颗地球资源技术卫星ERTS-1。
从那时起,一些国家和国际组织相继发射各种资源卫星、气象卫星、海洋卫星以及监测环境灾害的卫星,包括我国发射的风云系列卫星和中巴地球资源一号卫星(CBERS-1),构成了对地观测网,多平台、多层面、多种传感器、多时相、多光谱、多角度和多种空间分辨率的遥感影像数据,以惊人的数量快速涌来。
把同一地区各类影像的有用信息聚合在一起,将有利于增强多种数据分析和环境动态监测能力,改善遥感信息提取的及时性和可靠性,有效地提高数据的使用率,为大规模的遥感应用研究提供一个良好的基础,使花费大量经费获得的遥感数据得到充分利用。
(1) ENVI能够输入的数据ENVI能处理多种卫星获取的不同传感器、不同波段和不同空间分辨率的数据,包括美国Landsat系列卫星、小卫星IKONOS和环境遥感卫星TERRA,法国SPOT卫星,我国的风云系列卫星和CBERS-1获取的数据,ENVI还准备处理未来更多传感器收集到的数据。
多媒体期末考试试题
(第一章)一.单项选择题1.下列选项中,不属于感觉媒体的是(D)A 图像B香味C鸟声D字符 ASCII 码2.下列选项中,属于表示媒体的是(B)A 照片B条形码C纸张D显示器3.下列选项中,属于显示媒体的是(B)A 图片B扬声器C声音D语言编码4.下列选项中,属于存储媒体的是(A)A 磁带B照片C显示器D打印机5.下列选项中,属于传输媒体的是(C)A 光盘B照片C光缆D键盘6.能直接作用于人们的感觉器官,从而能使人产生直接感觉的媒体是(A)A 感觉媒体 B表示媒体 C 显示媒体D传输媒体7.为了传送感觉媒体而人为研究出来的媒体称为(B)A 感觉媒体 B表示媒体 C 显示媒体D传输媒体8.语言编码,电报码,条形码和乐谱属于(B)A 感觉媒体 B表示媒体 C 显示媒体D传输媒体9.下列选项中,属于数字信号的是(D)A 胶卷上记录的照片B电话线中传输的信号C录音磁带上记录的信号 D 计算机中的图片文件10. 关于下列媒体数据量的说法中,错误的是(B)A 像素分辨率相同的RGB真彩色图像的数据量是8位灰度图像的 3 倍B PAL 制式电视每秒钟输出的图像数据量相当于25 幅等大的静态图片数据量C 一幅 256*256像素的8 位灰度图像的图像数据量为64KBD 一幅 256*256像素的24 位 RGB真彩色图像的文件大小()填空题:1.直接作用于人们的感觉器官,使人能直接产生感觉的自然种类信息叫做(感觉媒体)2. 多媒体研究的核心技术中,位居首位的技术是多媒体数据(压缩编解码技术)。
视频数据压缩的基本思路有二,其一是(帧内压缩),其二是(帧间压缩),前者的策略是对相同的信息块只(传送一份),这样就减少了许多冗余信息,后者的策略是对变化的部分传送一个(前一帧信息再传送一个运动矢量信息)。
3.一幅像素分辨率512*256 的静态 RGB真彩色图像的数据量为(384) KB,相当于( 0.375 ) MB简答题:1.什么是多媒体技术?它有哪些主要特性?(答:从技术的角度讲,多媒体是计算机综合处理文本、图形、图像、音频、视频、动画等多种媒体信息,使多种媒体信息建立逻辑连接,即成为一个系统并具有交互性和实时性的一种新技术。
彩色图像与灰度图像之间的转换
彩⾊图像与灰度图像之间的转换⼀.彩⾊图像简介在RGB⾊彩空间,图像深度与⾊彩的映射关系主要有真彩⾊、伪彩⾊和调配⾊。
真彩⾊是指在组成⼀幅彩⾊图像的每个像素值中,有R,G,B三个基⾊分量,每个基⾊分量直接决定显⽰设备的基⾊强度,这样产⽣的彩⾊称为真彩⾊,是真实的原图彩⾊。
伪彩⾊图像的每个像素值实际上是⼀个索引值或代码,该代码值作为⾊彩查找表CLUT中某⼀项的⼊⼝地址,根据该地址可查找出包含实际R,G,B的强度值。
这种⽤查找映射的⽅法产⽣的⾊彩称为伪彩⾊。
⾊彩查找表CLUT是⼀个事先做好的表,表项⼊⼝地址也称为索引号。
彩⾊图像本⾝的像素数值和⾊彩查找表的索引号有⼀种变换关系,这种关系可以是系统定义的,也可以是⽤户⾃⼰定义的变换关系。
使⽤查找得到的数值显⽰的彩⾊是真的,可⼜不是图像本⾝的颜⾊,因为其没有完全反映原图的彩⾊,所以称其为伪彩⾊。
调配⾊的获取是通过每个像素点的R,G,B分量分别作为单独的索引值进⾏变换,经相应的⾊彩查找表找出各⾃的基⾊强度,⽤变换后的R,G,B强度值产⽣⾊彩。
⼆.灰度图像简介灰度是描述灰度图像内容的最直接的视觉特征。
它指⿊⽩图像中点的颜⾊深度,范围⼀般从0到255,⽩⾊为255,⿊⾊为0,故⿊⽩图像也称灰度图像。
灰度图像矩阵元素的取值通常为[0,255],因此其数据类型⼀般为8位⽆符号整数,这就是⼈们通常所说的256级灰度。
三.彩⾊图像转化为灰度图像彩⾊图像转换为灰度图像时,需要计算图像中每个像素有效的亮度值,其计算公式为:Y = 0.3R + 0.59G + 0.11B代码如下:clear all;close all;I = imread('lenna.png');[M N H] = size(I);I2 = zeros(M, N);for x = 1 : Mfor y = 1 : NA = double([I(x, y, 1) I(x, y, 2) I(x, y, 3)]);B = [0.3; 0.59; 0.11];[gray] = A * B; % 计算灰度值I2(x, y) = gray;endendimshow(uint8(I2));四.灰度图像转换为彩⾊图像将灰度图像转换为彩⾊图像,称为灰度图像的伪彩⾊处理。
图像文件格式
目录i.PNGii.BMPiii.JPEGiv.GIFPNG便携式网络图形(Portable Network Graphics,PNG)是一种无损压缩的位图图形格式,支持索引、灰度、RGB[A]三种颜色方案以及Alpha通道等特性。
PNG的开发目标是改善并取代GIF 作为适合网络传输的格式而不需专利许可,所以被广泛应用于互联网及其他方面上。
PNG另一个非正式的名称来源为递归缩写:“P NG is N ot G IF”。
特性•支持256色调色板技术以产生小体积文件•最高支持48位真彩色图像以及16位灰度图像。
•支持Alpha通道的透明/半透明特性。
•支持图像亮度的Gamma校准信息。
•支持存储附加文本信息,以保留图像名称、作者、版权、创作时间、注释等信息。
•使用无损压缩。
•渐近显示和流式读写,适合在网络传输中快速显示预览效果后再展示全貌。
•使用CRC防止文件出错。
•最新的PNG标准允许在一个文件内存储多幅图像。
版本以及历史早期,Unisys公司根据它在GIF格式中使用的LZW数据压缩算法的软件专利(美国第4558302号)开始商业收费。
为避免专利影响,用于表现单张图像的PNG、用于表现动画的MNG图形文件格式被同时创建出来。
1999年8月,Unisys公司进一步中止了对自由软件和非商用软件开发者的GIF专利免费许可,从而使PNG格式获得了更多的关注。
在PNG传播过程中,很多网络浏览器经过很长时间才开始完全支持PNG格式;如Microsoft Windows默认的Internet Explorer浏览器一直到7.0版才支持PNG格式中的半透明效果,较早期的版本(如6.0 SP1)需要下载Hotfix [1]或由网站提供额外的Script去支持。
[2]这造成PNG 格式并没有得到广泛的认知。
•PNG的1.0版本规范于1996年7月1日发布,后来被称为RFC 2083标准,并在1996年10月1日成为W3C建议。
毕业设计--基于模式识别的水果智能分类系统[管理资料]
毕业设计基于模式识别的水果智能分类系统基于模式识别的水果智能分类系统摘要本论文综合运用了数字图像处理,模式识别的理论来构建起一个简单的水果智能分类系统。
实现了在相同条件下拍摄的水果图片的特征提取和种类识别,在此基础上设计出了基于人工神经网络的水果智能分类器,由计算机自动调整神经网络中各个权值,达到水果种类识别的自动化。
数字图像处理对源位图进行了加工,是特征提取的基础。
数字图像处理的理论涉及到彩色图像的灰度化、中值滤波、二值化、轮廓提取、种子填充、轮廓跟踪等。
其中,二值化采用了基本自适应门限的方法。
模式识别包括了特征提取和分类器的设计,是种类识别的关键。
特征提取主要利用了水果的几何特征,反映了水果的大小和形状。
分类器的设计主要采用了人工神经网络的方式来实现,具体说来是利用了神经网络中反向传播算法来进行网络训练,并利用训练结果完成了水果种类的智能识别。
关键词:特征提取人工神经网络二值化基本自适应门限反向传播算法A Intellective System for Fruit ClassificationBased on Pattern RecognitionAbstractIn this paper, we apply the theory of digital image processing and pattern recognition to construct a simply and intellective system for fruit classification based on pattern recognition. We have already fulfilled characteristic withdrew and type recognition for the pictures of fruit which are photographed under the same condition .We have also designed a categorize machine based on artificial neuro-network , which can adjust the weights of neuro-network automatically by computer in order to recognize the type of the fruit.Digital image processing deals with the original bitmap ,which is the basis of characteristic withdrew .The theory of digital image processing refers to the gradation of color image ,median filter ,image binary, outline withdrew ,the seed fills ,outline track and so on. Among them, image binary makes use of the basic auto-adapted threshold method.Pattern recognition involves characteristic withdrew and the design of categorize machine, which are the keys of type recognition. The characteristic withdrew has mainly used fruit's geometry characteristics ,which reflect fruit’s size and shape .The categorize machine is designed by means of artificial neuro-network, which uses the algorithm of Back-Propogation in detail and completes the fruit type intelligent recognition by using the training results. Keywords:characteristic withdrew, artificial neuro-network, image binary, basic auto-adapted threshold, the algorithm of Back-Propogation.目录摘要 (I)Abstract (III)第1章绪论 (6)模式识别的发展情况 (6)模式识别和模式的概念 (6)模式识别的应用 (7)水果智能分类系统的研究情况 (7)国内研究现状 (7)国外研究现状 (8)第2章图像采集 (9)图像采集的几种方法 (9)本课题所采用的图像采集方法 (9)第3章图像预处理 (11)数字图像处理的基本内容 (11)常用的几种图像文件 (11)与设备无关位图 (12)位图的显示 (14)彩色图像的颜色空间转换 (15)彩色图像的灰度化处理 (17)将伪彩色图像转化为灰度图 (17)将24位真彩位图转化为灰度图 (17)中值滤波 (18)图像的二值化处理 (18)基本全局门限 (19)基本自适应门限 (20)第4章图像分割与特征提取 (21)消除小杂质区域面积 (21)二值图像的区域标记 (21)二值图像的小区域消除 (22)消除大杂质区域 (22)轮廓提取 (23)种子填充 (24)消除杂质区域 (25)特征提取简介 (25)本系统的特征提取 (26)特征形成 (26)特征获取 (26)第5章分类器的设计 (28)人工神经网络基础 (28)人工神经元 (28)前馈神经网络 (29)反向传播算法的应用(BP法) (29)数据归一化 (29)BP算法 (30)神经网络设计思路 (32)结论 (34)致谢 (36)参考文献 (35)附录 (32)第1章绪论1.1模式识别的发展情况模式识别[1]诞生于20世纪20年代,随着40年代计算机的出现,50年代人工智能的兴起,模式识别在60年代初迅速发展成一门学科。
TIFF(Tag Image File Format) 图像文件说明
TIFF(Tag Image File Format) 图像文件说明TIFF 文件是由许多的标签 (tag) 组成 , 在 Adobe 的有关 tiff6.0 的说明中,将 (tag) 的解释称各种标签所对应的数值,而在文件中各个标签的实际入口称为 (field) ,暂且称为域。
tiff 支持黑白、灰度、彩色的图像格式,同时还可以接受 RGB CMYK 等色彩系统,同时支持图像数据的 LZW, 哈夫曼等压缩算法或者不压缩。
TIFF 文件分为文件头和 IFD 两部分,一个 IFD 中存储了一幅图像的信息, IFD 可以由许多标签组成。
在 TIFF6.0文件中,规定所有的标签必须以升序排列,通过这些标签信息,来处理文件中的图像数据。
TIFF 文件头说明:TIFF 的文件头有 8 字节0-1 规定为 "II" 或者 "MM" Intel /Mortorola 类型的字节顺序2-3 TIFF 文件的版本,为与以前的兼容,为 424-7 TIFF 文件的第一个 IFD 在文件中的偏移量,肯定大于 8IFD 说明: IFD 是由连续的标签组成OFFSET:0-1 IFD 中的标签数目OFFSET:2-13 IFD 中的第一个标签OFFSET:14-25 IFD 中的第二个标签.....OFFSET:2+12* 标签数下一个 IFD 的 ( 相对于文将 ) 偏移量,在一个 TIFF 文件中可以由多个 IFD 用于存放多个图像,如果如果该数字为 0 ,表示已经处理完所有的 IFD 。
标签说明:一个标签由连续的 12 字节组成OFFSET:0-1 TAG ID 标签所对应的数字编号 (tag) ,用于定义该标签所存放的 " 信息 "OFFSET:2-3 TAG INFO DATA TYPE 标签中数据的数据类型OFFSET:4-7 VALUE COUNT 2-3 中说明的数据类型的数目OFFSET:8-11 VALUE OFFSET 相对于文件的该标签值的偏移量 , 必须开始于 " 字 " 边界 , 为了节省空间,如果该标签的数据的长度小于等于四个字节,在 VALUE OFFSET 中直接存储 ( 小于四字节数据左对齐 ) 该标签的值而不是在文件中的偏移量。
