数字图像处理实验报告.docx

上传人:b****6 文档编号:6711698 上传时间:2023-01-09 格式:DOCX 页数:25 大小:3.55MB
下载 相关 举报
数字图像处理实验报告.docx_第1页
第1页 / 共25页
数字图像处理实验报告.docx_第2页
第2页 / 共25页
数字图像处理实验报告.docx_第3页
第3页 / 共25页
数字图像处理实验报告.docx_第4页
第4页 / 共25页
数字图像处理实验报告.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

数字图像处理实验报告.docx

《数字图像处理实验报告.docx》由会员分享,可在线阅读,更多相关《数字图像处理实验报告.docx(25页珍藏版)》请在冰豆网上搜索。

数字图像处理实验报告.docx

数字图像处理实验报告

实验一图象显示

一、实验目的:

掌握在计算机上显示图象的方法

二、实验要求:

1、熟悉参考程序,熟悉C语言。

2、输入图象显示源程序,建立C语言程序调试环境。

3、在计算机屏幕上显示制定的图像(提供两个图像文件A2和B2),并计算显示其灰度直方图。

4、修改程序,在屏幕上显示256*256的对度图像(灰度变化分别是左边暗-右边亮、左下暗-中间亮-右上暗、左上暗-中间亮-右下暗)。

三、实验程序

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

unionREGSiregs,oregs,sregs;

doubledata1[512],data2[512],max1,bu1[3],bu2[3];

unsignedcharimage1[128][128],image2[128][128];

intmax;

main(intargc,char*argv[])/----参数argc代表了输入参数的个数,char*argv[]表示传入的参数的字符串,是一个字符串数组。

------/

{

FILE*fp,*fp1;

inta,b,c,x,y,z;

intn,isi,driver,mode1;

unsignedchard[128][128],datam[256];

driver=DETECT;

mode1=2;

initgraph(&driver,&mode1,"");/---initgraph()函数直接进行的图形初始化程序------/

iregs.x.ax=0x0100;

iregs.x.cx=0x0000;

int86(0x10,&iregs,&oregs);

closegraph();

driver=DETECT;

mode1=2;

initgraph(&driver,&mode1,"");

iregs.x.ax=0x005f;

int86(0x10,&iregs,&oregs);

for(a=0;a<256;a++){

iregs.x.ax=0x1010;

iregs.x.bx=a;

iregs.h.dh=a/4;

iregs.h.ch=a/4;

iregs.h.cl=a/4;

int86(0x10,&iregs,&oregs);

}

fp=fopen("f:

\\exp\\tc\\a2","rb");

for(a=0;a<64;a++){

fread(datam,64,1,fp);

for(b=0;b<64;b++){

putpixel2(b*2+256,a*2+100,(int)datam[b]);

putpixel2(b*2+257,a*2+100,(int)datam[b]);

putpixel2(b*2+256,a*2+101,(int)datam[b]);

putpixel2(b*2+257,a*2+101,(int)datam[b]);

}

}

fclose(fp);

getch();

closegraph();

}

getpixel2(inta,intb)/--显示像素---/

{

iregs.h.ah=0xd;

iregs.x.dx=b;

iregs.x.cx=a;

iregs.x.bx=0;

int86(0x10,&iregs,&oregs);

return(oregs.h.al);

}

putpixel2(inta,intb,intnum)

{

iregs.h.ah=0xc;

iregs.h.al=num;

iregs.x.dx=b;

iregs.x.cx=a;

iregs.x.bx=0;

int86(0x10,&iregs,&oregs);

}

Ⅰ、显示256*256的灰度图象(灰度变化分别是左边暗-右边亮)的程序修改:

红色区域内改为

fp=fopen(argv[1],"rb");

for(a=0;a<64;a++){

fread(datam,64,1,fp);

for(b=0;b<64;b++){

putpixel2(b*2+256,a*2+100,b);

putpixel2(b*2+257,a*2+100,b);

putpixel2(b*2+256,a*2+101,b);

putpixel2(b*2+257,a*2+101,b);

Ⅱ、显示256*256的灰度图象(灰度变化分别是左下暗-中间亮-右上暗)的程序修改:

红色区域内改为

fp=fopen(argv[1],"rb");

for(a=0;a<256;a++){

fread(datam,256,1,fp);

for(b=0;b<256;b++){

putpixel2(b*2+256,a*2+100,256-abs(a+b-256));

putpixel2(b*2+257,a*2+100,256-abs(a+b-256));

putpixel2(b*2+256,a*2+101,256-abs(a+b-256));

putpixel2(b*2+257,a*2+101,256-abs(a+b-256));

Ⅲ、显示256*256的灰度图象(灰度变化分别是左上暗-中间亮-右下暗)的程序修改:

红色区域内改为

fp=fopen(argv[1],"rb");

for(a=0;a<256;a++){

fread(datam,256,1,fp);

for(b=0;b<256;b++){

putpixel2(b*2+256,a*2+100,abs(a+b-256));

putpixel2(b*2+257,a*2+100,abs(a+b-256));

putpixel2(b*2+256,a*2+101,abs(a+b-256));

putpixel2(b*2+257,a*2+101,abs(a+b-256));

四、实验小结:

通过本次实验学会了如何用c语言显示图像以及用c语言进行图像的位置显示和位置灰度变换的处理的方法。

 

实验二图象的二维傅立叶变换

一、实验目的:

掌握在计算机上进行二维傅立叶变换的编程方法以及显示变换图象的方法

二、实验要求:

1、编写二维傅立叶变换的C语言程序及相应的显示程序。

2、建立输入图象,在64*64的白色图象矩阵的中心建立16*16的黑色矩形图像点阵,形成图象文件(共4096字节)。

3、对输入图象进行变换,将原始图象及变换图象都显示于屏幕上。

4、调整输入图象中白色矩形的尺寸,再进行变换,比较变换结果。

5、建立输入图象,在64*64的白色图象矩阵的中心建立半径为6个像素黑色的圆,形成图象文件。

对输入图象进行变换,将原始图象及变换图象都显示于屏幕上。

调整圆半径的尺寸,比较变换结果。

三、实验程序:

正方形的傅里叶变换:

for(a=0;a<128;a++){

for(b=0;b<128;b++){

if(a>=40&&a<88&&b>=40&&b<88)data1[b]=100.0;

elsedata1[b]=0.0;

data2[b]=0.0;

putpixel2(b,a+200,255-(int)data1[b]);

}

程序运行结果如下:

较大的正方形的傅里叶变换:

for(a=0;a<128;a++){

for(b=0;b<128;b++){

if(a>=25&&a<120&&b>=25&&b<120)data1[b]=100.0;

elsedata1[b]=0.0;

data2[b]=0.0;

putpixel2(b,a+200,255-(int)data1[b]);

}

程序运行结果如下:

矩形的傅里叶变换

for(a=0;a<128;a++){

for(b=0;b<128;b++){

if(a>=58&&a<70&&b>=40&&b<88)data1[b]=100.0;

elsedata1[b]=0.0;

data2[b]=0.0;

putpixel2(b+400,a+150,255-(int)data1[b]);

}

程序运行结果如下:

 

矩形的傅里叶变换

for(a=0;a<128;a++){

for(b=0;b<128;b++){

if(a>=40&&a<88&&b>=58&&b<70)data1[b]=100.0;

elsedata1[b]=0.0;

data2[b]=0.0;

putpixel2(b+400,a+150,255-(int)data1[b]);

}

程序运行结果如下:

矩形的傅里叶变换

for(a=0;a<128;a++){

for(b=0;b<128;b++){

if(a+b>=100&&a+b<=166&&(a-b<=20)&&(b-a<=20)data1[b]=100.0;

elsedata1[b]=0.0;

data2[b]=0.0;

putpixel2(b+400,a+150,255-(int)data1[b]);

}

程序运行结果如下:

矩形的傅里叶变换

for(a=0;a<128;a++){

for(b=0;b<128;b++){

if(a+b>=120&&a+b<=146&&(a-b<=50)&&(b-a)<=50)data1[b]=100.0;

elsedata1[b]=0.0;

data2[b]=0.0;

putpixel2(b+400,a+150,255-(int)data1[b]);

}

程序运行结果如下:

圆的傅里叶变换

for(a=0;a<128;a++){

for(b=0;b<128;b++){

if((a-63)*(a-63)+(b-63)*(b-63)<=24*24)data1[b]=100.0;

elsedata1[b]=0.0;

data2[b]=0.0;

putpixel2(b+400,a+150,255-(int)data1[b]);

}

程序运行结果如下:

四、实验小结:

通过本次实验,掌握了二维图像傅立叶变换的编程方法以及显示变换图像的方法。

实验三图象的增强

一、实验目的:

掌握在计算机上进行直方图均衡化及四点平滑的方法

二、实验要求:

1、编写直方图均衡化、四点平滑的C语言程序及相应的显示程序。

2、对指定图象进行直方图均衡化,将原始图象及增强后的图象都显示于屏幕上,比较增强的效果。

3、对指定图象进行四点平滑,将原始图象及增强后的图象都显示于屏幕上,比较增强的效果。

4、对指定图象用3×3模板进行平滑,将原始图象及增强后的图象都显示于屏幕上,比较增强的效果。

5、对指定图象用不同的3×3加权模板进行平滑,将原始图象及增强后的图象都显示于屏幕上,比较增强的效果。

三、实验程序:

(1)直方图均衡化

enchence()

{

inta,b,c,d,x,y;

longdata1[256];

for(c=0;c<256;c++)data1[c]=0;

for(b=0;b<64;b++)

for(a=0;a<64;a++)data1[*(buf+b*64+a)]++;

for(c=0;c<255;c++)data1[c+1]=data1[c]+data1[c+1];

for(c=0;c<256;c++)data1[c]=data1[c]*(long)255/(long)4096;

for(b=0;b<64;b++)

for(a=0;a<64;a++)*(buf+b*64+a)=data1[*(buf+b*64+a)];

for(y=0;y<64;y++)

for(x=0;x<64;x++){

putpixel2(x*2+300,y*2+120,*(buf+(long)y*64+x));

putpixel2(x*2+301,y*2+120,*(buf+(long)y*64+x));

putpixel2(x*2+300,y*2+121,*(buf+(long)y*64+x));

putpixel2(x*2+301,y*2+121,*(buf+(long)y*64+x));

}

}

图像显示如下:

(2)四点平滑

enchence()

{

inta,b,c,d,x,y;

unsignedchardatam[64];

intss[64][64];

intmm[64][64];

FILE*fp;

fp=fopen("e:

\\dip\\tc\\a2","rb");

for(a=0;a<64;a++)

{

fread(datam,64,1,fp);

for(b=0;b<64;b++)

{ss[a][b]=(int)datam[b];}

}

for(y=1;y<63;y++)

for(x=1;x<63;x++){

mm[y][x]=(ss[y+1][x]+ss[y][x-1]+ss[y-1][x]+ss[y][x+1])/4;

putpixel2(x*2+180,y*2+60,mm[y][x]);

putpixel2(x*2+181,y*2+60,mm[y][x]);

putpixel2(x*2+180,y*2+61,mm[y][x]);

putpixel2(x*2+181,y*2+61,mm[y][x]);

}

}

图像显示如下:

3×3模板平滑,原始图象及增强后的图象

enchence()

{

inta,b,c,d,x,y;

unsignedchardatam[64];

intss[64][64];

intqq[64][64];

FILE*fp;

fp=fopen("e:

\\dip\\tc\\a2","rb");

for(a=0;a<64;a++)

{

fread(datam,64,1,fp);

for(b=0;b<64;b++)

{ss[a][b]=(int)datam[b];}

}

for(y=1;y<63;y++)

for(x=1;x<63;x++){

qq[y][x]=(ss[y][x]+ss[y+1][x]+ss[y][x-1]+ss[y-1][x]+ss[y][x+1]+ss[y+1][x-1]+ss[y-1][x-1]+ss[y-1][x+1]+ss[y+1][x+1])/9;

putpixel2(x*2+180,y*2+60,qq[y][x]);

putpixel2(x*2+181,y*2+60,qq[y][x]);

putpixel2(x*2+180,y*2+61,qq[y][x]);

putpixel2(x*2+181,y*2+61,qq[y][x]);

}

}

图像显示如下:

不同的3×3加权模板平滑

3×3Box模板的主程序如下

 inta,b,c,d,x,y;

 for(b=1;b<63;b++)

  for(a=1;a<63;a++)

  {*(buf+b*64+a)=(*(buf+(b-1)*64+a-1)+*(buf+(b-1)*64+a)+*(buf+(b+1)*64+a+1)+*(buf+b*64+a-1)+*(buf+b*64+a)+*(buf+b*64+a+1)+*(buf+(b+1)*64+a-1)+*(buf+(b+1)*64+a)+*(buf+(b+1)*64+a+1))/9;}

   for(y=0;y<64;y++)

 for(x=0;x<64;x++){

    putpixel2(x*2+300,y*2+120,*(buf+(long)y*64+x));

    putpixel2(x*2+301,y*2+120,*(buf+(long)y*64+x));

    putpixel2(x*2+300,y*2+121,*(buf+(long)y*64+x));

    putpixel2(x*2+301,y*2+121,*(buf+(long)y*64+x));

显示的图像如下

3×3高斯模板主程序如下:

inta,b,c,d,x,y;

 for(b=1;b<63;b++)

  for(a=1;a<63;a++)

  {*(buf+b*64+a)=(*(buf+(b-1)*64+a-1)+(*(buf+(b-1)*64+a))*2+*(buf+(b+1)*64+a+1)+(*(buf+b*64+a-1))*2+(*(buf+b*64+a))*4+(*(buf+b*64+a+1))*2+*(buf+(b+1)*64+a-1)+(*(buf+(b+1)*64+a))*2+*(buf+(b+1)*64+a+1))/16;}

   for(y=0;y<64;y++)

 for(x=0;x<64;x++){

    putpixel2(x*2+300,y*2+120,*(buf+(long)y*64+x));

    putpixel2(x*2+301,y*2+120,*(buf+(long)y*64+x));

    putpixel2(x*2+300,y*2+121,*(buf+(long)y*64+x));

    putpixel2(x*2+301,y*2+121,*(buf+(long)y*64+x));

显示的图像如下:

 

四、实验小结:

通过本次实验掌握在计算机上进行直方图均衡化,四点平滑,八点平滑,邻域平均法及中值滤波等进行图像平滑的方法。

        

实验四图象的增强

一、实验目的:

掌握在计算机上进行图象平滑、图象锐化特别是中值滤波平滑及拉普拉斯算子锐化的方法

二、实验要求:

1.编写中值滤波的C语言程序以及相应的显示程序。

2.对指定图象进行中值滤波增强,将原始图象及增强后的图象都显示于屏幕上,比较增强的效果。

可与实验三的四点平滑的结果进行比较。

3.编写简单锐化(简单梯度算法、ROBERT算子)及拉普拉斯算子锐化的C语言程序以及相应的显示程序。

4.对指定图象进行简单梯度锐化和拉普拉斯算子增强,将原始图象及增强后的图象都显示于屏幕上,比较增强的效果。

三、实验内容及程序:

中值滤波的C语言主程序如下:

inta,b,c,d,x,y;

 unsignedchardatam[64];

       intss[64][64];

 intmm[64][64],m[64];

  intqq[9];

inti,j;

 for(a=0;a<64;a++)

{

  fread(datam,64,1,fp);

     for(b=0;b<64;b++)

     {ss[a][b]=(int)datam[b];}

}

   for(y=1;y<63;y++)

 for(x=1;x<63;x++){{qq[0]=ss[y-1][x-1];qq[1]=ss[y-1][x];qq[2]=ss[y-1][x+1];

 qq[3]=ss[y][x-1];qq[4]=ss[y][x];qq[5]=ss[y][x+1];

qq[6]=ss[y+1][x-1];qq[7]=ss[y+1][x];qq[8]=ss[y+1][x+1];

}

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

{for(j=i+1;j<9;j++)

if(qq[i]>qq[j])

{c=qq[i];qq[i]=qq[j];qq[j]=c;}}

mm[y][x]=qq[4];

    putpixel2(x*2+300,y*2+120,mm[y][x]);

    putpixel2(x*2+301,y*2+120,mm[y][x]);

    putpixel2(x*2+300,y*2+121,mm[y][x]);

    putpixel2(x*2+301,y*2+121,mm[y][x]);

显示后的图像如下所示:

ROBERT算子的主程序:

 inta,b,c,d,x,y;

 unsignedchardatam[64];

       intss[64][64];

 intmm[64][64];

 for(a=0;a<64;a++)

{

  fread(datam,64,1,fp);

     for(b=0;b<64;b++)

     {ss[a][b]=(int)datam[b];

}

}

   for(y=1;y<63;y++)

 for(x=1;x<63;x++){

mm[y][x]=(abs(ss[y+1][x]-ss[y][x])+abs(ss[y][x+1]-ss[y][x])+ss[y][x]);

    putpixel2(x*2+180,y*2+60,mm[y][x]);

    putpixel2(x*2+181,y*2+60,mm[y][x]);

    putpixel2(x*2+180,y*2+61,mm[y][x]);

    putpixel2(x*2+181,y*2+61,mm[y][x]);

显示后的图像如下:

水平垂直算法的主程序:

inta,b,c,d,x,y;

 unsignedchardatam[64];

       intss[64][64];

 intmm[64][64];

 for(a=0;a<64;a++)

{

  fread(datam,64,1,fp);

     for(b=0;b<64;b++)

     {ss[a][b]=(int)datam[b];

}

   for(y=1;y<63;y++)

 for(x=1;x<63;x++){

mm[y][x]=(abs(ss[y+1][x]-ss[y][x])+abs(ss[y][x+1]-ss[y][x])+ss[y][x]);

    putpixel2(x*2+180,y*2+60,mm[y][x]);

    putpixel2(x*2+181,y*2+60,mm[y][x]);

    putpixel2(x*2+180,y*2+61,mm[y][x]);

    putpixel2(x*2+181,y*2+61,mm[y][x]);

显示后的图像如下:

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1