数字图像处理实验报告
数字图像处理实验报告1
一. 实验内容:
主要是图像的几何变换的编程实现,具体包括图像的读取、改写,图像平移,图像的镜像,图像的转置,比例缩放,旋转变换等.
具体要求如下:
1.编程实现图像平移,要求平移后的图像大小不变;
2.编程实现图像的镜像;
3.编程实现图像的转置;
4.编程实现图像的比例缩放,要求分别用双线性插值和最近邻插值两种方法来实
现,并比较两种方法的缩放效果;
5.编程实现以任意角度对图像进行旋转变换,要求分别用双线性插值和最近邻插
值两种方法来实现,并比较两种方法的旋转效果.
二.实验目的和意义:
本实验的目的是使学生熟悉并掌握图像处理编程环境,掌握图像平移、镜像、转置和旋转等几何变换的方法,并能通过程序设计实现图像文件的读、写操作,及图像平移、镜像、转置和旋转等几何变换的程序实现.
三.实验原理与主要框架:
3.1 实验所用编程环境:
Visual C++(简称VC)是微软公司提供的基于C/C++的应用程序集成开发工具.VC拥有丰富的功能和大量的扩展库,使用它能有效的创建高性能的Windows应用程序和Web应用程序.
VC除了提供高效的C/C++编译器外,还提供了大量的可重用类和组件,包括著名的微软基础类库(MFC)和活动模板类库(ATL),因此它是软件开发人员不可多得的开发工具.
VC丰富的功能和大量的扩展库,类的重用特性以及它对函数库、DLL库的支持能使程序更好的模块化,并且通过向导程序大大简化了库资源的使用和应用程序的开发,正由于VC具有明显的优势,因而我选择了它来作为数字图像几何变换的开发工具.
在本程序的开发过程中,VC的核心知识、消息映射机制、对话框控件编程等都得到了生动的体现和灵活的应用.
3.2 实验处理的对象:256色的BMP(BIT MAP )格式图像
BMP(BIT MAP )位图的文件结构:
具体组成图: BITMAPFILEHEADER
位图文件头
(只用于BMP文件) bfType=”BM” bfSize bfReserved1
bfReserved2
bfOffBits
biSize
biWidth
biHeight
biPlanes
biBitCount
biCompression
biSizeImage
biXPelsPerMeter
biYPelsPerMeter
biClrUsed
biClrImportant
单色DIB有2个表项
16色DIB有16个表项或更少
256色DIB有256个表项或更少
真彩色DIB没有调色板
每个表项长度为4字节(32位)
像素按照每行每列的顺序排列
每一行的字节数必须是4的整数
倍BITMAPINFOHEADER 位图信息头 Palette 调色板 DIB Pixels DIB图像数据
1. BMP文件组成
BMP文件由文件头、位图信息头、颜色信息和图形数据四部分组成.
2. BMP文件头
BMP文件头数据结构含有BMP文件的类型(必须为BMP)、文件大小(以字节为单位)、位图文件保留字(必须为0)和位图起始位置(以相对于位图
文件头的偏移量表示)等信息.
3. 位图信息头
BMP位图信息头数据用于说明位图的尺寸(宽度,高度等都是以像素为单位,大小
以字节为单位, 水平和垂直分辨率以每米像素数为单位) ,目标设备的级别,每个像素所需的位数, 位图压缩类型(必须是 0)等信息.
4. 颜色表
颜色表用于说明位图中的颜色,它有若干个表项,每一个表项是一个RGBQUAD
类型的结构,定义一种颜色.具体包含蓝色、红色、绿色的亮度(值范围为0-255)
位图信息头和颜色表组成位图信息
5. 位图数据
位图数据记录了位图的每一个像素值,记录顺序是在扫描行内是从左到右,扫描
行之间是从下到上.
Windows规定一个扫描行所占的字节数必须是 4的倍数(即以long为单位),不足的以0填充.
3.3 BMP(BIT MAP )位图的显示:
①一般显示方法:
1. 申请内存空间用于存放位图文件
2. 位图文件读入所申请内存空间中
3. 在函数中用创建显示用位图, 用函数创建兼容DC,用函数选择显示删除位图
但以上方法的缺点是: 1)显示速度慢; 2) 内存占用大; 3) 位图在缩小显示时图形失真大,(可通过安装字体平滑软件来解决); 4) 在低颜色位数的设备上(如256显示模式)显示高颜色位数的图形(如真彩色)图形失真严重.
②BMP位图缩放显示 :
用视频函数来显示位图,内存占用少,速度快,而且还可以对图形进行淡化(Dithering )处理.淡化处理是一种图形算法,可以用来在一个支持比图像所用颜色要少的设备上显示彩色图像.BMP位图显示方法如下:
1. 打开视频函数,一般放在在构造函数中
2. 申请内存空间用于存放位图文件
3. 位图文件读入所申请内存空间中
4. 在 函数中 显示位图
5. 关闭视频函数 ,一般放在在析构函数中
以上方法的优点是: 1)显示速度快; 2) 内存占用少; 3) 缩放显示时图形失真小,4) 在低颜色位数的设备上显示高颜色位数的图形图形时失真小; 5) 通过直接处理位图数据,可以制作简单动画.
3.4 程序中用到的访问函数
Windows支持一些重要的DIB访问函数,但是这些函数都还没有被封装到MFC中,这些函数主要有:
1. SetDIBitsToDevice函数:该函数可以直接在显示器或打印机上显示DIB. 在显
示时不进行缩放处理.
2. StretchDIBits函数:该函数可以缩放显示DIB于显示器和打印机上.
3. GetDIBits函数:还函数利用申请到的内存,由GDI位图来构造DIB.通过该函数,
可以对DIB的格式进行控制,可以指定每个像素颜色的位数,而且可以指定是否进行压缩.
4. CreateDIBitmap函数:利用该函数可以从DIB出发来创建GDI位图.
5. CreateDIBSection函数:该函数能创建一种特殊的DIB,称为DIB项,然后返回
一个GDI位图句柄.
6. LoadImage函数:该函数可以直接从磁盘文件中读入一个位图,并返回一个DIB
句柄.
7. DrawDibDraw函数:Windows提供了窗口视频(VFW)组件,Visual C++支持该
组件.VFW中的DrawDibDraw函数是一个可以替代StretchDIBits的函数.它的最主要的优点是可以使用抖动颜色,并且提高显示DIB的速度,缺点是必须将VFW代码连接到进程中.
3.5 图像的几何变换
图像的几何变换,通常包括图像的平移、图像的镜像变换、图像的转置、图像的缩放和图像的旋转等.