opencv图像去噪实验.docx

上传人:b****6 文档编号:8832300 上传时间:2023-05-15 格式:DOCX 页数:32 大小:3.04MB
下载 相关 举报
opencv图像去噪实验.docx_第1页
第1页 / 共32页
opencv图像去噪实验.docx_第2页
第2页 / 共32页
opencv图像去噪实验.docx_第3页
第3页 / 共32页
opencv图像去噪实验.docx_第4页
第4页 / 共32页
opencv图像去噪实验.docx_第5页
第5页 / 共32页
opencv图像去噪实验.docx_第6页
第6页 / 共32页
opencv图像去噪实验.docx_第7页
第7页 / 共32页
opencv图像去噪实验.docx_第8页
第8页 / 共32页
opencv图像去噪实验.docx_第9页
第9页 / 共32页
opencv图像去噪实验.docx_第10页
第10页 / 共32页
opencv图像去噪实验.docx_第11页
第11页 / 共32页
opencv图像去噪实验.docx_第12页
第12页 / 共32页
opencv图像去噪实验.docx_第13页
第13页 / 共32页
opencv图像去噪实验.docx_第14页
第14页 / 共32页
opencv图像去噪实验.docx_第15页
第15页 / 共32页
opencv图像去噪实验.docx_第16页
第16页 / 共32页
opencv图像去噪实验.docx_第17页
第17页 / 共32页
opencv图像去噪实验.docx_第18页
第18页 / 共32页
opencv图像去噪实验.docx_第19页
第19页 / 共32页
opencv图像去噪实验.docx_第20页
第20页 / 共32页
亲,该文档总共32页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

opencv图像去噪实验.docx

《opencv图像去噪实验.docx》由会员分享,可在线阅读,更多相关《opencv图像去噪实验.docx(32页珍藏版)》请在冰点文库上搜索。

opencv图像去噪实验.docx

opencv图像去噪实验

实验名称

实验4:

图像去噪

实验目的

1、掌握算术均值滤波器、几何均值滤波器、谐波和逆谐波均值滤波器进行图像去噪的算法

2、掌握利用中值滤波器进行图像去噪的算法

3、掌握自适应中值滤波算法

4、掌握自适应局部降低噪声滤波器去噪算法

5、掌握彩色图像去噪步骤

实验内容

1、均值滤波

具体内容:

利用OpenCV对灰度图像像素进行操作,分别利用算术均值滤波器、几何均值滤波器、谐波和逆谐波均值滤波器进行图像去噪.模板大小为5*5.(注:

请分别为图像添加高斯噪声、胡椒噪声、盐噪声和椒盐噪声,并观察滤波效果)

2、中值滤波

具体内容:

利用OpenCV对灰度图像像素进行操作,分别利用5*5和9*9尺寸的模板对图像进行中值滤波。

(注:

请分别为图像添加胡椒噪声、盐噪声和椒盐噪声,并观察滤波效果)

3、自适应均值滤波。

具体内容:

利用OpenCV对灰度图像像素进行操作,设计自适应局部降低噪声滤波器去噪算法。

模板大小7*7(对比该算法的效果和均值滤波器的效果)

4、自适应中值滤波

具体内容:

利用OpenCV对灰度图像像素进行操作,设计自适应中值滤波算法对椒盐图像进行去噪。

模板大小7*7(对比中值滤波器的效果)

5、彩色图像均值滤波

具体内容:

利用OpenCV对彩色图像RGB三个通道的像素进行操作,利用算术均值滤波器和几何均值滤波器进行彩色图像去噪。

模板大小为5*5.

实验完成情况

1、实验步骤:

先为灰度图像添加高斯噪声、胡椒噪声、盐噪声和椒盐噪声,再分别利用算术均值滤波器、几何均值滤波器、谐波和逆谐波均值滤波器进行图像去噪.模板大小为5*5。

核心代码如下:

添加各类噪声:

IplImage*AddGuassianNoise(IplImage*src)//添加高斯噪声

IplImage*dst=cvCreateImage(cvGetSize(src),src-〉depth,src—〉nChannels);

IplImage*noise=cvCreateImage(cvGetSize(src),src—〉depth,src—〉nChannels);

CvRNGrng=cvRNG(-1);

cvRandArr(&rng,noise,CV_RAND_NORMAL,cvScalarAll(0),cvScalarAll(15));

cvAdd(src,noise,dst);

returndst;

IplImage*AddPepperNoise(IplImage*src)//添加胡椒噪声,随机黑色点

{

IplImage*dst=cvCreateImage(cvGetSize(src),src-〉depth,src—〉nChannels);

cvCopy(src,dst);

for(intk=0;k〈8000;k++)

{

inti=rand()%src—〉height;

intj=rand()%src->width;

CvScalars=cvGet2D(src,i,j);

if(src—〉nChannels==1)

s。

val[0]=0;

elseif(src—〉nChannels==3)

s。

val[0]=0;

s.val[1]=0;

s.val[2]=0;

cvSet2D(dst,i,j,s);

}

returndst;

IplImage*AddSaltNoise(IplImage*src)//添加盐噪声,随机白色点

IplImage*dst=cvCreateImage(cvGetSize(src),src—〉depth,src->nChannels);

cvCopy(src,dst);

for(intk=0;k〈8000;k++)

inti=rand()%src->height;

intj=rand()%src—〉width;

CvScalars=cvGet2D(src,i,j);

if(src->nChannels==1)

{

s.val[0]=255;

}

elseif(src->nChannels==3)

{

s.val[0]=255;

s。

val[1]=255;

s.val[2]=255;

}

cvSet2D(dst,i,j,s);

returndst;

}

IplImage*AddPepperSaltNoise(IplImage*src)//添加椒盐噪声,随机黑白点

{

IplImage*dst=cvCreateImage(cvGetSize(src),src—〉depth,src—>nChannels);

cvCopy(src,dst);

for(intk=0;k<8000;k++)

inti=rand()%src—>height;

intj=rand()%src—〉width;

intm=rand()%2;

CvScalars=cvGet2D(src,i,j);

if(src—>nChannels==1)

{

if(m==0)

{

s。

val[0]=255;

}

else

s。

val[0]=0;

elseif(src—〉nChannels==3)

{

if(m==0)

{

s.val[0]=255;

s。

val[1]=255;

s.val[2]=255;

}

else

{

s。

val[0]=0;

s.val[1]=0;

s.val[2]=0;

}

cvSet2D(dst,i,j,s);

}

returndst;

}

各类滤波器实现:

//算术均值滤波器——模板大小5*5

IplImage*ArithmeticMeanFilter(IplImage*src)

IplImage*dst=cvCreateImage(cvGetSize(src),src-〉depth,src-〉nChannels);

cvSmooth(src,dst,CV_BLUR,5);

returndst;

}

//几何均值滤波器—-模板大小5*5

IplImage*GeometryMeanFilter(IplImage*src)

IplImage*dst=cvCreateImage(cvGetSize(src),src->depth,src—〉nChannels);

introw,col;

inth=src->height;

intw=src—>width;

doublemul[3];

doubledc[3];

intmn;

//计算每个像素的去噪后color值

for(inti=0;iheight;i++){

for(intj=0;j〈src—>width;j++){

mul[0]=1。

0;

mn=0;

//统计邻域内的几何平均值,邻域大小5*5

for(intm=—2;m<=2;m++){

row=i+m;

for(intn=—2;n<=2;n++){

col=j+n;

if(row>=0&&row

CvScalars=cvGet2D(src,row,col);

mul[0]=mul[0]*(s.val[0]==0?

1:

s。

val[0]);//邻域内的非零像素点相乘

mn++;

}

//计算1/mn次方

CvScalard;

dc[0]=pow(mul[0],1.0/mn);

d.val[0]=dc[0];

//统计成功赋给去噪后图像。

cvSet2D(dst,i,j,d);

returndst;

//谐波均值滤波器——模板大小5*5

IplImage*HarmonicMeanFilter(IplImage*src)

{

IplImage*dst=cvCreateImage(cvGetSize(src),src—〉depth,src—〉nChannels);

introw,col;

inth=src—>height;

intw=src-〉width;

doublesum[3];

doubledc[3];

intmn;

//计算每个像素的去噪后color值

for(inti=0;i

for(intj=0;jwidth;j++){

sum[0]=0。

0;

mn=0;

//统计邻域,5*5模板

for(intm=—2;m<=2;m++){

row=i+m;

for(intn=-2;n〈=2;n++){

col=j+n;

if(row>=0&&row

CvScalars=cvGet2D(src,row,col);

sum[0]=sum[0]+(s。

val[0]==0?

255:

255/s。

val[0]);

mn++;

}

}

CvScalard;

dc[0]=mn*255/sum[0];

d.val[0]=dc[0];

//统计成功赋给去噪后图像。

cvSet2D(dst,i,j,d);

}

}

returndst;

}

//逆谐波均值大小滤波器--模板大小5*5

IplImage*InverseHarmonicMeanFilter(IplImage*src)

{

IplImage*dst=cvCreateImage(cvGetSize(src),src-〉depth,src-〉nChannels);

//cvSmooth(src,dst,CV_BLUR,5);

introw,col;

inth=src->height;

intw=src—〉width;

doublesum[3];

doublesum1[3];

doubledc[3];

doubleQ=2;

//计算每个像素的去噪后color值

for(inti=0;iheight;i++){

for(intj=0;j

sum[0]=0。

0;

sum1[0]=0.0;

//统计邻域

for(intm=-2;m〈=2;m++){

row=i+m;

for(intn=-2;n<=2;n++){

col=j+n;

if(row>=0&&row〈h&&col〉=0&&col

CvScalars=cvGet2D(src,row,col);

sum[0]=sum[0]+pow(s。

val[0]/255,Q+1);

sum1[0]=sum1[0]+pow(s.val[0]/255,Q);

//计算1/mn次方

CvScalard;

dc[0]=(sum1[0]==0?

0:

(sum[0]/sum1[0]))*255;

d。

val[0]=dc[0];

//统计成功赋给去噪后图像。

cvSet2D(dst,i,j,d);

}

returndst;

实验结果如图所示:

(从左至右,从上至下分别为原图像、加噪图像、算术均值处理图像、几何均值处理图像、谐波均值处理图像、逆谐波均值处理图像)

(1)高斯噪声:

(2)胡椒噪声:

(3)盐噪声

(4)椒盐噪声

 

2、实验步骤:

先为灰度图像添加胡椒噪声、盐噪声和椒盐噪声,再分别利用5*5和9*9尺寸的模板对图像进行中值滤波。

核心代码如下:

IplImage*MedianFilter_5_5(IplImage*src){

IplImage*dst=cvCreateImage(cvGetSize(src),src->depth,src->nChannels);

cvSmooth(src,dst,CV_MEDIAN,5);

returndst;

}

IplImage*MedianFilter_9_9(IplImage*src){

IplImage*dst=cvCreateImage(cvGetSize(src),src->depth,src—>nChannels);

cvSmooth(src,dst,CV_MEDIAN,9);

returndst;

}

实验结果如下图(灰度图像和加噪图像第一问中已给出,下面只列出分别利用5*5和9*9尺寸的模板对图像进行中值滤波后的图像):

灰度图像加胡椒噪声,分别利用5*5和9*9尺寸的模板对图像进行中值滤波。

灰度图像加盐噪声,分别利用5*5和9*9尺寸的模板对图像进行中值滤波。

灰度图像加椒盐噪声,分别利用5*5和9*9尺寸的模板对图像进行中值滤波.

3、实验步骤:

自适应均值滤波(以高斯噪声为例),先为灰度图像添加高斯噪声,再利用7*7尺寸的模板对图像进行自适应均值滤波.

核心代码如下:

IplImage*SelfAdaptMeanFilter(IplImage*src){

IplImage*dst=cvCreateImage(cvGetSize(src),src—〉depth,src->nChannels);

cvSmooth(src,dst,CV_BLUR,7);

introw,col;

inth=src-〉height;

intw=src-〉width;

intmn;

doubleZxy;

doubleZmed;

doubleSxy;

doubleSl;

doubleSn=100;

for(inti=0;i〈src->height;i++){

for(intj=0;jwidth;j++){

CvScalarxy=cvGet2D(src,i,j);

Zxy=xy。

val[0];

CvScalardxy=cvGet2D(dst,i,j);

Zmed=dxy。

val[0];

Sl=0;

mn=0;

for(intm=—3;m<=3;m++){

row=i+m;

for(intn=—3;n〈=3;n++){

col=j+n;

if(row>=0&&row〈h&&col〉=0&&col

CvScalars=cvGet2D(src,row,col);

Sxy=s.val[0];

Sl=Sl+pow(Sxy—Zmed,2);

mn++;

}

}

}

Sl=Sl/mn;

CvScalard;

d。

val[0]=Zxy—Sn/Sl*(Zxy—Zmed);

cvSet2D(dst,i,j,d);

}

returndst;

实验结果如图:

4、实验步骤:

自适应中值滤波(以椒盐噪声为例),先为灰度图像添加椒盐噪声,再利用7*7尺寸的模板对图像进行自适应中值滤波。

核心代码如下:

IplImage*SelfAdaptMedianFilter(IplImage*src){

IplImage*dst=cvCreateImage(cvGetSize(src),src—〉depth,src—〉nChannels);

introw,col;

inth=src—>height;

intw=src-〉width;

doubleZmin,Zmax,Zmed,Zxy,Smax=7;

intwsize;

//计算每个像素的去噪后color值

for(inti=0;iheight;i++){

for(intj=0;j〈src—>width;j++){

//统计邻域

wsize=1;

while(wsize〈=3){

Zmin=255。

0;

Zmax=0。

0;

Zmed=0。

0;

CvScalarxy=cvGet2D(src,i,j);

Zxy=xy.val[0];

intmn=0;

for(intm=—wsize;m〈=wsize;m++){

row=i+m;

for(intn=—wsize;n<=wsize;n++){

col=j+n;

if(row〉=0&&row〈h&&col>=0&&col〈w){

CvScalars=cvGet2D(src,row,col);

if(s。

val[0]〉Zmax){

Zmax=s.val[0];

}

if(s.val[0]〈Zmin){

Zmin=s。

val[0];

Zmed=Zmed+s。

val[0];

mn++;

Zmed=Zmed/mn;

CvScalard;

if((Zmed-Zmin)>0&&(Zmed—Zmax)〈0){

if((Zxy-Zmin)〉0&&(Zxy-Zmax)<0){

d.val[0]=Zxy;

}else{

d.val[0]=Zmed;

cvSet2D(dst,i,j,d);

break;

}else{

wsize++;

if(wsize>3){

CvScalard;

d.val[0]=Zmed;

cvSet2D(dst,i,j,d);

break;

}

}

}

}

returndst;

}

实验结果如图:

5、实验步骤:

利用OpenCV对彩色图像RGB三个通道的像素进行操作,利用算术均值滤波器和几何均值滤波器进行彩色图像去噪。

模板大小为5*5。

实验代码参照问题一,选择彩色图片、算术均值滤波器和几何均值滤波器进行彩色图像去噪。

实验结果如下图(以椒盐噪声为例):

利用算术均值滤波器:

利用几何均值滤波器:

 

实验中的问题

实验问题:

几何均值滤波以及谐波、逆谐波滤波没有对应的库函数

解决方法:

通过学习书本对应章节,根据公式写出程序

实验结果

 

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

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2