基于mfc的图像边缘检测提取算法仿真内容摘要:

用 R、 G、 B3 个分量表示,则一个像素需要 3个字节 (因为每个分量有 256 个级别,要用 8位,即 1个字节来表示,所以 3个分量需要用 3 个字节 )。 这样保存整个 图像要用 200*200*3,即 120200 字节。 但是如果采用调用的方法,就能节省很多字节。 对于 16 色图像,图中最多只有 16 种颜色,如果采用一个颜色表,表中的 每一行记录一种颜色的 R、 G、 B 值,这样当表示一个像素的颜色时,只需要指出该颜色是第几行,即指出的该颜色在表中的索引值即可。 例如表的第0 行为 (255, 0, 0),表示红色,那么当某个像素为红色时,只需要标明 0即长春大学光华学院 毕业设计(论文)专用纸 共 30 页 第 8 页 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 可。 通过颜色索引表来表示图像, 16种状态可以用 4 位 (bit)表示,所以一个像素要用半个字节。 整个图像要用 200*200*,即 20200 字节,再加上颜色表占用 3*16=48 字节,也不过 20208 字节。 这样一幅图像整个占用的字节数只是用前面方法表示的 1/6。 [2] 灰度图像和彩色图像 1. 灰度图像 灰度图 (Grayscale)是指含亮度信息不含彩色信息的图像,是数字图像的基本形式,灰度图像可有由黑白照片数字化得到,或从彩色图像进行去色处理得到。 灰度图像只表达图像的亮度信息而没有颜色信息,因此,灰度图像的每个像素点上只包含一个量化的灰度级 (即灰度值 ),用来表示该点的亮度水平,并且通常用 1 个字节 (8 个二进制位 )来存储灰度值。 如果灰度值用 1 个字节表示,则可以表示的正整数范围是 0到 255,也就是说,像素灰度值取值在 0到 255 之间,灰度技术为 256 级。 注意到人眼对灰度的分辨能力通常在 20 到 60级 ,因此,灰度值存储以字节为单位即保证了人眼的分辨能力,又符合计算机数据寻址的习惯。 在特殊应用中,可能要采用更高的灰度级数,例如 CT 图像的灰度级数高达数千,需要采用 12 位或16 位二进制位来存储,但这类图像通常都采用专用的显示设备和软件来进行显示和处理。 [7] 彩色图像的数据不仅包含亮度信息,还包含颜色信息。 彩色的表示方法是多样化的,最常见的是三基色模型,例如 RGB 三基色模型,利用 RGB 三基色可以混合成任意颜色。 因此 RGB 模型在各种彩色成像设备和彩色显示设备中使用,常规的彩色图像也都是用 RGB 三基 色来表示的,每个像素包括 RGB三基色数据,每个基色用 1个字节 (8位二进制位 )表示,则每个像素的数据为 3个字节 (即 24位二进制位 ),这就是人们常说的 24位真彩色。 位图 位图 GDI 是图形设备接口 (Graphics Device Interface)的缩写。 GDI 位图是一种 GDI对象,在 Microsoft基本类 (MFC)库中 Cbitmap类来表示。 在 Cbitmap类对象中,包含一种和 Windows 的 GDI 模块有关的 Windows 数据结构,该数据结构是与设备相关的。 应用程序可以得到 GDI 位图 数据的一个备份,但是其中位图的安排则完全依赖于显示设备。 我们可以将 GDI 位图数据在同一台计算机内的不同应用程序间任意传递,但是由于其对设备的依赖性,在不同长春大学光华学院 毕业设计(论文)专用纸 共 30 页 第 9 页 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 类型计算机间的传递是没有任何意义的。 Cbitmap 类封装了 Windows GDI 位图,同时提供了一些位图的成员函数。 在使用 CBitmap 对象时,首先要创建一个 Cbitmap 对象,然后把它选进设备环境中,再调用其成员函数进行处理,使用完毕后,把它从设备环境中选出并删除。 (DIB) DIB 是设备无关位图 (DeviceIndependent Bitmap)的缩写,它自带颜色信息,因此调色板管理非常容易。 DIB 也使打印时的灰度阴影的控制更加容易。 任何运行 Windows 操作系统的计算机都可以处理 DIB,它通常以 BMP 文件的形式被保存在磁盘中或者作为资源保存在 EXE 文件和 DLL 文件中。 (1)BMP 图像的 DIB 结构 DIB 是标准的 Windows 位图格式, BMP文件中包含了一个 DIB。 一个 BMP文件大体上分成如下 4个部分: BITMAPFILEHEADER bType=” MB” 位图文件头 bfSize (只用于 BMP 文件 ) btReserved1 btReserved2 bfOffBits BITMAPINFOHEADER biSize 位图信息头 biWidth biHeight biPlanes biBitCount biCompression biSizeImage biXPelsPerMeter biYPelsPerMeter biClrUsed biClrImportant Polette 单色 DIB 有 2个表项 调色板 16 色 DIB有 16 个表项或更少 256 色 DIB 诱 256 个表项或更少 真彩色 DIB 没有调色板 每个表项长度为 4字节 (32 位 ) 长春大学光华学院 毕业设计(论文)专用纸 共 30 页 第 10 页 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ DIB Pixels 像素按照每行每列的顺序排列 DIB 图像数据 每一行的字节数必须是 4 的整倍数 第 1部分为位图文件头 BITMAPFILEHEADER,它是一个结构,其定义如下: typedef struct tagBITMAPFILEHEADER{ WORD bfType。 DWORD bfSize。 WORD bfReserved1。 WORD bfReserved2。 DWORD bfoffBits。 }BITMAPFILEHEADER, FAR *LPBITMAPFILEHEADER, *PBITMAPFILEHEADER。 该结构的长度是固定的,为 14 个字节 (WORD 为无符号 16位整数, DWORD为无符号 32 位整数 ),各个域的说明如下: bfType:指定文件类型,必须是 0x4D42,即字符串“ MB”,也就是说所有的“ .bmp”文件的头两个字节都是“ MB”。 bfSize:指定文件大小,包括 14个字节。 bfReserved1, bfReserved2:为保留字,不用考虑。 bfOffBits:为从文件头到实际的位图数据的偏移字节数。 第 2部分为位图信息头 BITMAPINFOHEADER,它也是一个结构,其定义如下: typedef struct tagBITMAPINFOHEADER{ DWORD biSize。 LONG biWidth。 LONG biHeight。 WORD biPlanes。 WORD biBitConut。 DWORD biCompression。 DWORD biSizeImage。 LONG biXPelsPerMeter。 LONG biYPelsPerMeter。 DWORD biClrUsed。 DWORD biClrImportant。 } BITMAPINFOHEADER, FAR *LPBITMAPINFOHEADER, *PBITMAPINFOHEADER 这个结构的长度也是固定的,为 40 个字节 (WORD 为无符号 16位整数,DWORD 为无符号 32位整数, LONG 为 32 位整数 )。 各个域的说明如下。 biSize:指定这个结构的长度, 为 40字节。 长春大学光华学院 毕业设计(论文)专用纸 共 30 页 第 11 页 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ biWidth:指定图像的宽度,单位是像素。 biHeight:指定图像的高度,单位是像素。 biPlanes:必须是 1,不用考虑。 biBitCount:指定表示颜色时药用到的位数,常用的值为 1(黑白二色图 )、4(16色图 )、 8(256色 )、 24(真彩色图 ),新的“ .bmp”格式支持 32 位色 biCompression:指定位图是否压缩,有效的值为 BI_RGB, BI_RLE8,BI_RLE4, BI_BITFIELDS(都是一些 Windows 定义好的常量 )。 需要注意,Windows 位 图可以采用 RLE4 和 RLE8 的压缩格式,但是使用不经常。 biSizeImage:指定实际的位图数据占用的字节数,其实也可以从下面公式计算出来: biSizeImage=biWidth‘ *biHeight 要注意的是上面的公式中的 biWidth必须是 4的整数倍 (所以不 biWidth,而是 biWidth‘ ,表示大于或等于 biWidth 的离 4 最近的整数倍。 例如,如果biWidth=240,则 biWidth‘ =240;如果 biWidth=241,则 biWidth‘ =244)。 如果 biCompression 为 BI_RGB,则该项可能为零。 biXPelsPerMerter:指定目标设备的水平分辨率,单位是像素 /米。 biYPelsPerMerter:指定目标设备的垂直分辨率,单位是像素 /米。 biClrUsed:指定图像实际用到的颜色数,如果该值为零,则用到的颜色数为 2 的 biBitCount 次幂。 biClrImportant:指定图像中重要的颜色数,如果该值为零,则认为所有的颜色都是重要的。 第 3部分为调色板 (Palette)。 有些位图需要调色板,有些位图 (例如真彩色图 )不需要调色板,它们的 BITMAPINFOHEADER 后面直接是位图数据。 调色板实际上市一个数组,共有 biClrUsed 个元素 (如果该值为零,则有2 的 biBitCount 次幂个元素 )。 数组中每个元素的类型是一个 RGBQUAD 结构,占 4个字节,其定义如下: typedef struct tagRGBQUAD{ BYTE rgbBlue。 该颜色的蓝色分量 BYTE rgbGreen。 该颜色的绿色分量。 BYTE rgbRed。 该颜色的红色分量。 BYTE rgbReserved。 保留值。 }RGBQUAD。 第 4部分是实际的图像数据。 对于用到调色板的位图,图像数据就是该像素颜色在调色板中的索引值;对于真彩色图,图像数据就是实际的 R、 G、B 值 长春大学光华学院 毕业设计(论文)专用纸 共 30 页 第 12 页 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。