文档视界 最新最全的文档下载
当前位置:文档视界 › C语言大作业图形图像处理参考资料

C语言大作业图形图像处理参考资料

C语言大作业图形图像处理参考资料
C语言大作业图形图像处理参考资料

C语言大型作业参考资料

图形操作简介

1. 必要的头文件

#include

#include

#include

#include

#include

2. 必须的系统变量

int GraphDriver;

int GraphMode;

double AspectRatio;

int MaxX, MaxY;

int MaxColors;

int ErrorCode;

struct palettetype palette;

3. 初始化图形界面初始化出错处理关闭图形界面GraphDriver = DETECT;

initgraph( &GraphDriver, &GraphMode, "" );

initgraph( &GraphDriver, &GraphMode, ”d:\\tc" );

ErrorCode = graphresult();

if( ErrorCode != grOk ){

printf(" Graphics System Error: %s\n", grapherrormsg( ErrorCode ) ); exit( 1 );

}

closegraph();

/* Return the system to text mode */

4. 取得必须的信息

getpalette( &palette );

MaxColors = getmaxcolor() + 1;

MaxX = getmaxx();

MaxY = getmaxy();

AspectRatio = (double)xasp / (double)yasp;

5. 一些常用的画图函数

outtext( buffer ),outtextxy(x,y,buffer)

line(x0,y0,x1,y1);linerel();lineto()

circle(int x, int y, int radius); arc()

bar(int l, int t, int r, int b);bar3d();

moveto(int x, int y);moverel(dx,dy);getx()

putpixel(x,y,color); getpixel(x,y)

setcolor();setbkcolor();getcolor();getbkcolor

outtext( buffer ),outtextxy(x,y,buffer)

line(x0,y0,x1,y1);linerel();lineto()

circle(int x, int y, int radius); arc()

bar(int l, int t, int r, int b);bar3d();

moveto(int x, int y);moverel(dx,dy);getx()

putpixel(x,y,color); getpixel(x,y)

setcolor();setbkcolor();getcolor();getbkcolor();

具体可以参见D:\TC\BGIDEMO.C例程,或看联机帮助,或参见下面的部分论文

显示器是个人计算机的重要组成部分。随着计算机硬件的发展,现在有不同的显示器及其适配器用

在个人计算机系统中。常用的显示器有CGA,Herclus,EGA,VGA,SVGA,TVGA等等。显示模式有两种,文本模

式和图象模式,DOS操作系统中默认的是文本模式。在图形模式中,整个屏幕按显示器的分辨率分成点阵,

EGA可以是643*350或640*200的点阵,CGA可以是640*200或320*200的点阵,VGA则可以640*200*16

色,或640*480*16色,本程序中用的就是后一种(VGAHI)。

因为图形显示器种类很多,控制方式各异,要显示图形,必须先装入相应的图形驱动程序。其次

每一种图形显示器,又具有不同的图形显示模式。要显示图形前必须决定选用哪一种显示模式,这些就是

图形系统的初始化工作。[4]反之,在退出应用程序时,要恢复原来的文本模式,要退出图形系统。

图形系统初始化程序如下:

Boolean InitG(void)

{

int errorcode;

errorcode = registerbgidriver(EGAVGA_driver);

/* report any registration errors */

if (errorcode < 0)

{

cout<<"\a\nGraphics error: "<

return false;

}

int gd=DETECT,gm;

initgraph(&gd,&gm,"");

errorcode=graphresult();

if(errorcode!=grOk){

cerr<<'\a'<

return false;

}

return true;

}

其中registerbgidriver(EGAVGA_driver)函数用于告诉连接程序,在连接时,把EGAVGA的驱动程

序装入执行程序中。

Initgraph( int *gd,int *gm, char*)函数用于图形系统的初始化。Gd,gm分别表示图形驱动器和图形模式。Gd=DETECT,告诉初始化函数自动探测显示器的类型。

Graphresult(),和grapherrormsg(int errorcode)用于检测图形系统初始化是否正确,若不正确则打印错误原因。

本程序中的输出全部是在图形模式下,用到了画点(putpixle(int x,int y,int color)),画线(line(int x1,int y1,int x2,int y2),lineto(int x,int y)),坐标移动及提取(moveto(int x,int y),

getx(), gety(), getmaxx(), getmaxy())设置颜色(setcolor(int color),setbkcolor(int color), getcolor(), getmaxcolor())画框、设置点线的样式等等。

图形系统的退出用closegraph()函数实现。

鼠标操作简介

1.鼠标简介

鼠标系统实际上由两个主要元素组成:鼠标机制和称作鼠标驱动程序的内存驻留程序。鼠标驱动程序提供与鼠标通信所需的全部低级支持。此外,它自动维持鼠标光标位置和发现是否按下了某个键。一旦装入驱动程序,鼠标就可以被随后执行的任意程序使用。

2.鼠标驱动程序的主要功能

可以通过PC中断33H访问鼠标和鼠标驱动程序的各种功能。所选择的特定函数依赖于中断时AX寄存器的值。三个其它寄存器(BX、CX和DX)用于把各种参数传送给鼠标例程。同样,鼠标函数使用这四个寄存器把鼠标的位置和按钮的状态返回给调用函数。

功能

输入值

输出值

功能调用

初始化

AX BX

AX=0000

显示光标

AX=0001

隐藏光标

读取状态

BXCXDX

AX=0003

设置位置

CX、DX

AX=0004

设置光标

BXCXDX

AX=0009

X范围

CX DX

AX=0007

Y范围

CX DX

AX=0008

光标范围

CX DX SI DI

AX=0010

中断程序

CX ES:DX

AX=000C

3.鼠标功能调用方法

用TC通过INT33H中断来编制基本函数,有三种常用方法:

嵌入汇编程序,如:ASM CLI清中断

利用全程变量赋予寄存器值,然后通过函数geninterrupt()调用中断实现

利用联合类型REGS,SREGS通过函数int86(),int86x()调用中断,原型在在dos.h 注意一下例程中预定义了如下全局变量:

#define true 1

#define false 0

int visual=false; /* to tell whether the mouse icon is visual and init as false*/

4.鼠标的初始化

InitMouse()

{ union REGS regs;

int86(0x33,®s,®s);

if(regs.x.ax==0)

return false;

else return true;}

5.鼠标光标的显示与隐藏

HideCur()

{ union REGS regs;

if(visual){

regs.x.ax=2;

int86(0x33,®s,®s);

visual=false;

}}

ShowCur()

{ union REGS regs;

if(!visual){

regs.x.ax=1;

int86(0x33,®s,®s);

visual=true;

}}

在鼠标驱动程序中,鼠标的显示状态用0值表示,隐藏用负值表示,每调用一次显示功能则该值加一,每调用一次隐藏功能,则该值减一。这样,在多次调用了驱动程序的隐藏鼠标光标功能后,再调用显示鼠标光标功能时,将不能正常显示鼠标光标。需要加入了一个visual布尔型变量,来取代驱动程序中的数值。

6.读取按钮状态,读取或设置光标位置

Status(int*x,int*y,int*status)

{ union REGS regs;

regs.x.ax=3;

int86(0x33,®s,®s);

*x=regs.x.cx;

*y=regs.x.dx;

*status=regs.x.bx;

}其中X,Y为光标位置

status&1左键状态,1为按下,0为未按

status&2右键状态,1为按下,0为未按

status&4中键状态,1为按下,0为未按

要注意循环检测时的抖动现象,可增加一些空循环或延时来清除剩余的按键信号。

例如:下面程序段,当鼠标移动时画线到当前的鼠标位置,当按左键时定义画线的启始位置,按右键时结束作图。

int working=true;

int x,y,status;

while(working){

Status(&x,&y,&status);

If(status&1)/*left button pressed*/

moveto(x,y);/* move to current mouse position*/

Else if(status&2) /*right button pressed,quit*/

Working=false;

Else/*no button pressed*/

Lineto(x,y);/*draw a line from last position */

Delay(20);/*delay 20ms to clear the dithering*/

}

7.移动鼠标光标

void MoveMouse(int x,int y)

{ REGS regs;

regs.x.ax=4;

regs.x.cx=x;

regs.x.dx=y;

int86(0x33,®s,®s);

}

8.设置鼠标的光标形状

设置鼠标光标需要三个方面信息:

鼠标的外边界:8*8点阵,16个整数

鼠标的内部形状:8*8点阵,16个整数

以及鼠标的热点的相对坐标:int x,y

其中外边界和内边界连续存放,为长度为32的整型数组int marks[32] SetCurs(unsigned masks[32],x,y)

{ union REGS regs; struct SREGS sregs;

regs.x.ax=9;

regs.x.bx=x; regs.x.cx=y;/* hot spot*/

regs.x.dx=(unsigned)masks;

segread(&sregs); int86(0x33,®s,®s);

}

一些不同形状的光标数据:

//mouse

{0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,

0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, //Cursor mask

0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1000, 0x13c0,

0x3ff0, 0x7ff8, 0xfff8, 0xfff8, 0x0824, 0x0822, 0x1ce2, 0x0000},

//empty hand

{0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,

0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,

0x0c00, 0x1200, 0x1200, 0x1200, 0x13fe, 0x1249, 0x1249, 0x1249,

0x7249, 0x9001, 0x9001, 0x9001, 0x8001, 0x8001, 0x4002, 0x3ffc},

//full arrow

{0x3fff, 0x1fff, 0x0fff, 0x07ff, 0x03ff, 0x01ff, 0x00ff, 0x007f,

0x003f, 0x00ff, 0x01ff, 0x10ff, 0x30ff, 0xf87f, 0xf87f, 0xfc3f,

0x0000, 0x4000, 0x6000, 0x7000, 0x7800, 0x7c00, 0x7e00, 0x7f00,

0x7f80, 0x7e00, 0x7c00, 0x4600, 0x0600, 0x0300, 0x0300, 0x0180},

//full hand

{0xf3ff, 0xe1ff, 0xe1ff, 0xe1ff, 0xe001, 0xe000, 0xe000, 0xe000,

0x8000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8001, 0xc003,

0x0c00, 0x1200, 0x1200, 0x1200, 0x13fe, 0x1249, 0x1249, 0x1249,

0x7249, 0x9001, 0x9001, 0x9001, 0x8001, 0x8001, 0x4002, 0x3ffc}

};

Point hotspot[]={{0,11},{4,0},{0,0},{4,0}};/*热点*/

9.设置鼠标光标的移动范围

SetMouseArea(int x0,int y0,int x1,int y1)

{ union REGS regs;

regs.x.ax=7;regs.x.cx=x0;regs.x.dx=x1;

int86(0x33,®s;®s);

regs.x.ax=8;regs.x.cx=y0;regs.x.dx=y1;

int86(0x33,®s,®s);

}

西文状态下汉字的显示

1.汉字库简介

程序中直接使用UCDOS中的HZK16,ASC16和HZK24三个文件。

HZK16中存储的是16*16点阵汉字是按行存储的以便于显示,每个汉字字模32BYTE,按照国标码顺序存储,其中也包含了682个纯中文符号字母。ASC16存储256个西文ASCII码的8*16点阵格式,按行存储,每个ASCII码16字节。

HZK24X存储24*24点阵打印字模,按列存储,每个汉字字模占576字节。24*24点阵汉字存储两比较大,所以从16区1位"啊"字开始存储,以减少字库大小。其中X为KS表示楷体,宋体等。

2.取得字节的某一位

int getbit(unsigned char byte,int bit)

{ if(bit<0||bit>7)

return 0;

return (byte>>bit)&0x1;

}

函数getbit用于得出一个字节中每个位(bit)是0还是1。

3.显示24点阵和16点阵汉字

void PutChn24(x,y,char *by,color)

{ int i1,i2,i3;

for(i1=0;i1<24;i1++) //LINES

for(i2=0;i2<3;i2++) //3 bytes per line

for(i3=0;i3<8;i3++)

if(getbit(by[i1*3+i2],7-i3))

putpixel(x+i1,y+(i2*8+i3),color);}

void PutChn16(x,y,char* buf,color)

{ int i1,i2,i3;

for(i1=0;i1<16;i1++)

for(i2=0;i2<2;i2++)

for(i3=0;i3<8;i3++)

if(getbit(buf[i1*2+i2],7-i3))

putpixel(x+i2*8+i3,y+i1,color);} qu=c1-0xa1; wei=c2-0xa1;

4.在字库中取字模

通过计算个计算出该区位码在汉字库中的偏移量:lenth=32

long offset=((qu)*94+wei)*(long)lenth;

24*24点阵汉字字模的读取类似,只是其偏移量计算稍有不同:lenth=72 long offset=((qu-15)*94+wei)*(long)lenth;

5.参考部分论文

其中的字模的或取如下,三个函数是类FileStream中的成员函数:const unsigned char *FileStream::GetBigFnt(const Chinese&c)

{

if(buffer){

delete[] buffer;

buffer=NULL;

}

lenth=72;

buffer=new unsigned char[lenth];

if(!buffer){

cerr<<'\a'<<"Not enough memory error!"<

return buffer=NULL;

}

int qu=c.c.c1-0xa1;

int wei=c.c.c2-0xa1;

long offset=((qu-15)*94+wei)*(long)lenth;

bigfnt.clear();

bigfnt.seekg(offset,ios::beg);

bigfnt.read(buffer,lenth);

int count=bigfnt.gcount();

cout.setf(ios::dec);

//coutendl<<"gcount="<

if(count!=lenth){

cerr<<"\n\aCharacter not match in "<

bigfnt.clear();

lenth=0;

delete[]buffer;

return buffer=NULL;

}

return buffer;

}

const unsigned char *FileStream::GetSmallFnt(const Chinese&c)

{

if(buffer){

delete[] buffer;

buffer=NULL;

}

lenth=32;

buffer=new unsigned char[lenth];

if(!buffer){

cerr<<'\a'<<"Not enough memory error!"<

return buffer=NULL;

}

int qu=c.c.c1-0xa1;

int wei=c.c.c2-0xa1;

long offset=((qu)*94+wei)*(long)lenth;

smallfnt.clear(); //clear last time's error state

smallfnt.seekg(offset,ios::beg);//locate

smallfnt.read(buffer,lenth); //read to buffer

int count=smallfnt.gcount();

////cout<

if(count!=lenth){

cerr<<"\n\aCharacter not match in "<

smallfnt.clear(); //clear last time's error state

lenth=0;

delete[] buffer;

return buffer=NULL;

}

return buffer;

}

几个函数中用了较多的语句进行“文件流”fstream的操作,和内存的动态申请释放及存取,也用

了较多的命令来容错。函数GetSmallFnt(c)的功能是从文件HZK16中取出32字节的汉字c 的字模。汉

字Chinese c是一个共用体,其中包含两个字节,及该汉字的内码。每个字节减去0XA0后变成区位码。

及:

int qu=c.c.c1-0xa1;

int wei=c.c.c2-0xa1;

通过计算个计算出该区位码在汉字库中的偏移量:

long offset=((qu)*94+wei)*(long)lenth;

然后通过文件定位和文件读取可得到该字模代码。

24*24点阵汉字字模的读取类似,只是其偏移量计算稍有不同

long offset=((qu-15)*94+wei)*(long)lenth;

下面两个函数用于在屏幕上一个位置开始,以一个颜色显示16*16点阵和24*24点阵的汉字字符串。

其中用到了上面的PutChn16和PutChn24两个函数。由于一个汉字的存储需要两个字节,所以在一个字符

串中处理汉字,在遇到一个字符时,首先要判断该字符是常规的ASCII字符(首位为“0”)还是用于汉字

的字符(首位为“1”),其次如果首位为“1”,还要判断该字符是该汉字的第一个字符(flag==0),还是

第二个字符(flag==1),再将表示一个汉字的两个字符组合成一个汉字并显示。如果遇到空格还要空出一

个字符的位置。如果遇到常规ASCII字符还要用PutAsc16显示(本程序暂时未考虑ASCII字符)。程序如

下:

void PutChnStr(const int xx,const int yy,char*c,int color,const FileStream&file)

{

const unsigned char*buf;

int x=xx;

int y=yy;

Chinese chinese;

int flag=0;//not in Chinese

while(*c!=NULL){

if(*c==' '){

flag=0;

x+=16;

}else {

if(flag==0){

chinese.c.c1=*c;

flag=1;

}else{//flag==1

flag=0;

chinese.c.c2=*c;

buf=file.GetSmallFnt(chinese);

PutChn16(x,y,buf,color);

x+=16;

}

}

c++;

}

}

void PutChnStr24(const int xx,const int yy,char*c,int color,const FileStream&file) {

const unsigned char*buf;

int x=xx;

int y=yy;

Chinese chinese;

int flag=0;//not in Chinese

while(*c!=NULL){

if(*c==' '){

flag=0;

x+=24;

}else {

if(flag==0){

chinese.c.c1=*c;

flag=1;

}else{//flag==1

flag=0;

chinese.c.c2=*c;

buf=file.GetBigFnt(chinese);

PutChn24(x,y,buf,color);

x+=24;

}

}

c++;

}

}

DOS下如何发声

dos.h下,有如下三个函数可以处理声音:

sound(long freq):发出特定频率的声音

nosound():停止发声

delay():延时特定时间

下面例程模拟声音的渐变过程

#include

#include

#include

/*this founction play sound until a keyboard hit*/

void mysound()

{

long freq ;

while(!kbhit()){/*while no keyboard hit,repeat play sound*/ for(freq=200L;freq<2000L;freq+=200L){

sound(freq);/*play freq sound*/

delay(200);/*delay 200ms*/

}

}

nosound();/*stop playing*/

}

音阶与频率对照简表

C

C+

D

D+

E

F

F+

G

G+

A

A+

B

65

69

73

78

82

87

92

98

103

110

116

123

131

139

147

156

165

175

185

196

220 233 247 262 277 294 311 330 349 370 392 415 440 466 494 523 554 587 622 659 698 740 784 831 880 932 988 1046 1109 1175 1244 1318 1397 1480 1568 1661 1760 1865 1976 2039 2160 2288 2422

2716

2877

3047

3226

3417

3618

3832

一般来说,升高一个八度频率加倍,降低一个八度频率减半。对于C大调来说1的频率是262Hz,i的频率是524Hz左右(523Hz)。

乐曲的拍子与音符对照简表

音符名称

全音符

2分音符

4分音符

8分音符

16分音符

DELAY倍数

32

16

8

4

2

可以设定一个DELA Y常数,然后乘以DELAY倍数,则可得出拍子。

用C语言实现精确测时

在C语言中右三个可以精确测时得方法

1.利用C语言的delay()函数

该函数原型在DOS.H中,入口时间是要测定得时间。无返回值。单位是毫秒。

2.利用C语言的clock()函数

该函数原型在time.h中,无入口参数,返回值是自程序开始到调用时的时钟的滴答数。将此数除以18.2就得到程序执行的时间。

3.利用功能调用2CH截取DOS时间

DOS内部保留有系统时间(小时,分钟和百分秒)。调用前设置入口参数AH=2CH,指出

调用的功能号。参数设置好后,调用intdos()函数,返回后的出口参数为CH=小时(0-23),CL=分钟(0-59),DH=秒(0-59),DL=1/100秒

例程如下:

#include

#include

#include

void main()

{

struct time{

int hour;

int minute;

int second;

int centisecond;

} btime;

union REGS inregs,outregs;

int I;

clrscr();

inregs.h.ah=0x3c;

intdos(&inregs,&outregs);

btime.hour=outtregs.h.ch;

btime.minute=outregs.h.cl;

btime.second=outrets.h.dh;

btime.centisecond=outregs.h.dl;

printf("\nCurrent time is:%d:%d:%d:%d\r",\

btime.hour,btime.minute,btime.second,btime.centisenond); }

数字图像处理大作业

大作业指导书 题目:数字图像处理 院(系):物联网工程学院 专业: 计算机 班级:计算机1401-1406 指导老师: 学号: 姓名: 设计时间: 2016-2017学年 1学期

摘要 (3) 一、简介 (3) 二、斑点数据模型 .参数估计与解释 (4) 三、水平集框架 (5) 1.能量泛函映射 (5) 2.水平集传播模型 (6) 3.随机评估方法 (7) 四、实验结果 (8) 五、总结 (11)

基于水平集方法和G0模型的SAR图像分割 Abstract(摘要) 这篇文章提出了一种分割SAR图像的方法,探索利用SAR数据中的统计特性将图像分区域。我们假设为SAR图像分割分配参数,并与水平集模型相结合。分布属于G分布中的一种,处于数据建模的目的,它们已经成功的被用于振幅SAR图像中不同区域的建模。这种统计数据模型是驱动能量泛函执行区域映射的基础,被引用到水平集传播数值方案中,将SAR 图像分为均匀、异构和极其异构区域。此外,我们引入了一个基于随机距离和模型的评估过程,用于量化我们方法的鲁棒性和准确性。实验结果表明,我们的算法对合成和真实SAR 数据都具有准确性。+ 简介 1、Induction(简介) 合成孔径雷达系统是一种成像装置,采用相干照明比如激光和超声波,并会受到斑点噪声的影响。在SAR图像处理过程中,返回的是斑点噪声和雷达切面建模在一起的结果。这个积性模型(文献[1])因包含大量的真实SAR数据,并且在获取过程中斑点噪声被建模为固有的一部分而被广泛应用。因此,SAR图像应用区域边界和目标检测变得更加困难,可能需要斑点去除。因此,斑点去除是必需的,有效的方法可以在文献[2][3][4][5][6][7][8][9][10]中找到。 对于SAR图像分割,水平集方法构成一类基于哈密顿-雅克比公式的重要算法。水平集方法允许有效的分割标准公式,从文献[12]中讨论的传播函数项可以得到。经典方法有着昂贵的计算成本,但现在的水平集的实现配置了有趣的低成本的替换。 水平集方法的一个重要方面,比如传播模型,可以用来设计SAR图像的分割算法。这个传播函数能够依据伽马和伽马平方根法则将斑点统计进行整合,函数已经被广泛地应用于SAR图像中的均质区域分割。Ayed等基于伽马分布任意建模,设计方案将SAR图像分成多个均质区域。尽管多区分割问题已经解决,该方案人需要一定数量的区域作为输入。Shuai 和Sun在文献[16]中提出对这个方法进行了改进,他们使用了一个有效的传播前收敛判断。Marques等引入了一个类似于含有斑点噪声图像中目标检测的框架,将基于本地区域的斑点噪声统计融合进去。这些作者采用伽马平方根对均质区域进行建模并用一个自适应窗口方案检测本地的同质性。 最近,新的SAR数据模型比如K,G,显示出了优势。经典法则受限于均质区域特性的描述,而最近的法则展现出了在数据建模中更有吸引力的特性。法则允许同构、异构和高度异构幅度SAR数据的建模。这个分布族提供了一组参数,可以描述SAR图像中的不同区域。分布的参数信息,可以被广泛的应用于设计SAR图像处理和分类技术。在文献[21]中,Mejail 等人介绍了SAR监督数据分类器,它基于其参数映射并实现了有趣的结果。Gambini等人在文献[22]中使用这个分布的一个参数来量化SAR数据的粗糙度,通过活动轮廓和B样条差值来检测边缘。然而,这种技术需要一个初始分割步骤,并受拓扑限制。一般来说,活动轮廓方法不能解决不连续区域分割的问题。 本文介绍了一种新的水平集算法来实现SAR图像中均质、异构和极其异构区域分割的目标。由于分布能够描述SAR图像的同质性和规模,我们的方法采用分布对斑点数据进行建模。这些分布参数基于每一个域点进行估计,通过这些信息,我们可以在水平集分割框架内得到一个能量泛函来驱动向前传播(front propagation)。该泛函以最大化不同区域平均能量间的差异作为结束。最终水平集阶段以能量带作为依据得到SAR图像的分割结果。

C语言程序设计大作业报告模板

《C语言程序设计》大作业报告 1.目的 掌握所学C语言程序设计的方法,熟悉所学语言的开发环境及调试过程,熟悉所学C语言中的数据类型,数据结构、语句结构、运算方法,巩固和加深对理论课中知识的理解,提高学生对所学知识的综合运用能力。通过综合设计要求达到下列基本技能: 1.培养查阅参考资料、手册的自学能力,通过独立思考深入钻研问题,学会自己分析、解决问题。 2.通过对所选题目方案分析比较,确立方案,编制与调试程序,初步掌握程序设计的方法,能熟练调试程序。 2.作业内容

熟练掌握所学语言的基本知识:数据类型(整形、实型、字符型、指针、数组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);大程序的功能分解方法(即函数的使用)等。进一步掌握各种函数的应用等。 3.要求: 1.要求每个同学都要认真对待,积极参与。 2.独立完成,不能抄袭。 3.课程设计结束时每位同学必须完成《大作业报告册》,其中包含设计源 代码和设计思路。 4.不符合要求的程序、设计报告、抄袭的设计报告或源程序代码、在设 计中完全未参与的将作不及格处理。 5.统一格式,A4打印,按时提交。 4.题目:设计要求:编写一个程序,求3x4数组的转置矩阵。要求在main函数里面读数,在change函数里面把矩阵转置。 5.程序设计 设计思路:1是先定义两个数组,一个是a[3][4],另一个是b[4][3]。2是将随便输入的12个数输入到a[3][4]。3是在change函数中将a[3][4]中值通过for循环的镶嵌将数组a[3][4]的值赋值给数组b[4][3]。4在主函数中将数组b[4][3]通过for循环的嵌套输出。 代码

数字图像处理 作业1汇总

数字图像处理 报告标题:01 报告编号: 课程编号: 学生姓名: 截止日期: 上交日期:

摘要 (1)编写函数计算灰度图像的均方误差(MSE)、信噪比(SNR)、峰值信噪比(PSNR)、平均绝对误差(MAE);(2)编写函数对灰度图像经行降采样,直接消除像素以及消除像素前进行简单平滑滤波;(3)编写函数对图像进行放大,分别使用像素直接复制和双线性插值的方法:(4)编写函数用题目给出的量化步骤Q去量化灰度图像,并给出相应的MSE和直方图;(5)编写函数对灰度图像执行直方图均衡化,显示均衡前后的直方图。同时,熟悉使用MATLAB,并且熟练操作对图像进行各种修改变换等。 KEY WORD :MATLAB MSE、PSNR 直方图量化

技术探讨 数字图像处理是基于Matlab来实现的,由于Matlab 独特的功能和对矩阵,图像,函数灵活的处理,因而用于图像的处理相当的方便。 task1 均方误差(MSE),信噪比(SNR),峰值信噪比(PSNR),平均绝对误差(MAE)。可以使用使用for循环语句,分别计算图像MSE/SNR/PSNR/MAE,具体的计算公式见附录代码,下面只附运算原理代码 均方误差(MSE): sum=sum+(a(i,j)-b(i,j))^2; MSE=sum/(M*N) 信噪比(SNR): sum2=sum2+a(i,j)^2; SNR=10*log10(sum2/MSE) 峰值信噪比(PSNR): sum=sum+(a(i,j)-b(i,j))^2; PSNR=10*log10(255^2/MSE) 平均绝对误差(MAE): sum=sum+a(i,j)+b(i,j); MAE=sum/(M*N) 在每次对同一个图像处理时它们的均方误差(MSE),信噪比(SNR),峰值信噪比(PSNR),平均绝对误差(MAE)都会有所不同,因为它是原图像与加噪后的图像比较,而电脑的每次操作都会对加噪过得图像有影响。 task3 按比例缩小灰度图像 (1)直接消除像素点: I1=g(1:m:end,1:m:end);I1 为缩小后的图像,g为原图。 (2)先平滑滤波再消除像素点: 滤波函数,g=imfilter(I,w,'corr','replicate'); task4 对图像的放大运用了pixel repetition法以及双线性插值法: 它有三种插值法:即最近邻插值(pixel repetition)、双线性插值、双三次插值(缩放倍数为0.5) ;缩放与放大由给定的参数来确定。 ;缩放与放大由给定的参数来确定。而缩小则同样适用I1=g(1:m:end,1:m:end); 而放大的代码为“J=imresize(I,m,'nearest');%使用pixel repetition法”和“J=imresize(I,m,'bilinear');%使用双线性插值法” 放大倍数更改m值即可 task4 对图像的量化,使用“J=histeq(I,x); ”,x为可变的量化步长 task5 灰度图像的量化和直方图均衡化直接调用函数。“J=histeq(I)”“imhist(I,64)”

数字图像处理大作业.doc

-------------精选文档 ----------------- 1、下图是一用于干涉原理进行测试的干涉场图像,要求判读条纹的间距,请 给出图像处理的方案并说明每一步的作用及其对其它处理步骤可能产生的影响。 解:步骤与思路: ○1.进行模糊处理,消除噪声 ○2.边缘检测,进行图像增强处理 ○3.二值化图像,再进行边缘检测,能够得到很清晰的边界。 ○4.采用横向标号法,根据值为1 像素在标号中的相邻位置可以确定间距 I=imread('xz mjt.bmp'); I1=medfilt2(I);%对图像中值滤波 imshow(I1); [m,n]=size(I1); for i=1:m for j=1:n if(I1(i,j)<100)% 阈值为 100 I1(i,j)=255; else I1(i,j)=0;%进行二值化

-------------精选文档 ----------------- end end end figure; imshow(I1); Y1=zeros(1,25); y2=y1; c=y2; i=100; for j=1:1200 if (I1(i,j)==255&&I1(i,j+1)==0) Y1=j+1; end if (I1(i,j)==0&&I1(i,j+1)==255) Y2=j; end end for i=1:25 c=Y2(i)-Y1(i) end c%找出每两个条纹之间的距离

2.现有 8 个待编码的符号 m0,,m7, 它们的概率分别为 0.11,0.02,0.08,0.04,0.39,0.05,0.06,0.25,利用哈夫曼编码求出这一组符号的编码并画出哈夫曼树。 3.请以图像分割方法为主题,结合具体处理实例,采用期刊论文格式,撰写一篇小论文。

数字图像处理大作业

1、下图是一用于干涉原理进行测试的干涉场图像,要求判读条纹的间距,请给 出图像处理的方案并说明每一步的作用及其对其它处理步骤可能产生的影响。 解:步骤与思路: ○1.进行模糊处理,消除噪声 ○2.边缘检测,进行图像增强处理 ○3.二值化图像,再进行边缘检测,能够得到很清晰的边界。 ○4.采用横向标号法,根据值为1像素在标号中的相邻位置可以确定间距 I=imread('xz mjt.bmp'); I1=medfilt2(I); %对图像中值滤波 imshow(I1); [m,n]=size(I1); for i=1:m for j=1:n if(I1(i,j)<100) %阈值为100 I1(i,j)=255; else I1(i,j)=0; %进行二值化 end end end figure; imshow(I1);

Y1=zeros(1,25); y2=y1; c=y2; i=100; for j=1:1200 if (I1(i,j)==255&&I1(i,j+1)==0) Y1=j+1; end if (I1(i,j)==0&&I1(i,j+1)==255) Y2=j; end end for i=1:25 c=Y2(i)-Y1(i) end c %找出每两个条纹之间的距离

2. 现有8个待编码的符号m0,……,m7,它们的概率分别为0.11,0.02,0.08,0.04,0.39,0.05,0.06,0.25,利用哈夫曼编码求出这一组符号的编码并画出哈夫曼树。 3. 请以图像分割方法为主题,结合具体处理实例,采用期刊论文格式,撰写一篇小论文。

C语言大作业报告

目录 一、设计题目 二、目标和需求分析 三、开发工具 四、应用平台 五、程序模块 1、游戏盒子 2、2048 3、扫雷 4、贪吃蛇 六、开发日志 七、程序调试及运行 八、程序开发总结 总结:虽然做出来的东西真的没什么技术水平,但是我们尽量把这个东西的每个方方面面做完整。

目标和需求分析一个小的游戏盒子,可以用来启动其它游戏,当然,其它游戏也是我们大作业的编写内容,平时可以玩玩用来打发时间 用到的工具VS2005 Easyx图形库 Pthread线程库 Hge 分工 秦贤康 组织大家,编写主程序,及构思计划,技术指导 王尧 所有的文件处理,数据算法方面优化 王懿晨 合作2048模块 杨梓晗 图片资源加工,音乐裁剪,按钮制作 程维驰 合作扫雷模块 应用平台:WINDOWS X64

程序功能模块: 一、 安装包:(写入开始菜单快捷方式,桌面快捷方式,开机启动等)//pascal 脚本编写 #define MyAppName "C 大作业" #define MyAppVersion "2.0" #define MyAppPublisher "五人小组" #define MyAppExeName "1.exe" [Setup] AppId={{49DB1DB4-FAE9-4ACB-A4B9-E5C420C5F10B} AppName={#MyAppName} AppVersion={#MyAppVersion} ;AppVerName={#MyAppName} {#MyAppVersion} AppPublisher={#MyAppPublisher} DefaultDirName={pf}\{#MyAppName} DisableDirPage=yes DefaultGroupName={#MyAppName} DisableProgramGroupPage=yes (剩余代码未全部给出) 安装包 内嵌:C 语言报告 游戏盒子 开机启动,桌面快捷方式等 进入动画,左侧动画 启动模块 通知,和显示游戏信息 2048 扫雷 贪吃蛇 主界面信息显示 通知栏信息显示 意见箱

数字图像处理部分作业答案

3.数字化图像的数据量与哪些因素有关? 答:数字化前需要决定影像大小(行数M、列数N)和灰度级数G的取值。一般数字图像灰度级数G为2的整数幂。那么一幅大小为M*N,灰度级数为G的图像所需的存储空间M*N*g(bit),称为图像的数据量 6.什么是灰度直方图?它有哪些应用?从灰度直方图你能获得图像的哪些信息? 答:灰度直方图反映的是一幅图像中各灰度级像素出项的频率之间的关系。以灰度级为横坐标,纵坐标为灰度级的频率,绘制频率同灰度级的关系图就是灰度直方图。 应用:通过变换图像的灰度直方图可以,使图像更清晰,达到图像增强的目的。 获得的信息:灰度范围,灰度级的分布,整幅图像的平均亮度。但不能反映图像像素的位置。 2. 写出将具有双峰直方图的两个峰分别从23和155移到16和255的图像线性变换。 答:将a=23,b=155 ;c=16,d=255代入公式: 得 1,二维傅里叶变换有哪些性质?二维傅里叶变换的可分离性有何意义? 周期性,线性,可分离性,比例性质,位移性质,对称性质,共轭对称性,差分,积分,卷积,能量。 意义:分离性表明:二维离散傅立叶变换和反变换可用两组一维离散傅立叶变换和反变换来完成。 8.何谓图像平滑?试述均值滤波的基本原理。 答:为了抑制噪声改善图像质量所进行的处理称图像平滑或去噪。 均值滤波是一种局部空间域处理的算法,就是对含有噪声的原始图像f(x,y)的每个像素点取一个领域S,计算S中所有像素的灰度级平均值,作为空间域平均处理后图像g(x,y)像素值。 9.何谓中值滤波?有何特点? 答:中值滤波是对一个滑动窗口内的诸像素灰度值排序,用中值代替窗口中心像素的原来灰度值,它是一种非线性的图像平滑法。 它对脉冲干扰及椒盐噪声的的图像却不太合适。抑制效果好,在抑制随机噪声的同时能有效保护边缘少受模糊。但它对点、线等细节较多 6图像几何校正的一般包括哪两步?像素灰度内插有哪三种方法?各有何特点? 答:1)建立失真图像和标准图像的函数关系式,根据函数关系进行几何校正。 2)最近邻插值,双线性插值,三次卷积法 3)最近邻插值:这种插值方法运算量小,但频域特性不好。 3、若f(1,1)=4,f(1,2)=7,f(2,1)=5,f(2,2)=6,分别按最近邻元法、双线性插值法确定点(1.2,1.6)的灰度值。 最近邻元法:点(1.2,1.6)离(1,2)最近,所以其灰度值为7.双线性法:f(i+u,j+v)=(1-u)(1-v)f(i,j)+(1-u)vf(i,j+1)+u(1-v)f(i+1,j)+uvf(i+1,j+1) 将i=1,j=1,u=0.2,v=0.6代入,求得:f(i+u,j+v)=5.76。四舍五入取整后,得该点其灰度值为6

数字图像处理大作业

大作业要求 1.数字图像处理中的图像增强、图像分割、数学形态学、图像编码这几个章节中,围绕你所感兴趣的题目写一篇综述。 2.要求: (1)在中国知网上下载5篇以上相关文章,结合上课所学内容,确定综述的内容。(2)文字3000字以上,包含 a. 课题背景和概述 b. 国内外研究现状 c. 技术应用(可以实现哪些功能,实 现的方法及结果 d. 结论 e. 学习体会 f.参考文献 (3)综述的排版: 正文层次格式如下: 1(空两格)×××××(居中,三号宋体,加粗,占4行) 1.1×××(左顶格,四号宋体,加粗,占 2.5行,不接排) 1.1.1×××(左顶格,小四号宋体,加粗,占2行,不接排) a.(左空两格,a.后空一格)×××(小4号宋体,加粗) (正文)×××××(小4 号宋体,接排)

(1)(左空两格,(1)后空一格)×××(小4号宋体,加粗) (正文)×××××(小4号宋体,接排) 1)(左空两格,1)后空一格)(小4号宋体,加粗) (正文)×××××(小4号宋体,接排) 正文中段落一律段前、段后0磅,行距为20磅,对齐方式:两端对齐。小4号字体。 论文中的图和表居中,并且有图题和表题。 例如: 图 1 主站工作过程(5号字体,加粗) 表1 不同总线速率下从站的延迟时间(5号字体,加粗) 速率(Kbit/s ) 9.6 19.2 93.75 187.5 500 1500 1200SDR minT (bit T ) 11 11 11 11 11 11 11 SDR maxT (bit T ) 60 60 60 60 100 150 800 参考文献按照下面形式给出: 参考文献 (居中,三号,宋体,加粗,占4行)

C语言大作业设计-

CHANGZHOU INSTITUTE OF TECHNOLOGY C语言大作业 设计说明书 题目: 通讯录管理系统 二级学院(直属学部):计算机信息工程学院 专业: 软件工程(中英合作)班级: 12软件二: 学号: 2013年7月 目录

1 概述 (1) 1.2设计分析 (1) 1.3开发工具 (1) 1.4应用平台 (1) 2 系统设计 (2) 2.1功能模块设计 (2) 2.2数据结构设计 (4) 2.3函数功能设计 (4) 3 实现与测试 (7) 3.1关键技术实现 (7) 3.2测试运行结果 (8) 4 开发日志 (14) 5 设计总结 (14) 6 参考文献 (14)

1 概述 1.1 小组构成及分工 1.2 设计分析 本程序设计共包含六个函数模块,分别是添加记录、显示记录、删除记录、查询记录、修改记录、保存记录等信息模块,完成通讯录的功能。在主函数中可以以1、2、3、4、 5、6数字键分别可以执行某个功能模块。 1.3 开发工具 Visual C++ 6.0 和window32 1.4 应用平台 Windows XP 32位 2 系统设计 2.1功能模块设计

1.系统模块图 本系统包括6个模块,分别是添加模块、显示模块、删除模块、查询模块、修改模块、保存模块等,各模块的功能如图2.1所示。各个模块的功能描述如下: (1)添加模块:可以添加通讯录记录,依次输入、年龄、、地址、电子后,并会提示是否继续添加。 (2)显示模块:可以以表格形式输出所有通讯录里的记录。 (3)删除模块:输入欲删除的那个人的名字后,会自动删除他(她)的记录容。 (4)查询模块:可以选择用、、地址三种方式查询。 (5)修改模块:输入欲修改的那个人的名字后,再依次输入、年龄、、地址、电子完成修改。 (6)保存模块:输入文件名(带后缀名)后,即可将通讯录信息保 存到文件。 图2.1 系统模块图 2.任务执行流程图

(完整版)数字图像处理大作业

数字图像处理 1.图像工程的三个层次是指哪三个层次?各个层次对应的输入、输出对象分别是什么? ①图像处理 特点:输入是图像,输出也是图像,即图像之间进行的变换。 ②图像分割 特点:输入是图像,输出是数据。 ③图像识别 特点:以客观世界为中心,借助知识、经验等来把握整个客观世界。“输入是数据,输出是理解。 2.常用的颜色模型有哪些(列举三种以上)?并分别说明颜色模型各分量代表的意义。 ①RGB(红、绿、蓝)模型 ②CMY(青、品红、黄)模型 ③HSI(色调、饱和度、亮度)模型 3.什么是图像的采样?什么是图像的量化? 1.采样 采样的实质就是要用多少点来描述一幅图像,采样结果质量的高低就是用前面所说的图像分辨率来衡量。简单来讲,对二维空间上连续的图像在水平和垂直方向上等间距地分割成矩形网状结构,所形成的微小方格称为像素点。一副图像就被采样成有限个像素点构成的集合。例如:一副640*480分辨率的图像,表示这幅图像是由640*480=307200个像素点组成。 2.量化 量化是指要使用多大范围的数值来表示图像采样之后的每一个点。量化的结果是图像能够容纳的颜色总数,它反映了采样的质量。 针对数字图像而言: 采样决定了图像的空间分辨率,换句话说,空间分辨率是图像中可分辨的最小细节。 量化决定了图像的灰度级,即指在灰度级别中可分辨的最小变化。 数字图像处理(第三次课)

调用图像格式转换函数实现彩色图像、灰度图像、二值图像、索引图像之间的转换。 图像的类型转换: 对于索引图像进行滤波时,必须把它转换为RGB图像,否则对图像的下标进行滤波,得到的结果是毫无意义的; 2.用MATLAB完成灰度图像直方图统计代码设计。

《数字图像处理》复习大作业及答案

2014年上学期《数字图像处理》复习大作业及参考答案 ===================================================== 一、选择题(共20题) 1、采用幂次变换进行灰度变换时,当幂次取大于1时,该变换是针对如下哪一类图像进行增 强。(B) A 图像整体偏暗 B 图像整体偏亮 C图像细节淹没在暗背景中D图像同时存在过亮和过暗背景 2、图像灰度方差说明了图像哪一个属性。(B ) A 平均灰度 B 图像对比度 C 图像整体亮度D图像细节 3、计算机显示器主要采用哪一种彩色模型( A ) A、RGB B、CMY或CMYK C、HSI D、HSV 4、采用模板[-1 1]T主要检测( A )方向的边缘。 A.水平 B.45? C.垂直 D.135? 5、下列算法中属于图象锐化处理的是:( C ) A.低通滤波 B.加权平均法 C.高通滤波 D. 中值滤波 6、维纳滤波器通常用于( C ) A、去噪 B、减小图像动态范围 C、复原图像 D、平滑图像 7、彩色图像增强时, C 处理可以采用RGB彩色模型。 A. 直方图均衡化 B. 同态滤波 C. 加权均值滤波 D. 中值滤波 8、__B__滤波器在对图像复原过程中需要计算噪声功率谱和图像功率谱。 A. 逆滤波 B. 维纳滤波 C. 约束最小二乘滤波 D. 同态滤波 9、高通滤波后的图像通常较暗,为改善这种情况,将高通滤波器的转移函数加上一常数量以 便引入一些低频分量。这样的滤波器叫B。 A. 巴特沃斯高通滤波器 B. 高频提升滤波器 C. 高频加强滤波器 D. 理想高通滤波器 10、图象与灰度直方图间的对应关系是 B __ A.一一对应 B.多对一 C.一对多 D.都不 11、下列算法中属于图象锐化处理的是:C A.低通滤波 B.加权平均法 C.高通滤 D. 中值滤波 12、一幅256*256的图像,若灰度级数为16,则存储它所需的比特数是:( A ) A、256K B、512K C、1M C、2M 13、噪声有以下某一种特性( D ) A、只含有高频分量 B、其频率总覆盖整个频谱 C、等宽的频率间隔内有相同的能量 D、总有一定的随机性 14. 利用直方图取单阈值方法进行图像分割时:(B) a.图像中应仅有一个目标 b.图像直方图应有两个峰 c.图像中目标和背景应一样大 d. 图像中目标灰度应比背景大 15. 在单变量变换增强中,最容易让人感到图像内容发生变化的是( C )

C语言大作业报告范文

学院XX学院

目录 1 摘要 (3) 1.1设计题目 (3) 1.2设计容 (3) 1.3开发工具 (3) 1.4应用平台 (3) 2 详细设计 (3) 2.1程序结构 (3) 2.2主要功能 (3) 2.3函数实现 (3) 2.4开发日志 (4) 3 程序调试及运行 (4) 3.1程序运行结果 (4) 3.2程序使用说明 (4) 3.3程序开发总结 (4) 4 附件(源程序) (4)

1 摘要 1.1 设计题目 (A)求最大数;(B)高次方数的尾数 1.2 设计容 (A)求555555的约数中最大的三位数; (B)求13的13次方的最后三位数1.3 开发工具 Visual C++ 6.0和Win32。 1.4 应用平台 Windows XP 32位 2 详细设计 2.1 程序结构 (A)求最大数

定义变量a、b、c,a从100至999递增,b为555555,用b除以a,判断是否可以整除,若可以,则把a的值赋给c,a自加1;若不可,a自加1。重复以上步骤,直到a>999,输出c。循环语句采用for 循环。 (B)高次方数的尾数

定义变量i、j,i从1至13递增,j初值为1。用j乘以13,用得到的乘积除以1000并取其余数,赋给j,i自加1。重复以上步骤,直到i>13,输出j。循环语句采用for循环。

2.2 主要功能 程序功能:(A)求555555的约数中最大的三位数; (B)求13的13次方的最后三位数。 原理和方法: (A)题目的原理和方法:因为要求的是三位数,就用555555从小到大依次除以100到999的所有数,并判断能否整除,最后一个可以整除555555的数即为所求。循环语句采用for循环。 (B)题目的原理和方法:乘积的最后三位数只与乘数和被乘数的后三位数有关,因此用1乘以13,再除以1000并取余数,用余数乘以13,再除以1000并取余数,依次进行下去,累乘13个13后除以1000取得的余数即为所求。循环语句采用for循环。 2.3 函数实现 (A)求最大数 int a,b=555555,c; /*定义变量,赋初值*/ for(a=100;a<=999;a++) /*FOR循环*/ { if(b%a==0) /*利用IF语句判断b是否可以被a整除*/ c=a; /*将555555的约数赋给c*/ } printf("%d\n",c); /*输出c*/ (B)高次方数的尾数 int i,j=1; /*定义变量,赋初值*/ for(i=1;i<=13;i++) /*FOR循环*/ { j=j*13%1000; /*将j乘以13的乘积的后三位数赋给j*/ } printf("%d\n",j); /*输出j*/ 2.4 开发日志 (A)选定这个题目后,我先分析此题用何种算法完成,确定了使用FOR循环并限定除数围,然后画出程序框图,再一步步编写源代码。调试过程很顺利,只有一个地方忘加了“;”。运行程序后,结果非常满意。 (B)这个题目不难,但是也不简便,我想到只取三位数的方法,并使用FOR循环,然后画出程序框图,再一步步编写源代码。调试过程发现对其中一个变量的初值是1还是13有待解决,分析程序后发现应该用1,然后进一步调试,运行,直至结果正确。

数字图像处理作业 1

数字图像处理作业 1 1.基本问题 a.什么是数字图像处理,英语全称是什么? 数字图像处理:对图像进行一些列的操作,以达到预期目的的技术,可分为模拟图像处理和数字图像处理两种方式。英文全称:Image Processing b.数字图像处理与什么领域的发展密切相关? 数字图像处理与数字计算机的发展,医学,遥感,通信,文档处理和工业自动化等许多领域的发展密切相关。 c.人类主要通过什么来感知获取信息的? 主要通过人的视觉、味觉、嗅觉、触觉、听觉以及激光、量子通信、现代计算机网络、卫星通信、遥感技术、数码摄影、摄像等来获取信息。 d.数字图像处理技术与哪些学科领域密切相关? 与数学、物理学、生理学、心理学、电子学、计算机科学等学科密切相关 e.数字图像处理在哪些领域得到广泛应用? 数字图像处理的应用越来越广泛,已渗透到工程、工业、医疗保健、航空航天、军事、科研、安全保卫等各个领域。 f.数字图像处理起源于什么年代? 20世纪20年代 g.现代大规模的图像处理需要具备哪些计算机能力? 需要具备图像处理、图像分析、图像理解计算机能力 h.根据人的视觉特点,图像可分为哪两种图像? 分为可见图像和不可见图像。 i.根据光的波段,图像可分为哪几种图像? 分为单波段、多波段和超波段图像。 j.图像数字与模拟图像的本质区别是什么? 区别: 模拟图像:空间坐标和明暗程度都是连续变化的、计算机无法直接处理。 数字图像:空间的坐标和灰度都不连续、用离散的数字表示,能被计算机处理。 2.通过互联网,查下数字图像处理有哪些应用?选一个应用范例即可。具体描绘如何通过数字图像处理技术来实现其应用。要有图像范例说明。 数字图像处理主要应用领域有:生物医学,遥感领域,工业方面,军事公安领域,通信领域,交通领域等。我就生物医学领域做一个简单介绍。 自伦琴1895年发现X射线以来,在医学领域可以用图像的形式揭示更多有用的医学信息医学的诊断方式也发生了巨大的变化。随着科学技术的不断发展,现代医学已越来越离不开医学图像的信息处理,医学图像在临床诊断、教学科研等方面有重要的作用。目前的医学图像主要包括CT (计算机断层扫描) 图像、MRI( 核磁共振)图像、B超扫描图像、数字X 光机图像、X 射线透视图像、各种电子内窥镜图像、显微镜下病理切片图像等。 医学图像处理跨计算机、数学、图形学、医学等多学科研究领域,医学图像处理技术包括图像变换、图像压缩、图像增强、图像平滑、边缘锐化、图像分割、图像识别、图像融合等等。在此联系数字图像处理的相关理论知识和步骤设计规划系统采集和处理的具体流程同时充分考虑到图像采集设备的拍摄效果以及最终处理结果的准确性。下面是关于人体微血管显微图像的采集实例。

数字图像处理大作业要点

数字图像处理实验报告 学院:信息学院 专业:电科1004班 姓名: 学号: 辅导老师: 完成日期: 2013年6月29日 空域图像增强 实验要求:

(1)选择若干图像(两幅以上),完成直方图均衡化。 (2)选择若干图像(两幅以上),对图像文件分别进行均值滤波、中值滤波和拉 普拉斯锐化滤波操作。 (3)添加噪声,重复上述过程观察处理结果。 实验原理: (1)图像增强是图像处理的基本内容之一,图像增强是指按特定的需要突出一幅 图像中的某些信息,同时削弱或去除某些不需要信息的处理方法,其目的是使得处理后的图像对某种特定的应用,比原始图像更合适。处理的结果使图像更适应于人的视觉特性或机器的识别系统。图像增强主要可分为三类:频域图像增强方法、小波域图像增强方法、空域图像增强方法。 (2)空域图像增强主要包括:直方图均衡化、平滑滤波和锐化滤波等方法。 (3)直方图均衡化是图像处理领域中利用图像直方图对对比度进行调整的方法。 这种方法通常用来增加许多图像的局部对比度,尤其是当图像的有用数据的对比度相当接近的时候。通过这种方法,亮度可以更好地在直方图上分布。 这样就可以用于增强局部的对比度而不影响整体的对比度,直方图均衡化通过有效地扩展常用的亮度来实现这种功能。直方图均衡化的基本思想是把原始图的直方图变换为均匀分布的形式,这样就增加了象素灰度值的动态范围从而可达到增强图像整体对比度的效果。 (4)平滑滤波是低频增强的空间域滤波技术。它的目的有两类:一类是模糊;另 一类是消除噪音。空间域的平滑滤波一般采用简单平均法进行,就是求邻近像元点的平均亮度值。 (5)均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板, 该模板包括了其周围的临近像素(以目标象素为中心的周围8个象素,构成一个滤波模板,即去掉目标象素本身)。再用模板中的全体像素的平均值来代替原来像素值。均值滤波也称为线性滤波,其采用的主要方法为邻域平均法。 线性滤波的基本原理是用均值代替原图像中的各个像素值,即对待处理的当前像素点(x,y),选择一个模板,该模板由其近邻的若干像素组成,求模板中所有像素的均值,再把该均值赋予当前像素点(x,y),作为处理后图像在该点上的灰度个g(x,y),即个g(x,y)=1/m ∑f(x,y) m为该模板中包含当前像素在内的像素总个数。 (6)中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号处理技 术,中值滤波的基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近的真实值,从而消除孤立的噪声点。方法是用某种结构的二维滑动模板,将板内像素按照像素值的大小进行排序,生成单调上升(或下降)的为二维数据序列。二维中值滤波输出为g(x,y)=med{f(x-k,y-l),(k,l∈W)} ,其中,f(x,y),g(x,y)分别为原始图像和处理后图像。W为二维模板,通常为2*2,3*3区域,也可以是不同的的形状,如线状,圆形,十字形,圆环形等。 (7)拉式算子是一个刻画图像灰度的二阶商算子,它是点、线、边界提取算子, 亦称为边界提取算子。通常图像和对他实施拉式算子后的结果组合后产生一个锐化图像。拉式算子用来改善因扩散效应的模糊特别有效,因为它符合降制模型。 拉普拉斯算子也是最简单的各向同性微分算子,具有旋转不变性。一个二维

西安交通大学大学数字图像处理大作业

数字图像处理

目录 作业一 (1) 一作业要求 (1) 二源代码 (1) 三运行结果 (3) 作业二 (5) 一作业要求 (5) 二算法描述 (5) 三源代码 (7) 四运行结果 (10)

作业一 一作业要求 在图像的空间域滤波操作中,会出现有部分掩膜矩阵在图像外面的情况,所以需要给图像先加入一个边界,执行完操作之后,再去掉这个边界,保证图像中所有的像素都参与矩阵运算。 二源代码 byte[,] filter(byte[,]f,float[,]mask) { int w = f.GetLength(0); int h = f.GetLength(1); byte[,] g = new byte[w,h]; int M = mask.GetLength(0)/2; int N = mask.GetLength(1)/2; for (int y=N;y255) return 255; if (v<0) return 0; return (byte)v;

} float[,] averagingMask(intM,int N) { float[,] mask = new float[2*M+1,2*N+1]; for (int m=-M;m<=M;m++) for (int n=-N;n<=N;n++) mask[M+m,N+n] = 1.0f/((2*M+1)*(2*N+1)); return mask; } byte[,] addboard(byte[,] f,intM,int N) { int w=f.GetLength(0); int h=f.GetLength(1); intgw=w+2*M; intgh=h+2*N; byte[,] g=new byte[gw,gh]; //add top board and bottom board for(inti=0;i

C语言课程设计大作业62994

郑州大学 课程报告 课程名称:C语言程序设计 专业班级:(15)班 学生姓名:谢* 学号: 20127611*** 任课教师:赵** 学期: 2012-2013-2 课程报告任务书

开发一个通讯录管理系统,基本信息包括:编号、姓名、性别、出生年月、固定电话、手机号、电子邮件等基本信息(也可以根据自己情况进行扩充)。使之能提供以下基本功能: (1)通讯录等信息录入功能(注:数据等要求用文件保存)--输入 (2)通讯录信息的浏览功能--输出 (3)查询功能(至少一种查询方式)、排序功能(至少一种排序方式): ①按电话号码进行查询②按姓名查询等③按照年龄排序④按姓名排序等(4)通讯录条目的删除与修改等 扩展功能:可以按照自己的程度进行扩展。比如(1)简单的权限处理(2)报表打印功能(3)模糊查询,如姓张的人员等;或者给定电子邮件的部分进行查询等(4)给定指定年龄范围之内的查询等等。 总之,可以根据自己需求进行分析功能,成绩评定按照难度进行区分。 成绩评定教师:

一. 需求分析 1,具有数据的插入、修改、删除、显示和查询功能的电话簿管理程序。 2,数据包括:人名、工作单位、电话号码和E-MAIL地址。 3,可对记录中的姓名和电话号码进行修改。 4,可增加和删除记录。 5,可显示所有的保存记录。 6,可按人名或电话号码进行查询。 分析 建议采用结构体数组和文件系统实现。结构体成员包括人名、工作单位、电话号码和E-MAIL地址。 根据题目的要求程序应该采用结构体数组和文件系统实现。应该有文件的操作功能;在程序中应该包括输入、显示、删除、查询、添加、修改、保存、加载和退出的功能。 二、概要设计 (1).程序的模块组成及各个函数的功能: 程序的模块组成: 主函数:main(); 输出数据函数:printf(); 读取数据函数:scanf(); 显示记录函数:Display(); 删除记录函数:shanchu(); 查找记录函数:chaxun(); 自定义清屏函数:system(“cls”); 自定义输入函数:input(); 字符输入函数:getchar(); 修改数据函数:xiugai(); 保存数据函数:baocun(); 排序数据函数:paixu(); 各函数的主要功能:

数字图像处理大作业

[HW5][24]SA11009045_张海滨 大作业 1、行模糊、锐化、和直方图均衡化。 程序: I=imread('E:\研一\数字图像处理\作业\HW5\DSC00003.JPG'); figure,imshow(I),title('原始图像'); I1=rgb2gray(I); I1=imresize(I1,0.5); figure,imshow(I1),title('灰度图像'); h=ones(5,5)/25; I2=imfilter(I1,h); figure,imshow(I2),title('模糊处理'); J=double(I1); h1=fspecial('laplacian'); I3=filter2(h1,J); figure,imshow(I3),title('锐化处理'); I4 = histeq(I1,256); figure,imhist(I1),title('原图像直方图'); figure,imshow(I4),title('均衡化处理'); figure,imhist(I4),title('均衡化后直方图'); 进行运算的结果为: 原始图像

此为进行处理的原始图像。进行图像灰度化并把图像的大小进行调整为原来的一半,得到图像: 对图像分别进行均值滤波器模糊、拉普拉斯算子锐化处理,得到的结果如下图:

方图如下所示。

2、边缘检测,程序: I=imread('F:\研一\数字图像处理\作业\HW5\DSC00003.JPG'); I1=rgb2gray(I); I1=imresize(I1,0.5); J=double(I1); H=[0 1 0;1 -4 1;0 1 0]; J=conv2(J,H,'same'); J=I1-J; subplot(1,2,1); imshow(I1),title('灰度图像'); subplot(1,2,2); imshow(J),title('Laplace算子边缘检测'); G1 = [-1 -2 -1;0 0 0;1 2 1]; G2 = G1'; Iedge=I1; I2x = filter2(G1,Iedge); I2y = filter2(G2,Iedge); I2=abs(I2x+I2y); I22 = mat2gray(I2);

数字图像处理大作业报告

数字图像处理 实验报告 实验选题:选题二 组员: 学号: 班级: 指导老师: 实验日期:2019年5月22日

一、实验目的及原理 1.识别出芯片的引脚 2.熟悉并掌握opencv的某些函数的功能和使用方法 原理:通过滤波、形态学操作得到二值图,再在二值图中设置条件识别引脚部分。 二、实现方案 对图片滤波、调节阈值做边缘检测过滤掉一部分图片中干扰元素;然后通过膨胀、腐蚀操作来减少引脚的空心部分;再通过findContours()函数找到引脚的边缘并得到轮廓的点集,设置特定的长宽比和矩形面积识别引脚部分。 三、实验结果

四、源码 #include #include #include"opencv2/highgui/highgui.hpp" #include"opencv2/imgproc/imgproc.hpp" using namespace std; using namespace cv; int main(int argv, char **argc) { //载入图片 Mat srtImag = imread("2.jpg"); Mat G_blur = srtImag.clone(); //降噪 blur(G_blur, G_blur, Size(5, 5)); //imshow("降噪", G_blur); //Canny边缘检测 Mat Canny_Imag = G_blur; Canny_Imag = Canny_Imag > 176; Canny(G_blur, Canny_Imag, 300, 50, 3); //imshow("边缘检测", Canny_Imag); //膨胀 Mat element = getStructuringElement(MORPH_RECT, Size(10, 10)); dilate(Canny_Imag, Canny_Imag, element); //imshow("膨胀", Canny_Imag); //腐蚀 Mat element_1 = getStructuringElement(MORPH_RECT, Size(11, 11)); erode(Canny_Imag, Canny_Imag, element_1); //imshow("腐蚀", Canny_Imag); //查找轮廓 vector>contours; vectorhierarchy; findContours(Canny_Imag, contours, hierarchy, RETR_CCOMP, CHAIN_APPROX_SIMPLE); vector> contour_s(contours.size());//该数组共有contours.size()个轮廓的点集 vector Rec_s(contours.size());//逼近多边形的点集数组

相关文档