数字图像处理实验指导书Word格式文档下载.docx
- 文档编号:18289469
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:15
- 大小:21.10KB
数字图像处理实验指导书Word格式文档下载.docx
《数字图像处理实验指导书Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数字图像处理实验指导书Word格式文档下载.docx(15页珍藏版)》请在冰豆网上搜索。
实验九
在复杂背景图片中提取有用信息
63
实验环境和工具使用
多文件应用程序的开发过程
一、实验目的与要求
VisualC++提供了一个集源程序编辑、代码编译与调试于一体的开发环境,这个环境称为集成开发环境,对于集成开发环境的熟悉程度直接影响程序设计的效率,本实验通过学习VisualC++6.0界面的常用组成情况,并学习各种常用的窗口、菜单、按钮的意义和功能,并通过一些简单的程序设计,目的是使学生对用户界面、菜单和工具栏有一个全面的了解并掌握主要菜单命令。
●了解VisualC++集成开发环境的界面组成;
●理解菜单命令的含义
●掌握“New:
”菜单命令、“Breakpoints”菜单命令、“Build”菜单命令、“SourceBrower”菜单命令、工具栏的定制和修改、联机帮助。
●简单的程序设计
二、实验设备与平台
实验设备要求每个学生一台电脑,其中运行环境为VC++6.0系统。
三、实验内容及步骤
1.上机实验内容
●VisualC++集成开发环境的用户界面识别;
●新文件、新工程项目、工作区的创建;
●设置、查看和删除断点;
●编译和运行程序;
●浏览资源信息;
●工具栏的定制和修改;
●联机帮助的使用;
●熟悉VisualC++编写控制台模式程序的方法;
上机输入例题,调试并运行,并观察结果;
●上机编写一个程序
实验1调试并编译程序。
在VisualC++下,编写控制台模式的程序和在DOS下编写程序相似,具有简单方便的特点,一般用于后台程序的编写。
控制台模式下程序的编写有两种方法,一是创建一个C++源程序文件,二是创建一个控制台模式的工程。
⑴创建一个C++源程序文件
1启动VisualC++,单击“File”菜单下的“New”菜单命令,出现“New”对话框。
然后选择“Files”选项卡,在此选项卡的左侧,单击“C++SourceFiles”:
在选项卡的右侧,选择源程序存放的位置(location)以及源程序文件名(File),然后单击【OK】按钮。
注意C++源程序文件的扩展名为.cpp。
2在编辑区输入源程序,程序内容如下:
#include<
iostream.h>
voidmain()
{
for(inti=0;
i<
3;
i++)
cout<
<
"
Hello!
myfriend!
\n"
;
}
}
3程序输入之后,请认真检查,然后按<
F7>
键或工具栏中的
(Build)按钮或者选择“Build”菜单命令,系统提示是否创建一个默认的工程工作区,单击【是】按钮即可。
4系统开始编译源程序并链接相应的文件,如果没有错误则在集成开发环境下方的状态栏中出现下列提示“0error(s),0warning(s)”,此时可以按<
Ctrl>
+<
键或按下状态栏中的
按钮或者选择“Build”菜单的“Excute1_1.exe”运行程序,然后观察程序运行结果。
用户也可以在DOS(Windows98)下或控制台模式下(Windows2000或WindowsXP)直接键入文件名“1_1.exe”也可以运行程序。
⑵创建一个控制台模式的工程
1启动VisualC++,单击“File”菜单下的“New”菜单命令,出现“New”对话框。
然后选择“Projects”选项卡,在此选项卡的左侧,单击“Win32ConsoleApplication”;
在选项卡的右侧,选择工程文件存放的位置(location)以及工程文件名(ProjectName)。
然后单击【OK】按钮。
2在“Win32ConsoleApplication-Step1of1”对话框中选择应用程序的类型“Anemptyproject”,单击【Finish】按钮。
3在集成开发环境的左侧单击“FileView”属性页,右键单击“SourceFiles”,选择“AddFilestoFolder…”。
在“文件名”中填入文件名,此时也可以选择存在的文件。
4此时在“SourceFiles”左侧出现一个加号,单击加号,出现新的源程序文件“1_1.cpp”,双击此文件,在集成开发环境的右侧输入例1_1.
5按照创建一个C++源程序文件的第④个步骤编译和运行程序。
图1-1向工程中添加源程序文件
图1-2选择添加的源程序文件的文件名与类型
实验2:
设置、查看和删除断点。
为了对程序进行调适,可以设置断点。
在VisualC++6.0中,断点分为位置断点(Location)、数据断点(Data)、消息断点(Message)三种类型。
本次实验只练习位置断点的设置、查看和删除。
图1-3右键单击设置断点
a)设置位置断点。
有两种方法可以设置位置断点,一是右键单击断点所在行,如图1-4所示,单击“Insert/RemoveBreakpoint”,断点所在行会出现红色的圆,标识断点设置成功。
二是让光标到达相应位置,然后单击“Edit”菜单的“Breakpoints”命令,出现如图1-5所示的“Breakpoints”对话框,在“Breakat”处选择断点所在行即可。
b)查看位置断点。
某行设置断点之后,行首位置有一个红圆,源程序较长时,查看比较麻烦,可以单击“Edit”菜单的“Breakpoints”命令,出现如图1-4所示的“Breakpoints”对话框,在对话框的左下角“Breakpoints”处看到所有的断点。
c)删除位置断点。
有两种方法可以删除位置断点,一是右键单击断点所在行,单击“RemoveBreakpoint”删除断点;
二是在如图1-5所示的“Breakpoints”对话框的“Breakpoints”处选择断点,然后选择“Remove”删除断点。
图1-4“断点”对话框
图像显示,直接灰度变换
1、掌握BMP灰度图像显示,图像文件格式。
2、掌握用CDib类,读写位图文件,取得文件宽度,高度,图像数据缓冲区。
3、掌握BMP文件图像的步长定义。
4、掌握灰度线形变换。
5、掌握灰度分段变换。
(1)生成一个多文档程序MyStep1。
在文档类中定义一个CDib
对象m_dib。
定义函数Draw(intx,inty,CDC*);
voidCMyStep1Doc:
:
Draw(intx,inty,CDC*pDC)
{
if(!
m_dib.IsValid())
return;
//----下面分别以两种方式显示
#if
(1)
//---0:
则以下面else代码有效
m_dib.Draw(pDC,x,y);
#else
int
nStep=m_dib.GetWidth();
//再改为nStep=(m_dib.GetWidth()*8+31)/32*4;
for(inty=0;
y<
m_dib.GetHeight();
y++)
for(intx=0;
x<
m_dib.GetWidth();
x++)
unsignedchargray=m_dib.GetBits()[y*nStep+x];
pDC->
SetPixel(x,y,RGB(gray,gray,gray));
//再改为pDC->
SetPixel(x,m_dib.GetHeight()-y,RGB(gray,gray,gray));
}
添加菜单读图像文件。
在文档类中响应该菜单命令,
OnReadBmp()
CDib:
SelectBmpFile(&
m_dib);
if(m_dib.IsValid())
UpdateAllViews(NULL);
在视图类的OnDraw()中显示m_dib
voidCMyStep1View:
OnDraw(CDC*pDC)
…………………………………………
GetDocument()->
Draw();
注意:
bmp位图文件的行是以4字节对其,行存储是以颠倒格式。
(2)添加菜单命令,灰度变换。
voidCmyTest1Doc:
OnLs()
if(!
//--Src[a,b]Dst[c,d]
g=(d-c)/(b-a)*(f-a)+c;
float
a=50;
b=150;
c=10;
d=250;
nStep=(m_dib.GetWidth()*8+31)/32*4;
off=y*nStep+x;
if(m_dib.GetBits()[off]>
=a&
&
)m_dib.GetBits()[off]<
=b)
m_dib.GetBits()[off]=(d-c)/(b-a)*(m_dib.GetBits()[off]–a)+c;
(3)添加菜单命令,灰度分段变换。
OnLs1()
a1=30;
b1=80;
c1=10;
d1=120;
a2=81;
b2=150;
c2=120;
d2=250;
=a1&
=b1)
m_dib.GetBits()[off]=(d1-c1)/(b1-a1)*(m_dib.GetBits()[off]-a1)+c1;
elseif(m_dib.GetBits()[off]>
=a2&
=b2)
m_dib.GetBits()[off]=(d2-c2)/(b2-a2)*(m_dib.GetBits()[off]-a2)+c2;
(4)添加菜单命令,灰度γ变换。
OnLsr()
g=f^(1/r);
double
r=1.2;
//修改该值,看变换的效果
0)
doubleg=pow((double)m_dib.GetBits()[off],r);
if(g>
255)
g=255;
m_dib.GetBits()[off]=g;
均衡化,规定化
一、实验目的及要求
1、掌握直方图计算方法。
2、掌握利用直方图均衡化对图像进行变换。
3、掌握利用直方图规定化对图像进行变换。
1、直方图计算。
voidHistogram(unsignedchar*buf,intnWidth,intnHeight,intnStep,intHisg[])
memset(Hisg,0,sizeof(int)*256);
nHeight;
nWidth;
intoff=y*nStep+x;
Hisg[buf[off]]++;
2、直方图均衡化。
voidHistogramEqua(unsignedchar*pSrc,intnWidth,intnHeight,intnSrcStep,unsignedchar*pDst,intnDstStep)
//1:
直方图计算
Hist[256];
Histogram(pSrc,nWidth,nHeight,nSrcStep,Hist);
//2:
映射表计算
nTable[256];
nSum=0;
for(inti=0;
i<
256;
i++)
nSum+=Hist[i];
nTable[i]=
255.0*nSum/(nWidth*nHeight);
//3:
灰度变换
offSrc=y*nSrcStep+x;
offDst=y*nDstStep+x;
pDst[offDst]=nTable[pSrc[offSrc]];
3、添加菜单命令[见实验一MyStep1],直方图均衡化。
OnHistogramEqua()
nStep=(m_dib.GetWidth()*8+31)/32*4;
HistogramEqua(m_dib.GetBits(),m_dib.GetWidth(),m_dib.GetHeight(),nStep,m_dib.GetBits(),nStep);
2、直方图规定化。
voidHistogramRegulate(unsignedchar*pSrc1,intnWidth1,intnHeight1,intnStep1,
unsignedchar*pSrc2,intnWidth2,intnHeight2,intnStep2,
unsignedchar*pDst,
intnWidth3,intnHeight3,intnStep3)
assert(nWidth2==nWidth3&
nHeight3==nHeight2);
//---将pSrc2变换,使其直方图分布和pSrc1一直,
nHist[256];
Histogram(pSrc1,nWidth1,nHeight1,nStep1,nHist);
floatfP1[256];
i,j;
for(i=0;
fP1[i]=0;
fP1[0]=(float)nHist[0]/(nWidth1*nHeight1);
for(j=1;
j<
j++)
fP1[j]=fP1[j-1]+(float)nHist[j]/(nWidth1*nHeight1);
//--------------------------------------------------------------------------
Histogram(pSrc2,nWidth2,nHeight2,nStep2,nHist);
floatfP2[256];
fP2[i]=0;
fP2[0]=(float)nHist[0]/(nWidth2*nHeight2);
fP2[j]=fP2[j-1]+(float)nHist[j]/(nWidth2*nHeight2);
//---------------------------------------------------------
j=0;
while(fP1[j]<
fP2[i]&
256)
j++;
nTable[i]=(j>
255?
255:
j);
//------------------------------------------------
off2=0;
off3=0;
nHeight2;
nWidth2;
pDst[off3+x]=nTable[pSrc2[off2+x]];
off2+=nStep2;
off3+=nStep3;
平滑增强
1、掌握图象增强基本算法。
2、掌握高斯平滑滤波。
3、掌握中值滤波。
4、
1、硬件环境:
微型计算机,2、软件环境:
VisualC++6.0;
锐化滤波
1、掌握梯度算子
2、掌握Laplacian算子
3、掌握Laplacian锐化增强
4、掌握高斯锐化增强
实验设备要求每个学生一台电脑,其中运行C程序环境为VC6.0系统。
图像边缘的提取
1、掌握Sobel梯度算子。
2、掌握文本文件和二进制文件的使用方法。
3、
微型计算机
2、软件环境:
VisualC++6.0
三、实验内容与步骤:
图像的分割
一、实验目的
本实验是对前面所学知识的总结,通过一个比较完整的应用程序的设计,将学过的知识连贯起来,掌握开发一个实际应用程序的步骤,同时学会使用开发工具实现界面友好的应用程序。
并通过本实验,掌握如何运用面向对象技术对具体的应用系统进行分析和设计。
二、基本知识点
1、类和对象的定义、对象的初始化和使用
2、面向对象的继承机制
3、虚函数与多态性
4、运算符重载
5、文件的使用
6、算法的使用
三、基本要求
1、理解面向对象的特性
2、掌握面向对象程序设计的开发方法
3、有一定的分析问题和解决问题的能力
4、根据学过的知识点,充分利用已有的开发工具和素材,使程序编写具有更高的效率,能真正地解决实际问题。
四、实验内容:
腐蚀和膨胀
第一部分使用图形设备接口进行绘图
1、通过实验理解和掌握图形设备接口的基本概念
2、掌握使用图形设备接口进行绘图的步骤
3、掌握图形对象(绘图工具)的使用方法
运行环境:
VC++6.0
对带噪声干扰的图像的综合处理
第一部分MFC与标准控件的使用
了解MFC类的层次结构及主要类的用法,掌握使用MFC和向导来编写Windows应用程序。
控件是Windows图形用户界面的主要组成部分之一,用户通过操作控件对象完成与应用程序之间的交互。
本实验要求通过对控件相关知识的学习,目的是要掌握静态控件、按钮、流动条、编辑框、列表框、组合框和对话框的创建、消息发送和控件控制等内容。
要求:
(1)掌握MFC类的层次结构及主要类的用法。
(2)使用应用程序向导创建MFC类的Windows应用程序。
(3)使用静态控件、按钮、流动条、编辑框、列表框、组合框和对话框等创建应用程序。
类的概念。
MFC类的层次结构。
MFC类主要的类的用法。
应用程序向导的应用方法。
常用控件的创建和成员函数使用;
对话框的调用,控件消息的处理;
三、实验设备与平台
在复杂背景图片中提取有用信息
2、面向对象的特征的应用:
封装、继承和多态
3、可视化程序设计中资源的运用
4、Windows的消息传递机制
5、MFC类库的使用
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字图像 处理 实验 指导书