资源简介
实现用c++实现高斯噪声的产生,可以对图像进行添加,可以设定高斯噪声的均值和方差。

代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include
#define N_gauss 2000 //产生1000个点高斯序列
#define N_perpoint 100 //每个高斯点需要100个均匀分布的随机数
#define N_h 2000 //产生1000个点H(n)
#define N_ans 4000 //输出序列长度
#define PI 3.1415926f
#define GAUSS 0 //在printans时的type,使用代表gauss
#define ANS 1 //在printans时的type,使用代表ans
void init_gauss(double gauss[]) //清gauss[N_gauss]序列全部为0
{
int i;
for (i=0; i {
gauss[i] = 0;
}
}
void gauss_gen(double x[] double gauss[])//产生长度为N_gauss的高斯序列
{
int i n stime;
long ltime;
for(i=0; i {
ltime = time(NULL);
stime = (unsigned int)ltime;
stime = stime+i; //随机的stime
srand(stime); //获取随机种子next
for(n=0; n x[n] = 0;
for(n=0; n {
//初始化随机数序列x[N_perpoint]为随机数范围0~1
x[n] = (double)rand()/(RAND_MAX);
gauss[i] = gauss[i] + x[n]; //gauss范围-N_perpoint~N_perpoint
}
//使gauss有正有负,对半分,gauss范围-N_perpoint/2~N_perpoint/2
gauss[i] = gauss[i] - (N_perpoint/2);
gauss[i] = gauss[i]/(N_perpoint); //gauss范围-1/2~1/2
}
}
void dft(double x[] int len double rx[] double ix[] double y[])//离散傅里叶变换
{
int k n;
for (k=0; k {
rx[k] = 0;
ix[k] = 0;
y[k] = 0;
for (n=0; n {
rx[k] = rx[k] + x[k]*cos(2*PI*n*k/len);
ix[k] = ix[k] - x[k]*sin(2*PI*n*k/len);
}
y[k] = sqrt(rx[k]*rx[k] + ix[k]*ix[k]);
}
}
void bp_gauss_gen(double rh[] double ih[])//通过已有的高斯噪声序列,产生带通高斯白噪声
{
int i;
for (i=0; i<500; i++)
{
rh[i] = 0;
ih[i] = 0;
}
for (i=1501; i {
rh[i] = 0;
ih[i] = 0;
}
}
//频域相乘
void multiply(double rx[] double ix[] double rh[] double ih[] double real[] double imag[])
{
int i;
for(i=0;i<(N_gauss+N_h);i++)
{
real[i]=rx[i]*rh[i]-ix[i]*ih[i];
imag[i]=rx[i]*rh[i]+ix[i]*rh[i];
}
}
void idft_(double rx[] double ix[] double y[])//离散傅里叶逆变换
{
int k n length;
length = N_gauss+N_h;
double ry[(N_gauss+N_h)] iy[(N_gauss+N_h)];
for (k=0; k {
ry[k] = 0;
iy[k] = 0;
y[k] = 0;
for (n=0; n {
ry[k] = ry[k] + rx[n]*cos(2*PI*n*k/length)-ix[n]*sin(2*PI*n*k/length);
iy[k] = iy[k] + rx[n]*sin(2*PI*n*k/length)+ix[n]*cos(2*PI*n*k/length);
}
y[k] = sqrt(ry[k]*ry[k] + iy[k]*iy[k]);
}
}
void printans(double x[] bool type)//各种输出
{
int i len;
char* str;
switch(type)
{
case 0: //如果输出gauss
str = “gauss“;
len = N_gauss;
break;
case 1: //如果输出ans
str = “ans“;
len = N_gauss+N_h;
break;
}
for (i=0; i {
if (i%3 == 0)
{
cout< }
cout< < < }
if (str == “gauss“)
cout< }
void output(double ans[]
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 249900 2009-12-08 21:41 高斯噪声\Debug\gaosi.exe
文件 305516 2009-12-08 21:41 高斯噪声\Debug\gaosi.ilk
文件 23665 2009-12-08 21:41 高斯噪声\Debug\gaosi.obj
文件 341448 2009-12-08 21:03 高斯噪声\Debug\gaosi.pch
文件 590848 2009-12-08 21:41 高斯噪声\Debug\gaosi.pdb
文件 50176 2009-12-08 21:41 高斯噪声\Debug\vc60.idb
文件 61440 2009-12-08 21:41 高斯噪声\Debug\vc60.pdb
文件 4024 2009-12-08 21:41 高斯噪声\gaosi.cpp
文件 3389 2009-12-08 21:25 高斯噪声\gaosi.dsp
文件 535 2009-12-08 22:43 高斯噪声\gaosi.dsw
文件 33792 2009-12-08 22:43 高斯噪声\gaosi.ncb
文件 48640 2009-12-08 22:43 高斯噪声\gaosi.opt
文件 741 2009-12-08 21:41 高斯噪声\gaosi.plg
目录 0 2009-12-08 21:41 高斯噪声\Debug
目录 0 2009-12-08 22:43 高斯噪声
----------- --------- ---------- ----- ----
1714114 15
- 上一篇:c++远程控制源代码
- 下一篇:MFC窗体设计
相关资源
- C语言版经纬度与高斯投影相互转换函
- 高斯消去法求解线性方程组C/C++程序输
- 高斯平均引数法正反算
- YCbCr、混合高斯以及YCbCg肤色检测模型
- matlab下的基于高斯混合模型的说话人
- C++做的泊松分布,高斯分布,瑞利分
- rar文件MFC 图像处理之图像增强 图像平
- OpenCV图像模糊程序 by浅墨
- VC实现图像高斯/中值/均值/双边/滤波
- 高斯投影坐标正反算MFC
- 基于C++的高斯坐标系下经纬度与大地
- 高斯投影正反算MFC
- 高斯滤波+卡尔曼滤波+粒子滤波C++&M
- 车辆检测-基于车底阴影特征-基于路面
- opencv mfc vs2017读取图片,向图片加入噪
- 改进的高斯混合背景建模算法的实现
- 高斯迭代法的c++源程序
- 高斯混合模型背景建模
- 高斯正反算代码
- 高斯消去法C++代码
- 高斯投影正反算c语言程序
- C++实现的高斯投影正算和反算
- 实现高斯金字塔和高斯差分金字塔
- 用C语言实现高斯-赛德尔迭代方法
- 高斯混合模型直观实现
- 高斯投影正算C++源代码
- 潮流计算 高斯赛德尔法
- 用C语言对图像加高斯噪声
- 有源噪声控制FxLMS算法C语言程序
- 递归高斯模糊源代码最快速的高斯模
评论
共有 条评论