中值滤波去雾算法matlab,去雾算法

编程入门 行业动态 更新时间:2024-10-27 21:19:22

中值滤波去雾<a href=https://www.elefans.com/category/jswz/34/1770096.html style=算法matlab,去雾算法"/>

中值滤波去雾算法matlab,去雾算法

//**************************************************************

//**************

guidedfilter() ******************************

//**功能: 引导滤波函数**

//**输入: CvMat *p 输入图像 ,必须为CV_32FC1或者CV_64FC1

**

//**

CvMat *I 引导图像 ,必须为CV_32FC1或者CV_64FC1

**

//**

int r 滤波半径**

//**

double eps 滤波参数**

//**输出: 输出滤波后的图像矩阵**

//**应imSrc的点为中心的邻域的线性叠加值**

//**Auth:

s

**

//**Date:

2014.2

**

//**注意: 参考论文《Guided Image

Filtering》Kaiming He

**

//**************************************************************

CvMat *guidedfilter(CvMat *I, CvMat *p, int r, double

eps)

{

int w=I->width;

int h=I->height;

//printf("...............%d %d",w,h);

CvMat *ones=cvCreateMat(h,w,CV_32FC1);

int i,j;

for (i=0;i

{

for (j=0;j

{

cvmSet(ones,i,j,1.0);

}

}

CvMat *N=NULL;

N=boxfilter(ones,r);

CvMat *mean_I=cvCreateMat(h,w,CV_32FC1);

CvMat *box1=NULL;

box1=boxfilter(I,r);

cvDiv(box1,N,mean_I); //mean_I=box1/N

CvMat *mean_p=cvCreateMat(h,w,CV_32FC1);

CvMat *box2=NULL;

box2=boxfilter(p,r);

cvDiv(box2,N,mean_p); //mean_p=mean_I=box2/N

CvMat *temp1=cvCreateMat(h,w,CV_32FC1);

cvMul(I,p,temp1);

//temp1=I*P 点乘

CvMat *mean_Ip=cvCreateMat(h,w,CV_32FC1);

CvMat *box3=NULL;

box3=boxfilter(temp1,r);

cvDiv(box3,N,mean_Ip);

CvMat *cov_Ip=cvCreateMat(h,w,CV_32FC1);

CvMat *temp2=cvCreateMat(h,w,CV_32FC1);

cvMul(mean_I,mean_p,temp2);

cvSub(mean_Ip,temp2,cov_Ip);

CvMat *temp3=cvCreateMat(h,w,CV_32FC1);

cvMul(I,I,temp3);

CvMat *mean_II=cvCreateMat(h,w,CV_32FC1);

CvMat *box4=NULL;

box4=boxfilter(temp3,r);

cvDiv(box4,N,mean_II);

CvMat *var_I=cvCreateMat(h,w,CV_32FC1);

CvMat *temp4=cvCreateMat(h,w,CV_32FC1);

cvMul(mean_I,mean_I,temp4);

cvSub(mean_II,temp4,var_I);

//var_I=mean_II-temp4

CvMat *temp5=cvCreateMat(h,w,CV_32FC1);

CvScalar s;

s.val[0]=eps;

cvAddS(var_I,s,temp5,0); //temp(I)=var_I(I)+s 数组与数相加

CvMat *a=cvCreateMat(h,w,CV_32FC1);

cvDiv(cov_Ip,temp5,a);

CvMat *temp6=cvCreateMat(h,w,CV_32FC1);

cvMul(a,mean_I,temp6);

CvMat *b=cvCreateMat(h,w,CV_32FC1);

cvSub(mean_p,temp6,b);

CvMat *mean_a=cvCreateMat(h,w,CV_32FC1);

CvMat *mean_b=cvCreateMat(h,w,CV_32FC1);

CvMat *q=cvCreateMat(h,w,CV_32FC1);

CvMat *box5=NULL;

box5=boxfilter(a,r);

CvMat *box6=NULL;

box6=boxfilter(b,r);

cvDiv(box5,N,mean_a);

cvDiv(box6,N,mean_b);

CvMat *temp7=cvCreateMat(h,w,CV_32FC1);

cvMul(mean_a,I,temp7);

cvAdd(temp7,mean_b,q);//两数组相加

cvReleaseMat(&ones);

cvReleaseMat(&N);

cvReleaseMat(&mean_I);

cvReleaseMat(&mean_p);

cvReleaseMat(&mean_Ip);

cvReleaseMat(&cov_Ip);

cvReleaseMat(&mean_II);

cvReleaseMat(&var_I);

cvReleaseMat(&a);

cvReleaseMat(&b);

cvReleaseMat(&mean_a);

cvReleaseMat(&mean_b);

cvReleaseMat(&temp1);

cvReleaseMat(&temp2);

cvReleaseMat(&temp3);

cvReleaseMat(&temp4);

cvReleaseMat(&temp5);

cvReleaseMat(&temp6);

cvReleaseMat(&temp7);

cvReleaseMat(&box1);

cvReleaseMat(&box2);

cvReleaseMat(&box3);

cvReleaseMat(&box4);

cvReleaseMat(&box5);

cvReleaseMat(&box6);

return q;

}

更多推荐

中值滤波去雾算法matlab,去雾算法

本文发布于:2023-06-18 08:58:27,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/768658.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:算法   中值   matlab

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!