1、实验2.3中值滤波
一、 实验代码
# include
#include
#include
#include "cv.h"
#include "highgui.h"
#define U 20 //高斯分布的均值
#define D 30 //高斯分布的均方差
int Gaus_S(){ //产生高斯样本,以U为均值,D为均方差
double sum=0;
for(int i=0;i<12;i++)
sum+=rand()/32767.00;
//计算机中rand()函数为-3
2、2767~+32767(2^15-1)
//故sum+为0~1之间的均匀随机变量
return int(U+D*(sum-6));
//产生均值为U,标准差为D的高斯分布的样本,并返回
}
int main()
{
IplImage* img,* imge,* imgA,*imgg,*imggg;
int i,j,sum,k;
int height,width,step,channel;
uchar * data, * daat, * dd, * junzhi,*zhongzhi;
CvSize czSize;
imgA=cvLoadImage(
3、"D:\\123.jpg",0);//灰度图
height=imgA->height; //图像信息
width=imgA->width;
step=imgA->widthStep;
channel=imgA->nChannels; //图像信息 nChannels是图像通道,黑白1通道,彩色3通道
data=(uchar*)imgA->imageData;//像素
img= cvCreateImage(cvSize(imgA->width,imgA->height), imgA->depth, imgA->nChannels);
dd=(uchar*
4、)img->imageData;
imgg= cvCreateImage(cvSize(imgA->width,imgA->height), imgA->depth, imgA->nChannels);
junzhi=(uchar*)imgg->imageData;
imggg= cvCreateImage(cvSize(imgA->width,imgA->height), imgA->depth, imgA->nChannels);
zhongzhi=(uchar*)imggg->imageData;
srand((unsigned)time(NULL)); //种
5、下随机种子
//产生高斯噪声
for(i=0;i6、j7、t k=0;k<=channel-1;k++){
a[0]= dd[(i-1)*step+(j-1)*channel+k];
a[1]= dd[(i-1)*step+j*channel+k];
a[2]= dd[(i-1)*step+(j+1)*channel+k];
a[3]= dd[i*step+(j-1)*channel+k];
a[4]= dd[i*step+j*channel+k];
a[5]= dd[i*step+(j+1)*channel+k];
a[6]= dd[(i+1)*step+(j-1
8、)*channel+k];
a[7]= dd[(i+1)*step+j*channel+k];
a[8]= dd[(i+1)*step+(j+1)*channel+k];
//选择排序
for(k=0;k<9;k++)
{
p=k;
for(int l=k;l<9;l++)
{
if(a[l]9、 p=l;
}
temp=a[k];
a[k]=a[p];
a[p]=temp;
}
//取中值
zhongzhi[i*step+j*channel+k] =a[4];
}
}
}
}
cvNamedWindow("灰度图",1);
cvShowImage("灰度图",imgA);
cvNamedWindow("高斯噪声图",1);
cvShowImage("高斯噪声图",img);
cvNamedWindow("中值滤波",1);
cvShowImage("中值滤波",imggg);
cvWaitKey(0);
return 0;
}