数字图像处理实习报告.doc_第1页
数字图像处理实习报告.doc_第2页
数字图像处理实习报告.doc_第3页
数字图像处理实习报告.doc_第4页
数字图像处理实习报告.doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数字图像处理课程综合实习实习报告 学 院遥感信息工程学院班 级 09031学 号 2009302590120姓 名 吴雪薇日 期 2011年5月28日指导教师 实习一 将RAW图像格式转换成BMP图像格式一、 实习目的和意义熟悉常用的图像文件格式与格式转换,认识各图像格式的优缺点;掌握RAW和BMP格式的存储和读取,编程实现RAWBMP格式的转换,为读取各种格式文件打基础。二、实习原理和方法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提供的相关函数实现了上述功能,对位图图像有了了进一步了解。实习二 编写线性灰度变换的程序一、实习目的和意义熟悉图像点增强的一般方法,掌握图像点增强的算法和原理,会用编程方法实现其算法。二、实习原理和方法点运算是指像素值(即像素点上的灰度值)通过运算改变之后,可以改善图象的显示效果。这是一种像素的逐点运算,是旧图象与新图象之间的映射关系,是一种简单但却十分有效的一种图象处理手段。灰度的线性变换就是指图像的中所有点的灰度按照线性灰度变换函数进行变换。灰度变换方程如下:该方程为线性方程。式中参数 为输入图像的像素的灰度值,参数为输出图像的灰度。二、 实习过程和步骤1、 打开实习一所建的项目2009302590120;2、 添加菜单项“线性拉伸”;为该菜单项建立消息处理函数;3、 新建线性拉伸对话框,并建立对话框类,为对话框类定义成员变量和成员函数。4、 在函数定义处添加自己的源代码。核心代码如下:for(i=0;irows;i+)for(j=0;jcols;j+)y=pImgi*rows+j*a+b;if(y255) y=255;pImgi*rows+j=(BYTE)y;5、 编译检查语法错误,若编译通过,运行程序,检查是否能实现灰度线性变换。四、 实习结果分析与评价本程序能够实现图像灰度的线性变换。能够通过图像灰度的线性变换实现对图像的增强处理,掌握了对图像点处理的原理和方法。实习三 编写局部处理的程序一、实习目的和意义熟悉图像局部处理的一般方法,掌握图像局部处理的算法和原理,会用编程方法实现其算法。二、实习原理和方法局部处理在处理某一像素时,利用与该像素相邻的一组像素,经过某种变换得到处理后图像中某一点的像素值。目标像素的邻域一般是由像素组成的二维矩阵,该矩阵的大小为奇数,目标像素位于该矩阵的中央,即目标像素就是区域的中心像素。经过处理后,目标像素的值为经过特定算法计算后所得的结果。三、实习过程和步骤1、打开项目2009302590120;2、添加菜单项“3x3低通/高通滤波”菜单项;3、新建3*3滤波对话框,要求用户自己选择滤波算子实现3*3高通或低通滤波。并建立相应的对话框类,为对话框类定义成员变量和成员函数。4、为菜单项建立消息处理函数;5、在函数体内添加实现3x3低通/高通滤波的源代码。核心代码如下:for(i=1;irows-1;i+)for(j=1;j255) y=255;if(ym_bmpfile.m_pImgDati*cols+j=y;6、编译检查语法错误,若编译通过,运行程序,检查是否能实现局部处理算法。四、实习结果分析与评价先打开一幅图,点击 “3*3高通/低通滤波”,弹出对话框,输入低通滤波算子, 点击“OK”,得到低通滤波后的图像,可以看出图像经低通滤波后变得平滑;若使用高通滤波,输入高通滤波算子,可以看出高通滤波使图像的边缘得到增强。用户还可以根据需要输入其它算子进行相应的滤波运算。实习四 中值滤波一、实习目的和意义熟悉图像中值滤波原理和快速排序的方法,编程实现灰度图像中值滤波功能,探讨其去噪特性及其适用性,提高图像增强处理的技能。二、实习原理和方法中值滤波是一种典型的低通滤波器,它的目的是去除噪声,同时能保护图像边缘。中值滤波一般采用一个含有奇数个点的滑动窗口,将窗口中各点灰度值的中值来代替指定点(一般为窗口中心)的灰度值。对于奇数个元素,中值是取窗口中各元素按由小大排序后中间的灰度值;对于偶数个元素,一般取排序后中间两个元素灰度值的平均值为中值。三、实习过程和步骤1、打开项目2009302590120;2、添加菜单项“中值滤波”菜单项;3、为菜单项建立消息处理函数;4、在函数体内添加实现中值滤波的源代码。for(i=1;irows;i+)for(j=1;jcols;j+)a0=pImg(i-1)*rows+(j-1);a1=pImg(i-1)*rows+j;a2=pImg(i-1)*rows+(j+1);a3=pImgi*rows+(j-1);a4=pImgi*rows+j;a5=pImgi*rows+(j+1);a6=pImg(i+1)*rows+(j-1);a7=pImg(i+1)*rows+j;a8=pImg(i+1)*rows+(j+1);for(s=0;s9;s+)for(t=s+1;tas)y=at;at=as;as=y;y=a4;if(y255) y=255;pDoc-m_bmpfile.m_pImgDati*rows+j=(BYTE)y;5、编译检查语法错误,若编译通过,运行程序,检查是否能实现中值滤波算法。四、实习结果分析与评价打开一幅图像进行中值滤波处理,可见中值滤波处理后图像变得平滑,能够起到一定的去噪效果。实习五 直方图均衡化一、实习目的和意义熟悉直方图均衡化的原理和方法,编程实现直方图均衡化功能,提高图像增强处理的技能。二、实习原理和方法直方图均衡化是通过对原图像进行某种变换,使原图像的灰度直方图修正为均匀分布的直方图的一种方法。三、实习过程和步骤1、打开所建的项目2009302590120;2、添加菜单项“直方图均衡化”菜单项;3、为新加的菜单项分别建立消息处理函数;4、在函数体内添加实现直方图均衡化的源代码。核心代码如下:for(i=0;irows;i+)for(j=0;jm_bmpfile.m_pImgDati*cols+j;hgray+;double per256;for(i=0;i256;i+)peri=0.0;for(j=0;j=i;j+)peri+=hj;peri*=(255.0/(double)(rows*cols);for(i=0;irows;i+)for(j=0;jm_bmpfile.m_pImgDati*cols+j;pImgi*cols+j=(int)pergray;5、编译检查语法错误,若编译通过,运行程序,检查是否能实现局部处理算法。四、实习结果分析与评价打开一幅图像进行直方图均衡化,可见直方图均衡化后图像的对比度变大,许多细节更加清晰,对应的直方图变得平坦多了。实习六 图像平移一、实习目的和意义熟悉图像几何处理:图像平移、旋转、缩放的一般方法,掌握图像几何处理:图像平移、旋转、缩放的算法和原理,会用编程方法实现其算法二、实习原理和方法将图像中所有的点都按照指定的平移量水平、垂直移动。设(x0,y0)为原图像上的一点,图像水平平移量tx,垂直平移量为ty,则平移后点(x0,y0)的坐标变为(x1,y1)。(x0,y0)与(x1,y1)之间的关系为:x1=x0+tx;y1=y0+ty;平移后的图像中每个像素的颜色是由原图像中的对应点颜色确定。三、实习过程和步骤1、打开项目2009302590120;2、添加菜单项“平移”菜单项;3、新建平移对话框,要求用户自己分别输入X或Y方向的平移量。并建立相应的对话框类,为对话框类定义成员变量和成员函数。4、为菜单项建立消息处理函数;5、在函数体内添加实现平移的源代码。for(i=0;irows+y;i+)for(j=0;jcols+x;j+)newbmp.m_pImgDati*(cols+x)+j=255;for(i=0;irows+y;i+)for(j=0;jcols+x;j+)if(i-y)=0)&(j-x)=0)newbmp.m_pImgDati*(cols+x)+j=pDoc-m_bmpfile.m_pImgDat(i-y)*cols+j-x;pDoc-m_bmpfile=newbmp;6、编译检查语法错误,若编译通过,运行程序,检查是否能实现平移功能。四、实习结果分析与评价打开一幅图像,在弹出的对话框中,分别输入X、Y方向的平移量,点击“OK”,可以看到图像在相应的方向上进行了平移。实习七 图像旋转、转置一、实习目的和意义熟悉图像几何处理:图像平移、旋转、缩放的一般方法,掌握图像几何处理:图像平移、旋转、缩放的算法和原理,会用编程方法实现其算法二、实习原理和方法通常是以图像的中心为圆心旋转,按顺时针方向旋转。旋转前:x0=r*cos(b); y0=r*sin(b);旋转a 角度后:x1=r*cos(b-a)=r*cos(b)*cos(a)+r*sin(b)*sin(a)=x0*cos(a)+y0*sin(a)y1=r*sin(b-a)=r*sin(b)*cos(a)-r*cos(b)*sin(a)=-x0*sin(a)+y0*cos(a)以矩阵的形式表示坐标系是以图像的中心为原点,向右为x 轴正方向,向上为y 轴正方向。它和以图像左上角为原点,向右为x 轴正方向,向下为y 轴正方向的坐标系之间的转换关系三、实习过程和步骤1、打开所建项目2009302590120;2、添加菜单项“旋转”,“转置”;3、新建旋转对话框,要求用户自己选择旋转角度。并建立相应的对话框类,为对话框类定义成员变量和成员函数。4、为该菜单项建立消息处理函数;5、在函数定义处添加自己的源代码。旋转核心代码:double a=dlg.m_ea*PI/180;double sina=sin(a),cosa=cos(a);double Ox=(cols-1)/2,Oy=(rows-1)/2; /中心坐标double sx1=-Ox,sy1=Oy, sx2=Ox,sy2=Oy, sx3=-Ox,sy3=-Oy, sx4=Ox,sy4=-Oy; /原图像四角坐标double dx1=cosa*sx1+sina*sy1,dy1=-sina*sx1+cosa*sy1, dx2=cosa*sx2+sina*sy2,dy2=-sina*sx2+cosa*sy2, dx3=cosa*sx3+sina*sy3,dy3=-sina*sx3+cosa*sy3, dx4=cosa*sx4+sina*sy4,dy4=-sina*sx4+cosa*sy4; /新图四角坐标Ncols=(int)(max(abs(dx1-dx4),abs(dx3-dx2)+0.5);Nrows=(int)(max(abs(dy1-dy4),abs(dy2-dy3)+0.5); /定义新的行和列newbmp.CreateBmp(Ncols,Nrows,1);f1=-(Ncols-1)/2*cosa-(Nrows-1)/2*sina+Ox;f2=(Ncols-1)/2*sina-(Nrows-1)/2*cosa+Oy;for(i=0;iNrows;i+)for(j=0;jNcols;j+)newbmp.m_pImgDati*Ncols+j=255;for(i=0;iNrows;i+)for(j=0;j=0&y=0&xm_bmpfile.m_pImgDaty*cols+x;pDoc-m_bmpfile=newbmp;转置核心代码:for(i=0;iNrows;i+)for(j=0;jNcols;j+)newbmp.m_pImgDati*Ncols+j=pImgj*cols+i;6、编译检查语法错误,若编译通过,运行程序,检查是否能实现旋转变换。四、实习结果分析与评价打开一幅图像,点击“旋转”,输入相应的旋转角度,可以看到图像进行了相应的旋转变换。同理,点击“转置”,可以实现对图像的转置变换。实习八 图像缩放一、实习目的和意义熟悉图像几何处理:图像平移、旋转、缩放的一般方法,掌握图像几何处理:图像平移、旋转、缩放的算法和原理,会用编程方法实现其算法二、实习原理和方法假设放大因子为ratio,缩放的变换矩阵为:三、实习过程和步骤1、打开所建项目2009302590120;2、添加菜单项“缩放”;3、新建缩放对话框,要求用户自己分别选择X方向和Y方向的缩放系数,如果用户不选择,则默认缩放系数为1,即既不放大也不缩小。并建立相应的对话框类,为对话框类定义成员变量和成员函数。4、为该菜单项建立消息处理函数;5、在函数定义处添加自己的源代码。for(i=0;ir;i+)for(j=0;jc;j+)newbmp.m_pImgDati*c+j=255;for(i=0;ir;i+)for(j=0;j=0&y=0&xm_bmpfile=newbmp;6、编译检查语法错误,若编译通过,运行程序,检查是否能实现缩放变换。四、实习结果分析与评价打开一幅图像,点击“缩放”,在弹出的缩放对话框中分别输入X、Y方向的缩放系数,如果用户不选择,则默认缩放系数为1,即既不放大也不缩小。然后点击“OK”,可以看到图像在相应方向上的缩放变换。实习九 灰度图像边缘检测一、实习目的和意义熟悉图像几何处理:图像平移、旋转、缩放的一般方法,掌握图像几何处理:图像平移、旋转、缩放的算法和原理,会用编程方法实现其算法二、实习原理和方法图像边缘检测的原理与局部处理类似,采用卷积算法来实现。卷积可以简单地看成加权求和的过程。卷积时使用的权用一个很小的矩阵来表示,矩阵的大小是奇数,而且与使用的区域的大小相同。这种权矩阵叫做卷积核,区域中的每个像素分别与卷积核中的每个元素相乘,所有乘积之和即为区域中心像素的新值。三、实习过程和步骤1、打开所建项目2009302590120;2、添加菜单项“边缘检测”“Roberts算子”,“Prewitt算子”,“Sobel算子”,“Laplace算子”,“自定义算子”;3、新建自定义算子对话框,要求用户自己自己输入边缘检测算子。并建立相应的对话框类,为对话框类定义成员变量和成员函数。4、分别为各种算子菜单项建立消息处理函数;5、分别在函数定义处添加自己的源代码。以Roberts算子为例,其核心代码:for(i=0;irows;i+)for(j=0;j255) y=255;if(ym_bmpfile.m_pImgDati*cols+j=y;6、编译检查语法错误,若编译通过,运行程序,检查是否能实现。四、实习结果分析与评价打开一幅图像,点击“边缘检测”,选择相应的算子,观察不同算子对图像边缘检测的效果差异。如果用户想要自己输入算子,可以选择“自定义算子”,在弹出的自定义算子对话框中输入相应的算子即可。实习十 图像二值化一、实习目的和意义加深对图像分割的理解,掌握最简单图像分割的原理与方法,提高图像处理与分析能力与实际动手能力。二、实习原理与方法状态法(峰谷法):如果一幅灰度图像的直方图有双峰和明显的谷,那么选择两峰之间的谷所对应的T作为阈值,对图像进行分割。判断分析法:假定图像的灰度区间为0,L-1,则选择一阈值T 将图像的像素分为两组。显然,组内方差越小,则组内像素越相似;组间方差越大,则组间的差别越大。因此为最大值所对应的T,就是所求判断分析法的分割阈值。三、实习过程和步骤1、添加菜单项“状态法(峰谷法)”,“判断分析法”,“熵值法”,“自定义阈值”;2、分别为菜单项建立消息处理函数,并在函数定义处添加自己的源代码。以状态法和判断分析法为例:状态法核心代码:for(i=0;irows;i+)for(j=0;jcols;j+)int gray=pImgi*cols+j;histgray+;int t,nt=127;for(i=0;t!=nt&i100;i+)t=nt;double p1=0.0,p2=0.0;int s1=0,s2=0;for(j=0;j=t;j+)p1+=(double)(j*histj);s1+=histj;double v1=p1/s1; /阈值左边的灰度均值for(j=t+1;j=255;j+)p2+=(double)(j*histj);s2+=histj;double v2=p2/s2; /阈值右边灰度均值nt=(int)(v1+v2)/2);判断分析法核心代码:for(i=0;irows;i+)for(j=0;jcols;j+)int gray=pImgi*cols+j;histgray+;int t=0;double MAX=0.0;double P=0.0;int S=0;for(i=1;i256;i+)P+=(double)(i*histi);S+=histi;int s1=0,s2=0;double p1=0.0;double v1,v2,d1,d2,din,dout;double ratio;for(i=1;i256;i+)s1+=histi;if(!s1) continue;s2=S-s1;if(s2=0) break;p1+=(double)(i*histi);v1=p1/s1; /左边像素均值for(j=1;j=i;j+) /计算左边像素间方差/double d1;d1+=(j-v1)*(j-v1)*histj;v2=(P-p1)/s2; /右边像素均值for(j=i+1;jMAX)MAX=ratio;t=i;4、编译检查语法错误,若编译通过,运行程序,检查是否能实现。四、实习结果分析与评价打开一幅图像,点击“二值化”,选择相应的菜单项“状态法(峰谷法)”、“判断分析法”、“熵值法”,可以看到每种方法进行二值化得到的阈值以及二值化后图像效果。如果用户想自己输入阈值,可以点击菜单项“自定义阈值”,在弹出的对话框中输入阈值(0到255),可以得到相应的二值化图像。实习十一 模板匹配一、实习目的和意义加深对图像目标识别方法的理解与应用,掌握模板匹配的基本算法,启发学生深入研究图像识别

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论