图像格式基础

        所谓位映像,即是指一个二维的像素矩阵,而位图就是采用位映像方法显示和存储图像。一幅图像的显示就是将图像的像素映射到屏幕的像素上并显示一定的颜色。当一幅图形的像素由彩色表示时就是我们通常所说的彩色图像了。
        由于数字图像可以表示为矩阵的形式,所以在计算机数字图像处理程序中,通常用二维数组来存放图像数据。二维数组的行对应图像的高,二维数组的列对应图像的宽,二维数组的元素对应图像的像素,二维数组元素的值就是像素的灰度值。采用二维数组来存储数字图像,符合二维图像的行列特性,同时也便于程序的寻址操作,使得计算机图像编程十分方便.
        图像的问题数据是一个二维数组(矩阵),矩阵的每一个元素对应了图像的一个像素,当保存一幅图像时,不但要保存图像的位图数据矩阵,还要将每个像素的颜色保存下来,颜色的记录是利用颜色表来完成的。
        颜色表,也叫颜色查找表,是图像像素数据的颜色索引表。对于真彩色图像,每个像素占存储空间3个字节(24位),分别对应R, G, B三个分量,每个像素的值已经将该像素的颜色记录下来了,不再需要颜色表,因此24位真彩色位图没有颜色表。
        彩色图像可以由RGB彩色空间表示。彩色空间是用来表示彩色的数学模型,又被称为彩色模型。计算计算上显示的图像经常有二值图像、灰度图像、伪彩色图像及真彩色图像等不同格式类型。而灰度和彩色格式是数字图像处理中最常用到的类型。
        灰度图像是数字图像的最基本形式,灰度图像可以由黑白照片数字化得到,或从彩色图像进行去色处理得到。灰度图像只表达图像的亮度信息而没有彩色信息,因此,灰度图像的每个像素点上只包含一个量化的灰度级(即灰度值),用来表示该点的亮度水平,并且通常用1个字节(8个二进制位)来存储灰度值。  
        彩色图像数据不仅包含亮度信息,还包含颜色信息。BMP文件结构及其存取:数字图像在外存储器设备中的存储形式是图像文件,图像必须按照某个已知的、公认的数据存储顺序和结构进行存储,才能使不同的程序对图像文件顺利进行打开或存盘操作,实现数据共享。
        图像数据子文件中的存储顺序和结构称为图像文件格式。目前广为流传的图像文件格式有许多种,常见的格式包括BMP, GIF, JPEG, TIFF,PSD, DICOM, MPEG等。在各种图像文件格式中,一部分时由某个软硬件厂商提出并广泛接受和采用的格式,如BMP, GIF和PSD格式。另一部分是由各种国际标准组织提出的形式,例如JPEG/ TIFF和DICOM,其中JEPG是国际静止图像压缩标准组织提出的格式,TIFF是由部分厂商组织提出的格式,DICOM是医学图像国际标准组织提取的医学图像专用格式。
       BMP文件是Windows操作系统所推荐和支持的图像文件格式,是一种将内存或显示器的图像数据不经过压缩而直接按位存盘的文件格式,所以称为位图(bitmap)文件,因其文件扩展名为BMP,故称为BMP文件格式,简称BMP文件。
       BMP文件结构:
       BMP文件图像被分成4部分:位图文件头、位图信息头、颜色表和位图数据。
       第一部分为位图文件头BITMAPFILEHEADER,是一个结构体类型,该结构的长度是固定的,为14个字节。
       第二部分为位图信息头BITMAPINFOHEADER,也是一个结构体类型的数据结构,该结构的长度也是固定的,为40个字节。
       第三部分为颜色表。颜色表实际上时一个RGBQUAD结构的数组,数组的长度由biClrUsed指定。RGBQUAD结构是一个结构体类型,占4个字节。
       第四部分是位图数据,即图像数据,其紧跟在位图文件头、位图信息头和颜色表(如果有颜色表的话)之后,记录了图像的每一个像素值。对于由颜色表的位图,位图数据就是该像素颜色在调色板中的索引值。对于真彩色图,位图数据就是实际的R, G, B值(三个分量的存贮顺序是R, G, R)。
       windows规定一个扫描行所占的字节数必须是4的倍数,不足4的倍数则要对其进行扩充。一般来说,BMP文件的数据是从图像的坐下角开始逐行扫描的,即从下到上、从左到右,将图像的像素值一一记录下来,因此图像坐标零点在图像坐下角。

        假设内存中位图数据的指针为pBmpBuf,一行像素所占的字节数为lineByte(4的倍数)那么,对于灰度图像,第i行第j列的像素指针(所在的存储空间位置)为pBmpBuf+i*lineByte+j , *(pBmpBuf+i*lineByte+j)是该像素的灰度值,如果想让该像素变成指定颜色,只需要给*(pBmpBuf+i*lineByte+j)赋指定的值即可;对于彩色图像,每像素占3个字节,那么pBmpBuf+i*lineByte+j*3+0、pBmpBuf+i*lineByte+j*3+1、pBmpBuf+i*lineByte+j*3+2分别代表了第i行第j列像素B、G、R三个分量的指针,若想给该点指定一种颜色,则需要给三个分量分别赋值。
        灰度图像的颜色表是一个256个表项的RGBQUAD结构体数组,而每个RGBQUAD中的R、G、B分量的值是相等的。随着颜色表驻足下标从0到255变化,颜色表数组元素。R、G、B分量也从0到255依次变化。灰度图像的位图数据每像素一个字节,其值为0到255之间的一个,当显示一幅灰度图像时,系统根据像素值,到颜色表数组下表与之对应的表项(数组元素)中查看颜色,根据该表项中的颜色显示像素。由于灰度图像颜色表每个表项中R、G、B分量相等,因此只有图像亮度信息,没有颜色信息,因而显示出的灰度也就没有颜色了。
        从以上的解释中我们知道,图像颜色表决定了图像的颜色,如果对灰度图像的颜色表中的数据进行改变,图像颜色自然也就被改变了。改变后弧度图像颜色表改变,此时颜色表R、G、B三个分量的值已经不再相等,因此图像也就具有了颜色信息,只不过此时的颜色并不是物体真实的颜色。

你可能感兴趣的:(图像格式基础)