数字图像处理实习报告
- 格式:doc
- 大小:143.00 KB
- 文档页数:15
图像处理实习报告篇一:数字图像处理实习报告目录1、图像直方图实验 (1)2、图像的傅立叶变换实验 .......................................... 23、直方图均衡化实验 .................................................. 5 4.图像空间平滑实验 .................................................. 6 5.图像空间锐化实验.................................................. 8 6、图像分割实验-.................................................... 12 7、图像分割实验二 (17)1、图像直方图实验一、实验目的1.在ENVI软件中观察图像的灰度直方图,结合图像掌握直方图的性质和应运。
2.学有余力的同学可采用自己熟悉的开发语言如matlab,IDL等自己制作图像的灰度直方图。
二、实验素材ENVI软件,图像三、实验原理灰度直方图反映的是灰度级函数,描述的是图像中该灰度级的像素个数,它是图像的重要特征之一,反映了图像灰度分布情况。
任何一张图像都对应着唯一的灰度直方图,但不同的图像可以对应相应的直方图,可以用实验来验证。
四、实验过程下图为实验步骤截图:1五、实验心得:通过本次试验学会在Envi软件中查看图像的灰度直方图,在灰度直方图上,准确的反映了图像灰度分布的情况。
2、图像的傅立叶变换实验一、实验目的理解傅立叶变换的原理和傅里叶变换的使用,掌握运用ENVI进行傅立叶变换及频率域平滑和锐化的步骤和方法。
二、实验素材2Envi 软件,图像三、实验原理傅立叶变换原理:连续:反变换:F{f(x)}?F(u)??f(x)e?j2?uxdxj?1f(x)?F?1{F(u)}??F(u))ej2?uxdu1F(u)?N离散:f(x)?反变换:x?0N?1f(x)e?j2?ux/Nj2?ux/NN?1x?0F(u)e四、实验过程:利用傅立叶变换方法进行图像异常(高频)信息提取:1、打开ENVI4.7,单击FILE菜单,在下拉菜单中选择open image file 选项,单击打开自己的图像文件。
遥感数字图像处理教程实习报告《数字图像处理》课程实习报告( 2011 - 2012学年第 1 学期)专业班级:地信09-1班姓名:梁二鹏学号:310905030114指导老师:刘春国----------------------------------------------实习成绩:教师评语:教师签名:年月日实习一:图像彩色合成实习一、实验目的在学习遥感数字图像彩色合成基础上,应用所学知识,基于遥感图像处理软件ENVI进行遥感数字图像彩色合成。
二、实验内容彩色合成:利用TM图像can_tmr.img,实现灰度图像的密度分割、多波段图像的真彩色合成、假彩色合成和标准假彩色合成。
三、实验步骤1、显示灰度图像主要步骤:1、打开ENVI4.7,单击FILE菜单,在下拉菜单中选择open image file 选项,然后在弹出的对话框中选择can_tmr.img文件,单击打开。
2、在可用波段列表对话框中,选中某一波段图像,选中gray scale单选按钮,单击LOAD BAND按钮,显示一幅灰度图像。
3、在可用波段列表对话框中,选择其他某一波段图像,进行显示。
4、利用可用波段列表中的display按钮,同时有多个窗口显示多个波段图像。
5、链接显示。
利用图像窗口tool菜单下的link子菜单link display实现多图像的链接显示。
如图所示:红色方框。
6、使用tool菜单下的Cursor Location/value和pixel Locator功能在确定像素的值和位置。
2、伪彩色合成的主要步骤:1、打开ENVI4.7,单击FILE菜单,在下拉菜单中选择open image file 选项,然后在弹出的对话框中选择can_tmr.img 文件,单击打开。
2、在可用波段列表对话框中,选中gray scale单选按钮,单击LOAD BAND 按钮3、在#1 TM BAND1:CAN_TMR.IMG对话框中,单击菜单栏上的OVERLAY 菜单,在下拉菜单中选择DENSITY SLICE…按钮,在弹出的对话框中选择任意一个波段名称,4、在弹出的对话框中显示系统默认的密度分割,通过定义MIN和max的值可以定义需要分割的密度范围,通过EDIT RANGE ,deleted range,clear ranges 三个按钮可以对默认的分割进行修改,待修改完毕后,单击APPLY按钮,即可显示修改后的效果。
数字图像处理课程综合实习实习报告学院班级学号姓名日期指导教师一、实习目的和意义本实习内容旨在让同学们通过用VC等高级语言编写数字图像处理的一些基本算法程序,来巩固和掌握图像处理技术的基本技能,提高实际动手能力,并通过实际编程了解图像处理软件的实现的基本原理。
为学生进一步学习数字摄影测量、遥感和地理信息系统等专业课程以及应用图像处理解决实际问题奠定基础。
二、实习原理和方法实习一实现RAW->BMP格式的转换RAW格式:文件按照数字图像组成的二维矩阵,将像素按行列号顺序存储在文件中。
这种文件只含有图像像素数据,不含有信息头,因此,在读图像时,需要根据文件大小,计算图像所包含的行列号,或者需要事先知道图像大小(矩阵大小)。
但这种文件读取和保存简单。
RAW文件按图像上行到下行、左列到右列顺序存储,而BMP文件数据区按图像上下行到上行、左列列到右列顺序存储到数据区。
实现RAW文件到BMP文件的转换,需要为BMP文件生成文件头、信息头、颜色表、数据区,将RAW文件数据区赋值到BMP文件数据区。
实习二灰度线性变换点运算是指像素值(即像素点上的灰度值)通过运算改变之后,可以改善图象的显示效果。
这是一种像素的逐点运算,是旧图象与新图象之间的映射关系,是一种简单但却十分有效的一种图象处理手段。
常用方法有灰度线性变换、直方图均衡、对比度调整、直方图规定化、对数变换、指数变换、密度分割等方法。
灰度的线性变换就是指图像的中所有点的灰度按照线性灰度变换函数进行变换。
灰度变换方程如下:D0=f(Di)=a*Di+b该方程为线性方程。
式中参数Di为输入图像的像素的灰度值,参数D0为输出图像的灰度,a和b由给定条件确定。
实习三图像局部处理:高通滤波和低通滤波局部处理在处理某一像素时,利用与该像素相邻的一组像素,经过某种变换得到处理后图像中某一点的像素值。
目标像素的邻域一般是由像素组成的二维矩阵,该矩阵的大小为奇数,目标像素位于该矩阵的中央,即目标像素就是区域的中心像素。
数字图像处理实验报告数字图像处理实验报告(一)实验目的1.理解数字图像处理的基本概念与原理。
2.掌握数字图像处理的基本方法。
3.掌握常用数字滤波器的性质和使用方法。
4.熟练应用数字图像处理软件进行图像处理。
实验器材计算机、MATLAB软件实验内容1.图像的读写与显示首先,我们需要在MATLAB中读入一幅图像,并进行显示。
% 导入图像文件I = imread('myimage.jpg');% 显示图像imshow(I);2.图像的分辨率与色彩空间转换数字图像处理中的一个重要概念是图像的分辨率,通常用像素数量表示。
图像的分辨率越高,代表着图像包含更多的像素,从而更具细节和清晰度。
在数字图像处理中,常常需要将一幅图像从一种色彩空间转换为另一种色彩空间。
RGB色彩空间是最常见的图像色彩空间之一,并且常常作为其他色彩空间的基础。
% 转换图像色彩空间J = rgb2gray(I);% 显示转换后的图像imshow(J);3.图像的增强与滤波图像的增强通常指的是对图像的对比度、亮度和清晰度等方面进行调整,以改善图像的质量和可读性。
数字图像处理中的滤波是一种常用的图像增强方法。
滤波器是一个能够对图像进行局部操作的矩阵,它能够提取或抑制特定的图像特征。
% 对图像进行平滑滤波K = imgaussfilt(J, 1);% 显示滤波后的图像imshow(K);4.数字图像处理在实际应用中的例子数字图像处理在很多实际应用中被广泛应用。
这些应用包括医疗成像、计算机视觉、人脸识别、安防监控等。
下面是数字图像处理在人脸识别应用中的一个简单例子。
% 导入图像文件I = imread('face.jpg');% 进行人脸检测faceDetector = vision.CascadeObjectDetector;bbox = step(faceDetector, I);% 在图像上标记人脸位置IFaces = insertObjectAnnotation(I, 'rectangle', bbox, 'Face');imshow(IFaces);实验结论通过本次实验,我已经能够理解数字图像处理的基本概念与原理,掌握数字图像处理的基本方法,熟练应用数字图像处理软件进行图像处理。
数字图像处理实验报告数字图像处理实验报告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 bfReserved1bfReserved2bfOffBitsbiSizebiWidthbiHeightbiPlanesbiBitCountbiCompressionbiSizeImagebiXPelsPerMeterbiYPelsPerMeterbiClrUsedbiClrImportant单色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 图像的几何变换图像的几何变换,通常包括图像的平移、图像的镜像变换、图像的转置、图像的缩放和图像的旋转等.数字图像处理实验报告2一、实验的目的和意义实验目的:本实验内容旨在让学生通过用VC等高级语言编写数字图像处理的一些基本算法程序,来巩固和掌握图像处理技术的基本技能,提高实际动手能力,并通过实际编程了解图像处理软件的实现的基本原理。
《数字图像处理》实验报告数字图像处理是一门将图像进行数字化处理的学科,它通过计算机算法和技术手段对图像进行分析、增强、压缩和重建等操作。
在本次实验中,我们学习了数字图像处理的基本概念和常用算法,并通过实验来探索其应用和效果。
首先,我们进行了图像的读取和显示实验。
通过使用Python中的OpenCV库,我们能够轻松地读取图像文件,并将其显示在屏幕上。
这为我们后续的实验奠定了基础。
同时,我们还学习了图像的像素表示方法,了解了图像由像素点组成的原理。
这使我们能够更好地理解后续实验中的算法和操作。
接下来,我们进行了图像的灰度化实验。
灰度化是将彩色图像转换为灰度图像的过程。
在实验中,我们使用了不同的算法来实现灰度化操作,包括平均值法、最大值法和加权平均法等。
通过比较不同算法得到的灰度图像,我们发现不同算法对图像的处理效果有所差异,这使我们深入理解了灰度化的原理和应用。
随后,我们进行了图像的直方图均衡化实验。
直方图均衡化是一种用于增强图像对比度的方法。
在实验中,我们使用了直方图均衡化算法来对图像进行处理,并观察了处理前后的效果变化。
通过实验,我们发现直方图均衡化能够显著提高图像的对比度,使图像更加清晰和鲜明。
在进一步探索图像处理技术的过程中,我们进行了图像的滤波实验。
滤波是一种常用的图像处理操作,它通过对图像进行卷积操作来实现。
在实验中,我们学习了不同类型的滤波器,包括均值滤波器、高斯滤波器和中值滤波器等。
通过比较不同滤波器对图像的处理效果,我们发现每种滤波器都有其适用的场景和效果。
此外,我们还进行了图像的边缘检测实验。
边缘检测是一种用于提取图像边缘信息的方法。
在实验中,我们学习了不同的边缘检测算法,包括Sobel算子、Canny算子和Laplacian算子等。
通过比较不同算法对图像的处理效果,我们发现每种算法都有其独特的特点和应用。
最后,我们进行了图像的压缩实验。
图像压缩是一种将图像数据进行压缩以减小文件大小的方法。
数字图像处理实验报告(完整版)数字图像处理实验⼀ 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显⽰出来观察图像的特征。
数字图像处理实验报告图像处理数字图像处理实验报告实验报告书实验类别数字图像处理学院信息工程学院专业通信工程班级通信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。
数字图像处理实验报告(五个实验全)实验⼀ Matlab图像⼯具的使⽤1、读图I=imread('lena.jpg');imshow(I);2、读⼊⼀幅RGB图像,变换为灰度图像和⼆值图像,并在同⼀个窗⼝内分成三个⼦窗⼝来分别显⽰RGB图像和灰度图像。
a=imread('lena.jpg')i = rgb2gray(a)I = im2bw(a,0.5)subplot(3,1,1);imshow(a);subplot(3,1,2);imshow(i);subplot(3,1,3);imshow(I);原图像灰度图像⼆值图像实验⼆图像变换1、对⼀幅图像进⾏平移,显⽰原始图像与处理后图像,分别对其进⾏傅⾥叶变换,显⽰变换后结果,分析原图的傅⾥叶谱与平移后傅⾥叶频谱的对应关系。
s=imread('beauty.jpg');i=rgb2gray(s)i=double(i)j=fft2(i);k=fftshift(j); 原图像原图的傅⾥叶频谱l=log(abs(k));m=fftshift(j);RR=real(m);II=imag(m);A=sqrt(RR.^2+II.^2);A=(A-min(min(A)))/(max(max(A)))*255;b=circshift(s,[800 450]);b=rgb2gray(b)b=double(b) 平移后的图像平移后的傅⾥叶频谱c=fft2(b);e=fftshift(c);l=log(abs(e));f=fftshift(c);WW=real(f);ZZ=imag(f);B=sqrt(WW.^2+ZZ.^2);B=(B-min(min(B)))/(max(max(B)))*255;subplot(2,2,1);imshow(s);subplot(2,2,2);imshow(uint8(b));subplot(2,2,3);imshow(A);subplot(2,2,4);imshow(B);2、对⼀幅图像进⾏旋转,显⽰原始图像与处理后图像,分别对其进⾏傅⾥叶变换,显⽰变换后结果,分析原图的傅⾥叶谱与旋转后傅⾥叶频谱的对应关系。
数字图像处理课程综合实习实习报告学院遥感信息工程学院班级 09031学号 2009302590120姓名吴雪薇日期 2011年5月28日指导教师实习一将RAW图像格式转换成BMP图像格式一、实习目的和意义熟悉常用的图像文件格式与格式转换,认识各图像格式的优缺点;掌握RAW和BMP格式的存储和读取,编程实现RAW—〉BMP格式的转换,为读取各种格式文件打基础。
二、实习原理和方法RAW格式:文件按照数字图像组成的二维矩阵,将像素按行列号顺序存储在文件中。
这种文件只含有图像像素数据,不含有信息头,因此,在读图像时,需要根据文件大小,计算图像所包含的行列号,或者需要事先知道图像大小(矩阵大小)。
但这种文件读取和保存简单。
RAW文件按图像上行到下行、左列到右列顺序存储,而BMP文件数据区按图像上下行到上行、左列列到右列顺序存储到数据区。
实现RAW文件到BMP文件的转换,需要为BMP文件生成文件头、信息头、颜色表、数据区,将RAW文件数据区赋值到BMP文件数据区。
三、实习过程和步骤1、根据学号新建自己的文件夹:F:\09031_2009302590120;2、使用AppWizard生成一个基于多文档的项目2009302590120;3、将CxxxxView类的基类设为CscrollView类,使项目显示图像时支持滚动条;4、添加菜单项“RAW-〉BMP”,并建立相应的消息处理函数;5、新建Raw->Bmp对话框,并建立对话框类,为对话框类定义成员变量和成员函数。
6、在函数体内添加自己的代码,实现RAW的读取,并实现RAW到BMP格式的转换功能。
void CRawToBmpDlg::OnButtonSeeraw(){CFileDialog dlg(TRUE);if(dlg.DoModal()==IDOK){m_sRawIn=dlg.GetPathName();UpdateData(FALSE);}}void CRawToBmpDlg::OnButtonSeebmp(){CFileDialog dlg(TRUE);if(dlg.DoModal()==IDOK){m_sBmpOut=dlg.GetPathName();UpdateData(FALSE);}}void CRawToBmpDlg::OnOK(){UpdateData();CBmpFile bmpFile;bmpFile.CreateBmp(m_iHeight,m_iWidth,(m_iGray?3:1));CFile rawFile;rawFile.Open(m_sRawIn,CFile::modeRead);rawFile.Read(bmpFile.m_pImgDat,m_iHeight*m_iWidth*(m_iGray?3:1));rawFile.Close();bmpFile.Save2File(m_sBmpOut);CDialog::OnOK();}7、 修改程序编制中出现的各种语法错误和逻辑错误,检查程序运行结果。
四、实习结果分析与评价本程序能够实现将RAW 图像格式转换成BMP 图像格式的功能。
正确运用bmpfile.h 提供的相关函数实现了上述功能,对位图图像有了了进一步了解。
实习二 编写线性灰度变换的程序一、实习目的和意义熟悉图像点增强的一般方法,掌握图像点增强的算法和原理,会用编程方法实现其算法。
二、实习原理和方法点运算是指像素值(即像素点上的灰度值)通过运算改变之后,可以改善图象的显示效果。
这是一种像素的逐点运算,是旧图象与新图象之间的映射关系,是一种简单但却十分有效的一种图象处理手段。
灰度的线性变换就是指图像的中所有点的灰度按照线性灰度变换函数进行变换。
灰度变换方程如下:该方程为线性方程。
式中参数 i D 为输入图像的像素的灰度值,参数0D 为输出图像的灰度。
二、 实习过程和步骤1、 打开实习一所建的项目2009302590120;2、 添加菜单项“线性拉伸”;为该菜单项建立消息处理函数;3、 新建线性拉伸对话框,并建立对话框类,为对话框类定义成员变量和成员函数。
4、 在函数定义处添加自己的源代码。
核心代码如下:for(i=0;i<rows;i++)for(j=0;j<cols;j++){y=pImg[i*rows+j]*a+b;if(y<0) y=0;if(y>255) y=255;pImg[i*rows+j]=(BYTE)y;}5、 编译检查语法错误,若编译通过,运行程序,检查是否能实现灰度线性变换。
四、 实习结果分析与评价本程序能够实现图像灰度的线性变换。
能够通过图像灰度的线性变换实现对图像的增强处理,掌握了对图像点处理的原理和方法。
实习三 编写局部处理的程序一、实习目的和意义()O i i D f D fA D fB==⋅+熟悉图像局部处理的一般方法,掌握图像局部处理的算法和原理,会用编程方法实现其算法。
二、实习原理和方法局部处理在处理某一像素时,利用与该像素相邻的一组像素,经过某种变换得到处理后图像中某一点的像素值。
目标像素的邻域一般是由像素组成的二维矩阵,该矩阵的大小为奇数,目标像素位于该矩阵的中央,即目标像素就是区域的中心像素。
经过处理后,目标像素的值为经过特定算法计算后所得的结果。
三、实习过程和步骤1、打开项目2009302590120;2、添加菜单项“3x3低通/高通滤波”菜单项;3、新建3*3滤波对话框,要求用户自己选择滤波算子实现3*3高通或低通滤波。
并建立相应的对话框类,为对话框类定义成员变量和成员函数。
4、为菜单项建立消息处理函数;5、在函数体内添加实现3x3低通/高通滤波的源代码。
核心代码如下:for(i=1;i<rows-1;i++)for(j=1;j<cols-1;j++){int p1,p2,p3,p4,p5,p6,p7,p8,p9;p1=pImg[(i-1)*cols+j-1]*k1;p2=pImg[(i-1)*cols+j]*k2;p3=pImg[(i-1)*cols+j+1]*k3;p4=pImg[i*cols+j-1]*k4;p5=pImg[i*cols+j]*k5;p6=pImg[i*cols+j+1]*k6;p7=pImg[(i+1)*cols+j-1]*k7;p8=pImg[(i+1)*cols+j]*k8;p9=pImg[(i+1)*cols+j+1]*k9;int y;if((k1+k2+k3+k4+k5+k6+k7+k8+k9)==0)y=p1+p2+p3+p4+p5+p6+p7+p8+p9;elsey=(p1+p2+p3+p4+p5+p6+p7+p8+p9)/(k1+k2+k3+k4+k5+k6+k7+k8+k9);if(y>255) y=255;if(y<0) y=0;pDoc->m_bmpfile.m_pImgDat[i*cols+j]=y;}6、编译检查语法错误,若编译通过,运行程序,检查是否能实现局部处理算法。
四、实习结果分析与评价先打开一幅图,点击“3*3高通/低通滤波”,弹出对话框,输入低通滤波算子,点击“OK”,得到低通滤波后的图像,可以看出图像经低通滤波后变得平滑;若使用高通滤波,输入高通滤波算子,可以看出高通滤波使图像的边缘得到增强。
用户还可以根据需要输入其它算子进行相应的滤波运算。
实习四中值滤波一、实习目的和意义熟悉图像中值滤波原理和快速排序的方法,编程实现灰度图像中值滤波功能,探讨其去噪特性及其适用性,提高图像增强处理的技能。
二、实习原理和方法中值滤波是一种典型的低通滤波器,它的目的是去除噪声,同时能保护图像边缘。
中值滤波一般采用一个含有奇数个点的滑动窗口,将窗口中各点灰度值的中值来代替指定点(一般为窗口中心)的灰度值。
对于奇数个元素,中值是取窗口中各元素按由小大排序后中间的灰度值;对于偶数个元素,一般取排序后中间两个元素灰度值的平均值为中值。
三、实习过程和步骤1、打开项目2009302590120;2、添加菜单项“中值滤波”菜单项;3、为菜单项建立消息处理函数;4、在函数体内添加实现中值滤波的源代码。
for(i=1;i<rows;i++)for(j=1;j<cols;j++){a[0]=pImg[(i-1)*rows+(j-1)];a[1]=pImg[(i-1)*rows+j];a[2]=pImg[(i-1)*rows+(j+1)];a[3]=pImg[i*rows+(j-1)];a[4]=pImg[i*rows+j];a[5]=pImg[i*rows+(j+1)];a[6]=pImg[(i+1)*rows+(j-1)];a[7]=pImg[(i+1)*rows+j];a[8]=pImg[(i+1)*rows+(j+1)];for(s=0;s<9;s++){for(t=s+1;t<9;t++){if(a[t]>a[s]){y=a[t];a[t]=a[s];a[s]=y;}}}y=a[4];if(y<0) y=0;if(y>255) y=255;pDoc->m_bmpfile.m_pImgDat[i*rows+j]=(BYTE)y;}5、编译检查语法错误,若编译通过,运行程序,检查是否能实现中值滤波算法。
四、实习结果分析与评价打开一幅图像进行中值滤波处理,可见中值滤波处理后图像变得平滑,能够起到一定的去噪效果。
实习五直方图均衡化一、实习目的和意义熟悉直方图均衡化的原理和方法,编程实现直方图均衡化功能,提高图像增强处理的技能。
二、实习原理和方法直方图均衡化是通过对原图像进行某种变换,使原图像的灰度直方图修正为均匀分布的直方图的一种方法。
三、实习过程和步骤1、打开所建的项目2009302590120;2、添加菜单项“直方图均衡化”菜单项;3、为新加的菜单项分别建立消息处理函数;4、在函数体内添加实现直方图均衡化的源代码。
核心代码如下:for(i=0;i<rows;i++)for(j=0;j<cols;j++){int gray=pDoc->m_bmpfile.m_pImgDat[i*cols+j];h[gray]++;}double per[256];for(i=0;i<256;i++){per[i]=0.0;for(j=0;j<=i;j++)per[i]+=h[j];per[i]*=(255.0/(double)(rows*cols));}for(i=0;i<rows;i++)for(j=0;j<cols;j++){int gray=gray=pDoc->m_bmpfile.m_pImgDat[i*cols+j];pImg[i*cols+j]=(int)per[gray];}5、编译检查语法错误,若编译通过,运行程序,检查是否能实现局部处理算法。