数字图像BMP实验报告
数字图像处理 实验 bmp位图的二值化与反色

XXXXXXXX大学(数字图形处理)实验报告实验名称bmp位图的二值化与反色实验时间年月日专业姓名学号预习操作座位号教师签名总评一、实验目的:1. 理解图像的象素操作,理解二值化与反色的本质。
2. 能够使用VC++6.0进行简单的二值化与反色的变换。
二、实验原理:计算机只能处理离散的信号,因此必须进行转换,而利用福利叶变换和傅里叶级数能够使连续的信号离散化从而进行二值化。
图像的反色就依次求出每个像素点的补色,由于用的是256位的图像,所以只需要使用255减去原本像素的色值即可。
三、实验内容:根据实验一的结果,在VC++6.0开发环境下的资源编辑器中,在主菜单中添加一名为“基本运算”的菜单,在其中建立子菜单“点运算”,并在其中添加两个名为“二值化”“发色”的子菜单,分别给他们命名为“IDM_ERZHI”、“IDM_FANSE”的ID,分别通过类向导建立函数。
在函数体中分别加入如下代码:void CHangView::OnErzhi(){// TODO: Add your command handler code herelong w,h,i,j;w=m_DibHead->biWidth;h=m_DibHead->biHeight;unsigned char temp(0);for(i<0;j<3*h;j++)for(j<0;j<w;j++){temp=*(m_Image+i*w+j);if(temp>50)*(m_Image+i*w+j)=255;else*(m_Image+i*w+j)=0;}Invalidate(false);}void CHangView::OnFanse(){// TODO: Add your command handler code herelong w,h;unsigned char *lpsrc;lpsrc=m_Image;w=m_DibHead->biWidth;h=m_DibHead->biHeight;long x,y;int f,a,b;a=1;b=0;for(y=0;y<h;y++)for(x=0;x<w;x++){f=*(lpsrc+y*w+x);*(lpsrc+y*w+x)=255-f;}Invalidate();}四、实验总结:当程序运行没有错误,但是不能够实现函数功能的时候,是因为没有Invalidate函数,而没有能够使试图更新。
bmp哈夫曼编码实验报告

多媒体技术与基础实验——huffman编码实验一:Huffman编码一、实验内容1、了解BMP图像的格式,实现BMP图片格式的数据域及文件头的分离2、熟悉Huffman编码原理3、用C语言使用Huffman编码算法对给定图像文件进行编码二、设计思路1、BMP文件的前54字节是与具体图像无关的文件头信息,进行哈夫曼编码时不需要对这部分进行编码。
2、哈夫曼编码基于图像统计特征的变长编码方法概率小的符号用较长的码字表示,概率大的符号用较短的码字表示。
3、霍夫曼编码的步骤:1)根据待编码的符号串,统计各个符号的概率;2)根据符号的概率统计特征,构建霍夫曼编码表,即计算每个符号的编码结果;3)用得到的编码表对符号序列进行编码。
三、相关知识1、Huffman Tree的定义假设有n个权值{w1,w2,w3......wn},试构造一棵有n个叶子节点的二叉树(节点总数为m=2*n-1),每个叶子带权值为wi,其中WPL(树带权路径)最小的二叉树成为Huffman树或者最优二叉树。
2、如何构造Huffman Tree(1).根据给点的n个权值{w1,w2,w3.....wn}构成n棵二叉树的集合F={T1,T2,T3......Tn},其中每棵二叉树只有个带有权值Wi的根节点,其左右子树为空。
(2).在F中选取两棵根结点的权值最小的树作为左右子树构造一个新二叉树,新根权值为左右子树权值之和。
(3).在F中delete掉这两棵树,插入新二叉树到F中。
(4).重复(2)和(3),直到F中只含一棵树,此数位Huffman Tree。
四、实验结果平均码字长度为7.57,编码效率为0.9967。
实验结果分析:哈夫曼编码是动态变长编码,对每一个图像,临时建立概率统计表和编码树,算法速度比静态编码慢,但压缩效果最好。
但是对具有很多不同颜色的图像时,哈夫曼编码的平均码字长度将增大,编码效率将下降,故需改进哈夫曼算法,例如采用截断哈夫曼算法等。
数字图像处理实验报告 (图像编码)

实验三图像编码一、实验内容:用Matlab语言、C语言或C++语言编制图像处理软件,对某幅图像进行时域和频域的编码压缩。
二、实验目的和意义:1. 掌握哈夫曼编码、香农-范诺编码、行程编码2.了解图像压缩国际标准三、实验原理与主要框架:3.1实验所用编程环境:Visual C++6.0(简称VC)3.2实验处理的对象:256色的BMP(BIT MAP )格式图像BMP(BIT MAP )位图的文件结构:(如图3.1)图3.1 位图的文件结构具体组成图:单色DIB 有2个表项16色DIB 有16个表项或更少 256色DIB 有256个表项或更少 真彩色DIB 没有调色板每个表项长度为4字节(32位) 像素按照每行每列的顺序排列每一行的字节数必须是4的整数倍biSize biWidth biHeight biPlanes biBitCount biCompression biSizeImagebiXPelsPerMeter biYPelsPerMeter biClrUsedbiClrImportantbfType=”BM ” bfSizebfReserved1 bfReserved2 bfOffBits BITMAPFILEHEADER位图文件头 (只用于BMP 文件)BITMAPINFOHEADER位图信息头Palette 调色板DIB Pixels DIB 图像数据3.3 数字图像基本概念数字图像是连续图像(,)f x y 的一种近似表示,通常用由采样点的值所组成的矩阵来表示:(0,0)(0,1)...(0,1)(1,0)(1,1)...(1,1).........(1,0)(1,1)...(1,1)f f f M f f f M f N f N f N M -⎡⎤⎢⎥-⎢⎥⎢⎥⎢⎥----⎣⎦每一个采样单元叫做一个像素(pixel ),上式(2.1)中,M 、N 分别为数字图像在横(行)、纵(列)方向上的像素总数。
数字图像实验报告

数字图像实验报告PB06000631 陆超一、实验目的1、熟悉VC++环境,知道图像文件的存储方式,会简单的图像处理编程。
2、通过实验,加深对数字图像处理相关知识(包括图形增强、图像变换等)的理解。
二、实验原理1.关于BMP文件BMP(Bitmap-File)图形文件是Windows采用的图形文件格式,在Windows环境下运行的所有图像处理软件都支持BMP图像文件格式。
Windows系统内部各图像绘制操作都是以BMP为基础的。
Windows 3.0以前的BMP图文件格式与显示设备有关,因此把这种BMP图像文件格式称为设备相关位图DDB(device-dependent bitmap)文件格式。
Windows 3.0以后的BMP图像文件与显示设备无关,因此把这种BMP图像文件格式称为设备无关位图:DIB(device-independent bitmap)格式。
位图文件可看成由4个部分组成:位图文件头(bitmap-file header)、位图信息头(bitmap-information header)、调色板(palette)和实际位图数据(imagedata),它具有如下所示的形式。
2. 图像统计参数:最大值,最小值,均值,直方图图象的灰度统计直方图是1个1-D 的离散函数: 1, ,1 ,0)(−==L k nn f p k k f "(1)函数说明:f 为图象f (x , y )的第k 级灰度值,最大值为255,最小值为0;平均值为122。
程序运行图如下:直方图如下:直方图均衡:可以看到,此时图像的对比度明显增强了,比如指关节处明显更清晰了。
此时直方图为:可以看到,此时直方图明显伸展了很多。
中值滤波:若将中值滤波和直方图均衡结合起来,则有:Sobel锐化:(这是中值滤波后的图像进行锐化的结果)从上面结果来看,Sobel算子提取物体轮廓的效果很好,非常清晰地展示了手的骨骼形状。
数字图像实验报告

数字图像实验图像的读取,直方图统计,阈值变换一、实验目的通过编程实验完成一幅BMP图像的读取,直方图统计,以及阈值变换功能。
掌握图像读取原理,直方图统计原理以及阈值变换原理。
熟悉VC++的编程环境,能灵活应用此编程环境完成有关数字图像处理的功能。
二、实验环境VC++ 6.0三、实验步骤1.图像读取(1)首先我们需要在VC环境下编写自己的文档程序,能读取BMP图像,在此实验中我们采用DIB类完成图像的读取功能。
打开VC++6.0,构建自己的DIB 函数库,输完后保存为相应的*.h或*.cpp。
在此文档中需要完成绘制DIB对象,创建DIB对象调色板,返回DIB图像象素起始位置,返回DIB宽度,返回DIB高度,返回DIB调色板大小,计算DIB调色板颜色数目,拷贝内存块,将DIB保存到指定文件中,重指定文件中读取DIB对象,将指定的256色DIB对象保存为256色PCX文件,读取256色PCX文件。
此文件的编写为实验的关键,其他步骤都是通过调用其中有关的函数实现有关的功能。
(2)创建一个新工程(以自己的英文名命名),各步骤用缺省设置。
(3)具体程序实现,参考使用DIB读写BMP文件示例,在此过程中我们只需按照书上在相应的类中添加相应的代码。
此步骤需要在source files 文件和header files中各代码中添加。
(4)添加DIBAPI.h和DIBAPI.cpp文件到工程,并把文件拷贝到程序目录下。
如果没有完成此步骤,那么在前面步骤(3)中调用的有关函数将不能被识别,具体的函数功能也不能实现。
此步可以通过工程—添加到工程—文件这三个步骤将所需要的文件添加到我们所建的工程当中。
(5)添加“重新加载”菜单。
(6)运行程序,打开图像。
打开生成的exe程序,单击文件下拉菜单,单击打开选项按钮,选择BMP图片文件,即可完成图像的读取功能。
2.直方图统计灰度直方图是反映一幅图像中各灰度级与各灰度级像素出现的频率之间的关系,它概括的反映了一幅图像的灰度级内容和图像可观的信息。
BMP图像的读写(8位和24位)

南通大学计算机科学与技术学院《数字图像处理》课程实验报告书实验名BMP文件的读写(8位和24位)班级计121姓名张进学号**********2014年6月16 日一、实验内容1、了解BMP文件的结构2、8位位图和24位位图的读取二、BMP图形文件简介BMP(Bitmap-File)图形文件是Windows采用的图形文件格式,在Windows环境下运行的所有图象处理软件都支持BMP图象文件格式。
Windows系统内部各图像绘制操作都是以BMP为基础的。
Windows 3.0以前的BMP图文件格式与显示设备有关,因此把这种BMP图象文件格式称为设备相关位图DDB(device-dependent bitmap)文件格式。
Windows 3.0以后的BMP图象文件与显示设备无关,因此把这种BMP图象文件格式称为设备无关位图DIB(device-independent bitmap)格式(注:Windows 3.0以后,在系统中仍然存在DDB位图,象BitBlt()这种函数就是基于DDB位图的,只不过如果你想将图像以BMP格式保存到磁盘文件中时,微软极力推荐你以DIB格式保存),目的是为了让Windows能够在任何类型的显示设备上显示所存储的图象。
BMP位图文件默认的文件扩展名是BMP或者bmp(有时它也会以.DIB或.RLE作扩展名)。
位图文件可看成由4个部分组成:位图文件头(bitmap-file header)、位图信息头(bitmap-information header)、彩色表(color table)和定义位图的字节阵列,它具有如下所示的形式。
位图文件结构内容摘要三、读写涉及的原理1、图像的二值化的基本原理图像的二值化处理就是讲图像上的点的灰度置为0或255,也就是讲整个图像呈现出明显的黑白效果。
即将256个亮度等级的灰度图像通过适当的阀值选取而获得仍然可以反映图像整体和局部特征的二值化图像。
数字图像实验报告

数字图像实验报告数字图像实验报告引言:数字图像处理是一门涉及计算机科学和电子工程的学科,它通过对图像进行数字化处理,实现对图像的分析、增强和改变。
本实验报告旨在介绍数字图像处理的基本概念和实验结果,以及对实验结果的分析和讨论。
一、实验目的本次实验的主要目的是了解数字图像处理的基本原理和方法,通过实践掌握常见的图像处理技术,并对实验结果进行分析和评估。
二、实验过程1. 图像获取在本次实验中,我们使用了一张自然风光的彩色图像作为实验对象。
这张图像包含了丰富的颜色和细节,能够很好地展示数字图像处理的效果。
2. 图像预处理在进行图像处理之前,我们需要对图像进行预处理,以便更好地进行后续处理。
预处理包括图像去噪、增强和边缘检测等步骤。
我们使用了常见的滤波算法对图像进行去噪处理,然后使用直方图均衡化技术对图像进行增强,最后使用边缘检测算法提取图像的边缘信息。
3. 图像分割图像分割是将图像分成若干个具有独立特征的区域的过程。
我们使用了基于阈值的分割方法对图像进行分割,通过调整阈值的大小,可以得到不同的分割结果。
4. 特征提取特征提取是从图像中提取出具有代表性的特征,用于进一步分析和处理。
我们使用了常见的特征提取算法,如边缘检测、角点检测和纹理特征提取等,从图像中提取出了边缘、角点和纹理等特征。
5. 图像重建图像重建是将经过处理的图像恢复到原始状态的过程。
我们使用了图像插值算法对图像进行重建,通过插值算法,可以将图像的分辨率提高,从而得到更清晰的图像。
三、实验结果经过以上的处理步骤,我们得到了一系列经过处理的图像。
通过对比原始图像和处理后的图像,我们可以看到图像处理对图像的改变和影响。
在图像去噪和增强的过程中,我们成功地去除了图像中的噪声,并增强了图像的对比度和细节。
在图像分割和特征提取的过程中,我们成功地将图像分割成若干个具有独立特征的区域,并提取出了图像的边缘、角点和纹理等特征。
在图像重建的过程中,我们成功地提高了图像的分辨率,得到了更清晰的图像。
数字图像处理实验报告

数字图像处理实验报告数字图像处理实验报告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 bfReserved1bfReserved2bfOffBitsbiSizebiWidthbiHeightbiPlanesbiBitCountbiCompressionbiSizeImagebi_PelsPerMeterbiYPelsPerMeterbiClrUsedbiClrImportant单色DIB有2个表项16色DIB有16个表项或更少256色DIB有256个表项或更少真彩色DIB没有调色板每个表项长度为4字节(32位)像素按照每行每列的顺序排列每一行的字节数必须是4的整数倍BITMAPINFOHEADER 位图信息头 Palette 调色板 DIB Pi_els 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 图像的几何变换图像的几何变换,通常包括图像的平移、图像的镜像变换、图像的转置、图像的缩放和图像的旋转等.一、实验的目的和意义实验目的:本实验内容旨在让学生通过用VC等高级语言编写数字图像处理的一些基本算法程序,来巩固和掌握图像处理技术的基本技能,提高实际动手能力,并通过实际编程了解图像处理软件的实现的基本原理。
数字图像处理实验报告图像处理

数字图像处理实验报告图像处理数字图像处理实验报告实验报告书实验类别数字图像处理学院信息工程学院专业通信工程班级通信1005班姓名叶伟超指导教师聂明新2013 年 6 月 3 日篇二:数字图像处理实验报告数字图像处理实验报告课程:班级:学号:姓名:指导老师:日期:实验一内容一MATLAB数字图像处理初步一、实验目的与要求1.熟悉及掌握在MATLAB中能够处理哪些格式图像。
2.熟练掌握在MATLAB中如何读取图像。
3.掌握如何利用MATLAB来获取图像的大小、颜色、高度、宽度等等相关信息。
4.掌握如何在MATLAB中按照指定要求存储一幅图像的方法。
5.图像间如何转化。
二、实验内容及步骤1.利用imread( )函数读取一幅图像,假设其名为flower.tif,存入一个数组中;解:读取图像,存入数组I中:I = imread('flower.tif');2.利用whos 命令提取该读入图像flower.tif的基本信息;解:查询数组I的信息:3.利用imshow()函数来显示这幅图像;解:因为imshow()方法不能直接显示tif图像矩阵,因此要先转换成RGB模式,再调用imshow()显示。
代码如下:I1 = I(:,:,1);I2 = I(:,:,2);I3 = I(:,:,3);RGB = cat(3,I1,I2,I3);imshow(RGB);显示的图像为:4.利用imfinfo函数来获取图像文件的压缩,颜色等等其他的详细信息;解:代码如下:imfinfo('flower.tif')结果截图:5.利用imwrite()函数来压缩这幅图象,将其保存为一幅压缩了像素的jpg文件,设为flower.jpg;语法:imwrite(原图像,新图像,‘quality’,q), q取0-100。
解:代码:imwrite(RGB,'flower.jpg','quality',80);结果截图:6.同样利用imwrite()函数将最初读入的tif图象另存为一幅bmp 图像,设为flower.bmp。
数字图像实验源程序及实验结果

实验一图像采集和MATLAB7.01使用1.实验目的:(1)了解图像采集的硬件设备,获取一幅自己的头像(*.bmp),作为后续实验的一个图像源;(2)练习MATLAB的一般使用,为其它几个实验做准备。
2.实验内容:(1)利用图像采集系统获取图像;(2)编写一个MATLAB程序对获取的图像文件(*.bmp)进行读写、显示和改变颜色、统计直方图等操作。
同时练习这里给出的各种函数的用法。
更详细的操作请参考讲解MATLAB使用的相关书籍或者该软件的在线帮助文件。
3.实验要求:编写一完整的MATLAB程序。
这里完整的MATLAB程序是指该程序应有一个用户界面窗口,读入的图像文件应显示在界面窗口里,在界面窗口中可以设置几个按钮,分别完成对所显示的图像进行上面(二)中所要求的操作。
请保留该程序,后面的四个实验所编的程序都要求与此程序集成起来,提供一个统一的操作界面。
4.实验程序I=imread('E:\meitu_00001.bmp');subplot(2,2,1);imshow(I);J=rgb2gray(I);subplot(2,2,2);imshow(J);ave = mean2(J);SD=std2(double(J));s=size(J);a=255*ones(s(1),s(2));b=uint8(a);K=imsubtract(b,J);subplot(2,2,3);imshow(K);subplot(2,2,4);imhist(J);实验结果:5.实验总结通过这次MATLAB实验,我们学会对获取图像进行简单的处理,如,输入输出图像,对图像进行去彩,泛白,直方图等基本操作。
了解了MATLAB 工具的基本用途,对这一图像处理软件有了一定的认识。
了解了一下MATLAB 软件所包括的函数,方便更好的学习软件。
实验二一、图像加噪去噪实验1.实验目的:利用中值滤波和均值滤波对有噪声的图像进行去噪处理。
数字图像处理 实验报告(完整版)

数字图像处理实验一 MATLAB数字图像处理初步一、显示图像1.利用imread( )函数读取一幅图像,假设其名为lily.tif,存入一个数组中;2.利用whos 命令提取该读入图像flower.tif的基本信息;3.利用imshow()函数来显示这幅图像;实验结果如下图:源代码:>>I=imread('lily.tif')>> whos I>> imshow(I)二、压缩图像4.利用imfinfo函数来获取图像文件的压缩,颜色等等其他的详细信息;5.利用imwrite()函数来压缩这幅图象,将其保存为一幅压缩了像素的jpg文件,设为lily.jpg;语法:imwrite(原图像,新图像,‘quality’,q), q取0-100。
6.同样利用imwrite()函数将最初读入的tif图象另存为一幅bmp图像,设为flily.bmp。
7.用imread()读入图像Sunset.jpg和Winter.jpg;8.用imfinfo()获取图像Sunset.jpg和Winter.jpg的大小;9.用figure,imshow()分别将Sunset.jpg和Winter.jpg显示出来,观察两幅图像的质量。
其中9的实验结果如下图:源代码:4~6(接上面两个) >>I=imread('lily.tif')>> imfinfo 'lily.tif';>> imwrite(I,'lily.jpg','quality',20);>> imwrite(I,'lily.bmp');7~9 >>I=imread('Sunset.jpg');>>J=imread('Winter.jpg')>>imfinfo 'Sunset.jpg'>> imfinfo 'Winter.jpg'>>figure(1),imshow('Sunset.jpg')>>figure(2),imshow('Winter.jpg')三、二值化图像10.用im2bw将一幅灰度图像转化为二值图像,并且用imshow显示出来观察图像的特征。
实验一bmp位图的读取、显示、放大缩小、二值化和反色

(数字图像处理)实验报告实验名称实验一bmp位图的读取、显示、放大缩小、二值化和反色实验时间专业班级学号姓名成绩教师评语:一、实验目的1、掌握windows BMP格式位图文件的基本格式。
会使用VC++读取图像数据并显示。
2、在读取BMP格式位图的的基础上增加对图像的放大、缩小、二值化和反色的功能。
二、实验内容1、在VC6.0环境下,生成MFC应用程序框架。
2、在已生成的应用程序中,加BMP位图读取与显示的代码,从已有文件中读取bmp格式文件并在视图中显示。
3、在生成的MFC应用程序框架下建立对应的消息响应函数,实现对已在视图中显示的图像的放大、缩小、二值化和反色的具体操作。
三、实验原理具体操作步骤及结果截图基本原理:BMP位图文件格式BMP位图文件中主要由4部分内容组成:1、文件头BITMAPFILEHEADER为一STRUCTURE:typedef struct tagBITMAPFILEHEADER {WORD bfType;//文件类型,必须为“BM”或0x424dDWORD bfSize;//文件大小WORD bfReserved1;//保留WORD bfReserved2;//保留DWORD bfOffBits;//从文件头到实际位图数据的偏移字节数} BITMAPFILEHEADER, FAR *LPBITMAPFILEHEADER, *PBITMAPFILEHEADER;2、位图信息头BITMAPINFOHEADER,定义如下:typedef struct tagBITMAPINFOHEADER{DWORD biSize;//structure sizeLONG biWidth;//image widthLONG biHeight;//image heightWORD biPlanes;//value is 1WORD biBitCount;//color bitsDWORD biCompression;//compression or notDWORD biSizeImage;//Imagesize=width*height( 其中width必须为4的倍数。
数字图象处理实验报告

实验一图像处理入门实验:图像生成及取反1.实验目的了解matlab有关图像的基本操作,如图像的读写,显示等。
熟悉调试环境。
2.实验步骤1.Matlab workspace中生成一幅大小为512×512像素的8位灰度图, 背景为黑色,中心有一个宽40像素高20像素的白色矩形。
如下图所示:2.将这幅图像保存为文件test.bmp。
3.从文件test.bmp中读出图像到变量I。
4.在Matlab图形界面中显示变量I所代表的图像。
5.将获得的图像的格式分别转换为“*.tif”、“*.jpg”的格式保存,检查图像文件数据量的大小。
6.将图片保存或拷贝到MA TLAB程序组根目录的“work”文件夹中,以便后面的实验利用。
7.将test.bmp 编程取反,观察效果。
3.整理和记录实验报告3实验源码(1)图像生成B=zeros(512,512)(2) 在图像中生成宽40像素高20像素的白色矩形for i=246:266for j=226:266B(i,j)=1;endend(3)图像保存imwrite(B,'test.bmp')(4)读出图像到变量I并另存为“*.tif”、“*.jpg”的格式e=imread('test.bmp')imshow(e)imwrite(e,'test.tif')imwrite(e,'test.jpg')test BMP图像258Ktest jpg图像4K(5)将test.bmp 编程取反a=imcomplement(e)imshow(a)imwrite(a,’tag.bmp’)imwrite(a,’tag.jpg’)test BMP图像258Ktest jpg 图像5K实验二图像亮(灰)度变换1.实验目的灰度变换是图像增强的一种重要手段,使图像对比度扩展,图像更加清晰,特征更加明显。
灰度级的直方图给出了一幅图像概貌的描述,通过修改灰度直方图来得到图像增强。
数字图像实验报告

姓名:学号:班级:指导老师:实验时间:2012年06 月随着数字技术和数字计算机技术的飞速发展,数字图像技术在进20年的时间里,迅速成为一门独立的有强大生命力的学科,其应用领域十分的广泛。
图像是人类获取信息的重要手段,应用数字图像处理技术合理的图像进行处理,不仅能够增强图像的观赏性,同时也是我们获取那些肉眼无法直接感知的一种普遍方法。
本文是在基于C++ builder的平台对BMP文件通过建立一个工程然后编写基本功能模块,然后对数字图像进行的处理。
一、实验目的:1、熟悉c++builder平台基本使用方法;在此基础上利用c++builder平台编写一个数字图像处理的应用程序;2、掌握数字图像处理基本方法和原理;并利用c++Builder开发语言编写基本模块,实现对数字图像的处理,特别是对图像进行图像分割处理和图像增强处理;3、在c++builder程序模块实现数字图像处理的基础上,学会分析实验的结果;判断实验结果是否符合实验的原理;二、实验原理:BMP文件是在Microsoft Windows下使用的图像文件格式,它由位图文件头,位图信息,像素数据3部分的组成。
位图信息又由位图信息头和调色板数据组成,调色板数据的多少与图像所用的色彩数有关,它的字节数是色彩的四倍,每个调色板的前三个字节分别表示彩色的蓝、绿、红分量,第四个字节备用。
C++Builder是一款基于Windows操作系统的面向对象的程序开发环境,它具有强大的视化开发能力,含有众多可以直接使用的VCL组建;比较适合于做数字图像处理。
利用c++Builder平台对数字图像进行处理就是对数字图像说存储的像素的数据进行处理。
本文处理的像素的灰度值是8位,即256个灰度等级。
本工程就数字图像处理的基本技术选取了一下几个功能模块,下面对这几个功能模块的实验的基本原理做一个简单概述:1、数字图像的点处理:我们知道数字图像存储了每一个像素的值,我们可以通过访问它的存储单位来修改它的像素值,已达到对数字图像的点处理。
数字图像BMP实验报告

数字图像处理实验1 BMP文件读写实验报告姓名:***学号:********指导教师:***目录一、实验要求: (3)二、实验环境: (3)三、实验代码及结果: (4)1、实验1 (4)实验代码: (4)原图像: (5)输出结果: (6)2、实验2 (7)实验代码 (7)原图像: (8)输出图像: (9)3、实验3 (10)实验代码: (10)原图像: (12)输出图像: (13)四、实验总结: (14)一、实验要求:1、打开1.BMP文件,输出图像中任意一个为5*5矩形区域对应的图像数据,并以文本文件的方式输出。
进入图像处理系统,打开1.BMP,验证程序输出结果。
2、打开1.BMP文件,改变以下矩形区域对应的图像数据为0(或255)(height/3,width/3)(height*2/3,width*2/3)输出新的图像文件2.BMP。
进入图像处理系统,打开2.BMP,检查修改结果是否正确。
3、打开 1.BMP文件,将图像宽度和高度进行延拓,宽度变为width+20,图像高度变为height+15,延拓部分置0(或255)。
并输出新的图像文件3.BMP,进入图像处理系统,打开3.BMP,检查结果是否正确。
二、实验环境:VC6++三、实验代码及结果:1、实验1实验代码:#include<stdio.h>#define rows 512//行#define cols 512//列typedef struct P{unsigned char B,G,R;}PIXEL;int main(){int i,j;PIXEL nowP[rows][cols];FILE *fp,*fout;fp=fopen("Lenna.bmp","rb");fout=fopen("1.txt","w");char filehead[54];fread(filehead,1,54,fp);fread(nowP,3,rows*cols,fp);for(i=0;i<5;i++){for(j=0;j<5;j++)fprintf(fout,"(%d,%d,%d)",nowP[i][j].R,nowP[i][j].G,nowP[i][j].B);fprintf(fout,"\n");}fclose(fp);fclose(fout);return 0;}原图像:输出结果:2、实验2实验代码#include <stdio.h>#define rows 512#define cols 512typedef struct P{unsigned char B,G,R;}PIXEL;int main(){int i,j;FILE *fp,*fout;char filehead[54];PIXEL nowP[rows][cols];fp=fopen("Lenna.bmp","rb");fout=fopen("2.bmp","wb");fread(filehead,1,54,fp);fread(nowP,3,rows*cols,fp);for(i=rows/3;i<rows*2/3;i++) for(j=0;j<cols*2/3;j++){nowP[i][j].R=0;nowP[i][j].G=0;nowP[i][j].B=0;}fwrite(filehead,54,1,fout);fwrite(nowP,3,rows*cols,fout);fclose(fp);fclose(fout);return 0;}原图像:输出图像:3、实验3实验代码:#include <stdio.h>#include "windows.h"#define rows 512#define cols 512struct pixel{unsigned char B,G, R;}nowP[rows][cols],newP[rows+15][cols+20];int main(){int i,j;FILE *fp,*fout;unsigned char old[54],new[54];pixel pp;fp=fopen("Lenna.bmp","rb");fout=fopen("3.bmp","wb");fread(&old,1,54,fp);for(i=0;i<54;i++)new[i]=old[i]; new[18]=new[18]+20;new[22]=new[22]+15;fwrite(&new1,1,54,fout);fread(&nowP,1,3*rows*cols,fp); for(i=0;i<rows;i++)for(j=0;j<cols;j++){newP[i][j].B=nowP[i][j].B;newP[i][j].G=nowP[i][j].G;newP[i][j].R=nowP[i][j].R;}for(i=rows;i<rows+15;i++){for(j=cols;j<cols+20;j++){newP[i][j].B=0;newP[i][j].G=0;newP[i][j].R=0;}}fclose(fp);fwrite(newP[0],1,3*(rows+20)*(cols+15),fout);fclose(fout);return 0;}原图像:输出图像:四、实验总结:这次实验分为三个内容,前两个实验基本上是研究生学长带领我们一步一步地进行操作,编程和图像处理,每一步操作、每一行代码的意义和思想,助教都给我们讲的非常透彻,在进行前两个实验的时候基本上没有遇到什么问题。
程序设计实践报告BMP

实验报告——第二次程序设计实践:DIB图像处理姓名:学院:信息与通信工程学院学号:班级:111111.工程环境:a)操作系统:Windows 10b)开发环境:Visual Studio 2013 Ultimatec)项目类型:Win32程序2.主要程序流程3.数据与操作:总的来说,用户操作、图像数据结构、图像操作对象是相互独立、开放的三大模块。
菜单用于输入输出原始数据流,或是操纵图像处理;数据结构方便统一管理所有DIB单元结构体间的关系链,可以直接存取这些单元数据;操作类对象首先要Link一个结构体以初始化常用数据,方便随后处理。
4.数据结构、功能扩展:在满足原有图像处理的基础上增加新功能a)数据扩展:在基础结构中存放一个万能指针void*,要增加新的属性时,只需要在源文件中添加新的结构体,在主要函数中完成新结构体的创建和赋值,再令基础结构体中的扩展指针ext指向新结构体,就完成了属性添加,并且无需大幅度更动基础结构体内容,便完成了数据扩展。
b)函数功能扩展:在满足“里氏代换”原则基础上,即基类出现的地方以子类替代仍然保证程序正常运作,通过原始基类继承出新的派生类,保留原始接口同时增加新的接口,实现功能扩展。
1.图像处理DIBProcess模块:A.图像数据结构体BMFHB.图像数据结构体BMIHC.图像数据结构体RGBQUADD.图像数据结构体DIBUnitE.矩阵模板类MatrixF.图像处理基类DIBProcG.图像处理派生扩展类DIBProcEx2.内存DC模块MemoryDC3.小型内存池管理类MemoryPoolA.页结点结构体B.块结点结构体C.检验节点结构体D.内存管理类E.应用示意图4.主函数模块(主要是功能相关性模块)A.主要头文件B.主要全局量C.主要功能性函数声明D.菜单功能设计a)文件b)导航c)操作d)HSL空间操作b)获取像素数组的字节大小srcSize,有几种方法:i.srcSize = bmfh.bfSize - bmfh.bfOffBits; //即总大小减偏移量ii.srcSize = bmih.biHeight * cxBytes; //即高度乘以实际宽度iii.教训!最好不要根据bmih.biImageSize属性直接得到图的总大小,许多24位图的biImageSize属性值为0。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数字图像处理
实验1 BMP文件读写
实验报告
姓名:***
学号:********
指导教师:***
目录
一、实验要求: (3)
二、实验环境: (3)
三、实验代码及结果: (4)
1、实验1 (4)
实验代码: (4)
原图像: (5)
输出结果: (6)
2、实验2 (7)
实验代码 (7)
原图像: (8)
输出图像: (9)
3、实验3 (10)
实验代码: (10)
原图像: (12)
输出图像: (13)
四、实验总结: (14)
一、实验要求:
1、打开1.BMP文件,输出图像中任意一个为5*5矩形区域对应
的图像数据,并以文本文件的方式输出。
进入图像处理系统,
打开1.BMP,验证程序输出结果。
2、打开1.BMP文件,改变以下矩形区域对应的图像数据为0(或
255)(height/3,width/3)(height*2/3,width*2/3)输出新的图像文件2.BMP。
进入图像处理系统,打开2.BMP,检查修改结果是否正确。
3、打开 1.BMP文件,将图像宽度和高度进行延拓,宽度变为
width+20,图像高度变为height+15,延拓部分置0(或255)。
并输出新的图像文件3.BMP,进入图像处理系统,打开3.BMP,检查结果是否正确。
二、实验环境:
VC6++
三、实验代码及结果:
1、实验1
实验代码:
#include<stdio.h>
#define rows 512//行
#define cols 512//列
typedef struct P
{
unsigned char B,G,R;
}PIXEL;
int main()
{
int i,j;
PIXEL nowP[rows][cols];
FILE *fp,*fout;
fp=fopen("Lenna.bmp","rb");
fout=fopen("1.txt","w");
char filehead[54];
fread(filehead,1,54,fp);
fread(nowP,3,rows*cols,fp);
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
fprintf(fout,"(%d,%d,%d)",nowP[i][j].R,nowP[i][j].G,nowP[i][j].B);
fprintf(fout,"\n");
}
fclose(fp);
fclose(fout);
return 0;}
原图像:
输出结果:
2、实验2
实验代码
#include <stdio.h>
#define rows 512
#define cols 512
typedef struct P
{
unsigned char B,G,R;
}PIXEL;
int main()
{
int i,j;
FILE *fp,*fout;
char filehead[54];
PIXEL nowP[rows][cols];
fp=fopen("Lenna.bmp","rb");
fout=fopen("2.bmp","wb");
fread(filehead,1,54,fp);
fread(nowP,3,rows*cols,fp);
for(i=rows/3;i<rows*2/3;i++) for(j=0;j<cols*2/3;j++)
{
nowP[i][j].R=0;
nowP[i][j].G=0;
nowP[i][j].B=0;
}
fwrite(filehead,54,1,fout);
fwrite(nowP,3,rows*cols,fout);
fclose(fp);
fclose(fout);
return 0;}
原图像:
输出图像:
3、实验3
实验代码:
#include <stdio.h>
#include "windows.h"
#define rows 512
#define cols 512
struct pixel
{
unsigned char B,G, R;
}nowP[rows][cols],newP[rows+15][cols+20];
int main()
{
int i,j;
FILE *fp,*fout;
unsigned char old[54],new[54];
pixel pp;
fp=fopen("Lenna.bmp","rb");
fout=fopen("3.bmp","wb");
fread(&old,1,54,fp);
for(i=0;i<54;i++)new[i]=old[i]; new[18]=new[18]+20;
new[22]=new[22]+15;
fwrite(&new1,1,54,fout);
fread(&nowP,1,3*rows*cols,fp); for(i=0;i<rows;i++)
for(j=0;j<cols;j++)
{
newP[i][j].B=nowP[i][j].B;
newP[i][j].G=nowP[i][j].G;
newP[i][j].R=nowP[i][j].R;
}
for(i=rows;i<rows+15;i++)
{
for(j=cols;j<cols+20;j++)
{
newP[i][j].B=0;
newP[i][j].G=0;
newP[i][j].R=0;
}
}
fclose(fp);
fwrite(newP[0],1,3*(rows+20)*(cols+15),fout);
fclose(fout);
return 0;
}
原图像:
输出图像:
四、实验总结:
这次实验分为三个内容,前两个实验基本上是研究生学长带领我们一步一步地进行操作,编程和图像处理,每一步操作、每一行代码的意义和思想,助教都给我们讲的非常透彻,在进行前两个实验的时候基本上没有遇到什么问题。
第三个实验研究生学长要求我们自己独立完成任务,我在尝试的一开始遇到了困难,编译出现许多错误。
不过还算比较好的是在经过助教的些许提示之后我还是比较快的找到了有效的解决方法,最终在经过好几次尝试后我终于正确地处理了图像。
通过此次数字图像处理实验,我进一步熟悉了VC++的使用,同时了解了如何使用编程C语言来进行数字图像的简单处理。
总体来说,此次实验让我对数字图像处理的方法有了更深刻的认识,这对我今后的数字图像处理方面有着不少的帮助,今后的实验一定会更难,但我有信心能把它们都完成好。