数字图像处理实习报告

上传人:huo****ian 文档编号:133449025 上传时间:2022-08-10 格式:DOC 页数:15 大小:133KB
返回 下载 相关 举报
数字图像处理实习报告_第1页
第1页 / 共15页
数字图像处理实习报告_第2页
第2页 / 共15页
数字图像处理实习报告_第3页
第3页 / 共15页
点击查看更多>>
资源描述
数字图像处理课程综合实习实习报告 学 院遥感信息工程学院班 级 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),可以得到相应的二值化图像。实习十一 模板匹配一、实习目的和意义加深对图像目标识别方法的理解与应用,掌握模板匹配的基本算法,启发学生深入研究图像识别方法,提高学生图像处理与分析能力和实际动手能力。二、实习原理与方法基于灰度的模板匹配模板匹配,是根据模板与一幅图像的各部分的相似度判断其是否存在,并求得模板在图像中位置的操作。设模板T 叠放在搜索图像S 上平移,模板覆盖的搜索区叫做子图像,I,j为子图像的左上角在S 图像中的坐标,i,j的取值范围为衡量子图像和模板之间的差别用平方误差之和或绝对差之和来表示。即基于特征的模板匹配由于图像往往有较强自相关性,因此,进行模板匹配计算的相似度就在以对象物存在的地方为中心形成平缓的峰。这样,即使从图像中对象物的真实位置稍微离开一点,也表现出相当高的相似度。为了求得对象物的精确位置,总希望相似度分布尽可能尖锐一些。为了达到这目的,提出了基于轮廓特征的模板匹配方法。轮廓匹配与一般的匹配相比较,表现出更尖锐的相似度的分布。但其方法与基于灰度的模板匹配相似,只是这里通过对图像轮廓等形状特征进行匹配,从而提高匹配精度。三、实习过程和步骤1、添加菜单项“基于灰度的模板匹配”,“基于特征的模板匹配”;2、分别为菜单项建立消息处理函数,并在函数定义处添加自己的源代码。以基于灰度的模板匹配为例,其核心代码如下:for(i=0;irows-r+1;i+)for(j=0;jcols-c+1;j+)double dt=0.0;for(n=0;nr;n+)for(k=0;kc;k+)dt+=(pImg(i+n)*cols+j+k-qImgn*c+k)*(pImg(i+n)*cols+j+k-qImgn*c+k);if(dtMIN) MIN=dt;i1=i;j1=j;3、编译检查语法错误,若编译通过,运行程序,检查是否能实现。四、实习结果分析与评价打开一幅图像,选择菜单项“基于灰度的模板匹配”/“基于特征的模板匹配”,选择模板图像的路径,稍等片刻,即可在原图上看到用白色方框框出的模板图像。成绩评定项目得分文字正确、语句通顺,内容充实、详略得当(10分)原理叙述清楚(10分)算法设计正确(20分)过程清楚、步骤详细(20分)对实验结果分析恰当、能分析算法的优点和不足,并叙述正确(20分)成果验收答辩讲叙清楚、回答问题正确(20分)发现有拷贝、雷同、抄袭(视情况扣大于30分)总成绩教师签名
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 管理文书 > 工作总结


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!