图像去噪.docx

上传人:b****3 文档编号:12878066 上传时间:2023-04-22 格式:DOCX 页数:11 大小:559KB
下载 相关 举报
图像去噪.docx_第1页
第1页 / 共11页
图像去噪.docx_第2页
第2页 / 共11页
图像去噪.docx_第3页
第3页 / 共11页
图像去噪.docx_第4页
第4页 / 共11页
图像去噪.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

图像去噪.docx

《图像去噪.docx》由会员分享,可在线阅读,更多相关《图像去噪.docx(11页珍藏版)》请在冰豆网上搜索。

图像去噪.docx

图像去噪

 

面向对象分析与设计大作业

(数字图像去噪)

 

学院:

计算机科学与工程学院

班级:

学生姓名:

学号:

指导老师:

张广渊

提交日期:

2014/4/14

山东交通学院

数字图像处理课程实验报告

实验题目:

___数字图像去噪_______

姓名:

______

学号:

______

班级:

_____

指导教师:

__张广渊_

实验概述

【实验目的及要求】

 

1.编写平滑滤波及中值滤波的C语言程序以及相应的显示程序来实现对图像的去噪。

2.创建3*3的加权模板,对指定图象进行平滑滤波增强,将增强后的图象显示于屏幕上,比较增强的效果。

3.创建3*3的模板,对指定图象进行中值滤波增强,将增强后的图象显示于屏幕上,比较增强的效果。

【实验原理】

平滑(均值)滤波原理:

在图像上对目标像素给一个加权滑动模板,再用模板中的对应像素点乘权值后求和再求平均值。

中值滤波原理:

设置一个奇数点的滑动模板,对当前模板下的像素灰度值进行排序将模板中心点的像素值用排序后的中值代替。

 

【实验环境】

 VC6.0下安装Openvc1.0

配置Windows环境变量

检查C:

\ProgramFiles\OpenCV\bin是否已经被加入到环境变量PATH,如果没有,请加入。

加入后需要注销当前Windows用户(或重启)后重新登陆才生效。

(可以在任务管理器里重启explorer.exe)

配置VisualC++6.0

全局设置

菜单Tools->Options->Directories:

先设置lib路径,选择Libraryfiles,在下方填入路径:

C:

\ProgramFiles\OpenCV\lib

然后选择includefiles,在下方填入路径:

C:

\ProgramFiles\OpenCV\cxcore\include

C:

\ProgramFiles\OpenCV\cv\include

C:

\ProgramFiles\OpenCV\cvaux\include

C:

\ProgramFiles\OpenCV\ml\include

C:

\ProgramFiles\OpenCV\otherlibs\highgui

C:

\ProgramFiles\OpenCV\otherlibs\cvcam\include

然后选择sourcefiles,在下方填入路径:

C:

\ProgramFiles\OpenCV\cv\src

C:

\ProgramFiles\OpenCV\cxcore\src

C:

\ProgramFiles\OpenCV\cvaux\src

C:

\ProgramFiles\OpenCV\otherlibs\highgui

C:

\ProgramFiles\OpenCV\otherlibs\cvcam\src\windows

最后点击“ok”,完成设置。

项目设置

每创建一个将要使用OpenCV的VCProject,都需要给它指定需要的lib。

菜单:

Project->Settings,然后将Settingfor选为AllConfigurations,然后选择右边的link标签,在Object/librarymodules附加上

cxcore.libcv.libml.libcvaux.libhighgui.libcvcam.lib

如果你不需要这么多lib,你可以只添加你需要的lib。

 

实验内容

【实验方案设计】

 

1.创建工程,在工程里配置环境,添加lib标签等。

 2.在main函数里写入对图像进行操作的代码。

并自定义函数ImageStretchByHistogram实现直方图变换。

3.编译,链接,执行。

4.对代码进行修改调试

【实验过程】(实验步骤、记录、数据、分析)

 

1.新建一个支持MVC的ConsoleApplication工程,菜单:

Project->Settings,然后将Settingfor选为AllConfigurations,然后选择右边的link标签,在Object/librarymodules附加上cxcore.libcv.libml.libcvaux.libhighgui.libcvcam.lib

2.在工程目录下放置一个图片test.jpg

3.在cpp文件下添加显示图像代码:

#include"stdafx.h"

#include"cv.h"

#include"highgui.h"

#include

#include

usingnamespacestd;

#defineN3//模板大小,这里可以自行调整

intfilter[N][N]={{1,2,1},{2,4,2},{1,2,1}};//模板

//获取像素点的灰度值

inlineintpixel8Int(IplImage*img,intx,inty)

{

return((uchar*)(img->imageData+x*img->widthStep))[y];

}

//设置像素点的灰度值

inlinevoidsetPixelVal(IplImage*img,intx,inty,intval)

{

((uchar*)(img->imageData+x*img->widthStep))[y]=val;

}

//obtainthesumoftheweight

intweight()

{

intw=0;

for(intix=0;ix

for(intiy=0;iy

w+=filter[ix][iy];

returnw;

}

//加权求值并赋值给对应中心的像素

intsmooth_compute(IplImage*src,intx,inty)

{

intvalue=0;

inttmp=(N-1)/2;

for(intix=0;ix

{

for(intiy=0;iy

value+=filter[ix][iy]*pixel8Int(src,x-tmp+ix,y-tmp+iy);//对应像素点乘权值后求和

}

returnvalue;

}

//对当前模板下的像素灰度值进行排序,取中间值...这里采用c++中库中提供的sort()

intmedian_compute(IplImage*src,intx,inty)

{

inttmp=(N-1)/2;

vectortamp;

for(intix=0;ix

for(intiy=0;iy

{

intval=pixel8Int(src,x-tmp+ix,y-tmp+iy);

tamp.push_back(val);

}

vector:

:

iteratorfirst=tamp.begin();

vector:

:

iteratorlast=tamp.end();

sort(first,last);//默认是升序排列

returntamp[(N*N+1)/2];

}

/**利用如下3*3的加权模板创建平滑滤波器,对图像进行平滑处理并去噪

-------------

|1|2|1|

-------------

|2|4|2|

-------------

|1|2|1|

-------------

对于边界问题,处理方法一般有两种方法:

(1)补全边界点;即在边界复制一行或一列,这样在处理边界时会出现不良效果

(2)限制中心点的范围;在遍历图像像素时,如果模板边界与图像边界重合时,以此为最大范围

对于n*n的模板而言,中心点必须限制在距离图像边界不小于(n-1)/2个像素处

注:

此处采用第二种简单的处理方式

**/

voidsmoothFilter(IplImage*src,IplImage*dst)

{

inttmp=(N-1)/2;

for(intix=tmp;ixheight-tmp;++ix)

{

for(intiy=tmp;iywidth-tmp;++iy)

{

intval=smooth_compute(src,ix,iy)/weight();

setPixelVal(dst,ix,iy,val);

}

}

}

/**

中值滤波器:

对模板n*n范围的像素值进行排序,将中间值赋给中心点像素

注:

同样选择3*3模板

**/

voidmedianFilter(IplImage*src,IplImage*dst)

{

inttmp=(N-1)/2;

for(intix=tmp;ixheight-tmp;++ix)

{

for(intiy=tmp;iywidth-tmp;++iy)

{

intval=median_compute(src,ix,iy);

setPixelVal(dst,ix,iy,val);

}

}

}

intmain(intargc,char*argv[])

{

IplImage*src1,*src2,*dst1,*dst2;

cvNamedWindow("smoothFilter_test");

cvNamedWindow("medianFilter_test");

//smoothfilterprocesstheimage

if((src1=cvLoadImage("4.jpg",0))!

=NULL)

{

dst1=cvCreateImage(cvGetSize(src1),src1->depth,src1->nChannels);

cvCopy(src1,dst1);

smoothFilter(src1,dst1);

cvShowImage("smoothFilter_test",dst1);

}

//medianfilterprocesstheimage

if((src2=cvLoadImage("4.jpg",0))!

=NULL)

{

dst2=cvCreateImage(cvGetSize(src2),src2->depth,src2->nChannels);

cvCopy(src2,dst2);

medianFilter(src2,dst2);

cvShowImage("medianFilter_test",dst2);

}

cvWaitKey(0);

cvDestroyWindow("smoothFilter_test");

cvDestroyWindow("medianFilter_test");

cvReleaseImage(&src1);

cvReleaseImage(&src2);

cvReleaseImage(&dst1);

cvReleaseImage(&dst2);

return0;

}

3.编译,链接,执行。

 

【结论】

原图

 

运行程序显示结果平滑滤噪

运行程序显示结果中值滤噪

 

小结

 

通过本次实验,掌握了在计算机上进行图象去噪。

了解了平滑滤波原理和中值滤波原理。

 

指导教师评语及成绩

评语:

 

 

 

 

成绩:

          指导教师签名:

                                              批阅日期:

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

当前位置:首页 > 医药卫生 > 基础医学

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

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