您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 广告经营 > 第2章数字图像的基本知识
第2章数字图像的基本知识本章介绍数字图像的描述方法。讨论内容如下:2.1彩色计色体系2.2位图图像的组成2.3VC++下位图文件数据的读取与显示2.4灰度直方图位图文件的读取与显示是图像处理和分析的最基本操作,必须熟练掌握。直方图是评价、处理和分析图像效果的有力工具;是本章的重点之一。2.1彩色计色体系2.1.1像素将一幅摸拟图象划分为很多逐行逐列排列的点,每一点称为一个像素。像素是组成图像的最小单位。对于一幅彩色图象,每个像素需要用3个量来描述。(1)用RGB三基色描述像素R——红色分量,G——绿色分量,B——蓝色分量R、G、B按不同的比例混合,可得到不同的颜色。例:24位真彩色图像,每个分量用一个字节表示,值范围为0~255。能表达的颜色数目为2563=16777216种,足以描述自然界中的绝大部分颜色。目前,.BMP文件大部分都是这种格式。2.1.2计色体系(2)用YUV分量描述像素Y——亮度分量,U——蓝差分量,V——红差分量已知RGB,可求出YUV:Y=0.30R+0.59G+0.11BU=B-Y=-0.30R-0.59G+0.89BV=R-Y=0.7R-0.59G-0.11B矩阵形式:BGRVUY11.059.070.089.059.030.011.059.030.0亮度分量代表像素的明暗程度,对于图像的清晰度起决定性作用。由于U、V分量是三基色分量中扣除色度信号的结果,因此不包括亮度成分。U、V分量代表像素的颜色,根据“大面积着色原理”,对图像的清晰度影响不大。(3)用YSC分量描述像素Y——亮度分量,S——色饱和度分量,C——色调分量已知YUV,可求出YSC:22VUSUVactgC色饱和度S代表颜色的深浅,色调C代表颜色的种类。S和C统称为色度。UVCS0建立直角坐标系U-V,则:S为色度的大小,C为色度的辐角例:纯红色像素,三基色值为R=255,G=0,B=0。分别用YUV和YSC计色制表示该像素。Y=0.3×255+0.59×0+0.11×0=76.5≈77U=B-Y=0-77=-77V=R-Y=255-77=178S=[(-77)2+(178)2]0.5=193.9C=arctg(-178/77)=arctg(-2.31)=113°UVC=113°S=193.90-771788种标准颜色的YSC值如下表:名称白红绿蓝黄青品黑R,G,B1,1,11,0,00,1,00,0,11,1,00,1,11,0,10,0,0Y1.00.30.590.110.890.70.410S00.760.830.90.90.760.830C无意义113°-135°-6°173°293°45°无意义UV红113°将标准颜色画在U-V坐标系中,称为彩色矢量图。青293°品45°绿225°蓝354°黄173°例:有一像素,三基色值为R=100,G=50,B=200。试判断该像素的颜色。Y=0.3×100+0.59×50+0.11×200=81.5(较暗)U=B-Y=50-81.5=-31.5V=R-Y=100-81.5=19.5S=[(-31.5)2+(19.5)2]0.5=37(颜色深浅中等)C=arctg(-19.5/31.5)=arctg(-0.62)=32°(紫偏蓝)若知一个像素的三基色值,由彩色矢量图,很容易判断该像素的颜色。R=100,G=50,B=200UV红113°青293°品45°绿225°蓝354°黄173°2.2位图图像的组成位图(BITMAP):由逐行逐列的像素排列构成的图像。各像素的存储顺序与像素在图像中的坐标位置成一定的影射关系。没有经过数据压缩,图像质量高。但数据量大。显示时不存在解压缩过程,显示速度快。图像文件:图像文件的格式主要有:位图文件.BMP。Windows系统定义的一种图像文件,直接记录三基色,未压缩,图像质量高。.JPG文件。采用专门方法进行压缩,压缩是有损的,图像质量有一定的损失。允许损失越大,能获得的压缩比越高。其他格式。如.GIF、.TIFF等。本节将重点介绍.BMP文件的结构。2.2.1基本概念BMP文件由4部分组成:文件头、信息头、彩色表(调色板)、位图点阵2.2.2BMP文件的结构文件头信息头彩色表位图点阵(1)文件头,共14字节。在VC中用一个结构类型描述:tydefsturct{WORDbfType;//.BMP文件的标志,必须为“BM”的ASC码DWORDbfSize;//.BMP文件的大小(以字节为单位)WORDbfReserved1;//保留,必须为0X0000WORDbfReserved2;//保留,必须为0X0000DWORDbfOffBits;//从文件开头到位图数据开始的字节数}BITMAPFILEHEADER;文件头信息头彩色表位图点阵(2)信息头,共40个字节。在VC中用一个结构类型描述:tydefsturct{DWORDbiSize;//本信息头占用的字节数:0x28LONGbiWidth;//图像的宽度(以像素点为单位)LONGbiHeight;//图像的高度(以像素点为单位)WORDbiPlanes;//彩色表。24位.BMP文件为0x1,无彩色表WORDbiBitCount;//一个像素点数据的位数DWORDbiCompression;//压缩方式,0x0为未压缩DWORDbiSizeImage;//图象尺度LONGbiXPelsPerMeter;//水平分辨率LONGbiYPelsPerMeter;//垂直分辨率DWORDbiClrUsed;//使用的颜色数DWORDbiClrImportant;//重要颜色数}BITMAPINFOHEADER;文件头信息头彩色表位图点阵(3)彩色表对于24位BMP图像,每像素的三基色分别用3个字节记录,不需要彩色表。对于256色BMP图像,每像素用一个字节记录,该字节表示颜色的编号。什么编号代表什么颜色,由彩色表决定。通过像素编号查找彩色表,从而获得该像素的RGB值。B0G0R0B1G1R1…B255G255R2550号颜色1号颜色255号颜色…文件头信息头彩色表位图点阵(4)位图点阵24位BMP图像,逐行逐列记录各像素的三基色值:每像素点占用3个BYTE,分别为B,G,R。则一行像素至少要占用3n个字节。位图电阵用一维数组存放,顺序为:(1)从最下面的一行开始,逐行存放,直到第0行;(2)当一行占用的字节数不是4的整数倍时,应补充1~3个无效字节,使一行占用的字节数能被4整除。所补充的无效字节可为任意值,不会影响图像内容。例:设图像为638×480(宽×高),则每行占用的有效字节数为638×3=1914。但1914不能被4整除,应补充两个无效字节,即每行占用的字节数为1916。则:第i行、第j列像素的蓝色分量在一维数组中的下标为:(480-1-i)×1916+j×3第i行、第j列像素的绿色分量在一维数组中的下标为:(480-1-i)×1916+j×3+12.3VC++下位图文件数据的读取与显示BITMAPFILEHEADERFileHead;//存放文件头BITMAPINFOHEADERInfoHead;//存放信息头LPBYTElpImage;//存放位图点阵,显示时需要//存放像素的三基色值,480列,640行struct{BYTEB;//红色分量BYTEG;//蓝色分量BYTER;//绿色分量}C3[480][640];//存放像素的YSC值,480列,640行struct{BYTEY;//亮度BYTES;//色饱和度BYTEC;//色调}YSC[480][640];(1)定义全局变量。一般在类的头文件中定义(2)打开BMP文件,读取像素。关键代码如下:CFilef;BOOLOK=f.Open(PathName,//PathName=BMP文件名CFile::modeRead|CFile::typeBinary|CFile::shareExclusive,NULL);if(!OK)return;//如果打开失败f.Read(&FileHead,sizeof(FileHead));//读取文件头f.Read(&InfoHead,sizeof(InfoHead));//读取信息头shortx,y,z;//计算每行字节数z=(InfoHead.biWidth/4)*4+(InfoHead.biWidth%4==0?0:4);f.Seek(FileHead.bfOffBits,0);//移动文件指针,指向像素点存放的开始位置f.Read(lpImage,InfoHead.biHeight*z*3);//读取全部像素f.Close();//关闭文件(3)显示图像。调用下面的程序断可显示位图:CClientDCdc(this);//建立客户区绘图对象dc.SetStretchBltMode(COLORONCOLOR);//按可延伸的彩色影射模式绘图::StretchDIBits(dc.GetSafeHdc(),//得到绘图对象的句柄0,0,640,480,//客户区中的矩形(左上角坐标,右下角坐标)0,0,InfoHead.biWidth,InfoHead.biHeight,//源图像中的矩形lpImage,//存放位图点阵的内存区(LPBITMAPINFO)&InfoHead,//存放信息头的内存区DIB_RGB_COLORS,//按三基色格式SRCCOPY//将图像拷贝到显存);(3)从位图点阵中提取各像素的RGB分量,存放到C3数组中,进而计算YSC分量:doubleu,v,c;for(y=InfoHead.biHeight-1;y=0;y--){//逐行转换memcpy(C3[y],lpImage+(InfoHead.biHeight-1-y)*z*3,z*3);//存储到C3数组for(x=0;xInfoHead.biWidth;x++){YSC[y][x].Y=C3[y][x].R*0.3+C3[y][x].G*0.59+C3[y][x].B*0.11;//计算灰度u=(C3[y][x].B-YSC[y][x].Y)/(double)YSC[y][x].Y;//计算归一化蓝差分量v=(C3[y][x].R-YSC[y][x].Y)/(double)YSC[y][x].Y;//计算归一化红差分量c=atan2(v,u)*180/3.14;//计算色调,弧度转换为度if(c0)c=c+360.0;//将角度由-180~180转换为0~360c=c*255.0/360.0;//将角度由0~360转换为0~255,使能用字节变量存储YSC[y][x].C=(BYTE)c;//存储到YSC数组YSC[y][x].S=(BYTE)(sqrt(u*u+v*v)*100);//将色饱和度由0~1转换为0~100}}2.4灰度直方图灰度直方图是一种表达图像的灰度分布概率的图示方法,它描述了各种灰度值在图像中所占的比例。设图像有总共n个像素点,灰度值为i的像素点有ni个。则灰度值为i的像素点在图像中出现的概率(频度)p(i)为:p(i)=ni/ni=0,1,…,L-1L为灰度级。对于24位位图,L=256。以灰度i为横坐标,p(i)为纵坐标,绘制p(i)曲线,就得到灰度直方图2.4.1概念2.4.2灰度直方图的性质(1)不含像素点的位置信息。(2)一幅图像的直方图是唯一的,反之不成立。(3)叠加性。把一幅图像分成多个区域,则全图像的直方图为各区域直方图的叠加。区域1区域2区域1的直方图区域2的直方图全图象的直方图2.4.2灰度直方图的应用(1)判断图像的整体灰度分布情况像素大部分集中在低灰度值端,整幅图像较暗,几乎没有很亮的区域。像素的灰度值分布较均匀,整幅图像层次分明,视觉效果较好。(2)确定图像的分割阈值在原图像上选定一个区域求此区域中图像的直方图。直方图呈双峰,左峰由牌照的底色形成,右峰由字符色形成。
本文标题:第2章数字图像的基本知识
链接地址:https://www.777doc.com/doc-2247125 .html