C++实现一维数组的高斯滤波

发布时间:2026/7/15 14:25:46
C++实现一维数组的高斯滤波 C实现一维数组的高斯滤波(Gaussian Filter)高斯滤波(Gaussian filter)实质上是一种信号的滤波器其用途为信号的平滑处理。对一个数进行高斯滤波模糊可以理解成将该数取附近矩形窗口所有值的加权平均值距离处理数越近的点权重越大距离处理点越远的点权重越小。因此如果取的矩形窗口越大那么对处理点的模糊效果越强烈。因为数值和图像都是连续的越靠近待处理点的点关系越密切越远离待处理点的点关系越疏远直接使用简单平均是不合理的用加权平均更合理即距离越近的点权重越大距离越远的点权重越小。之所以把这种滤波方式叫做高斯滤波是因为权重值是由高斯函数决定。一维高斯分布函数G ( x ) 1 2 π σ e − x 2 2 σ 2 G(x)\frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{x^2}{2\sigma^2}}G(x)2π​σ1​e−2σ2x2​C完整代码为#includeiostream#includeiomanip#includemath.husingnamespacestd;intmain(){inti0,j0;doubletemp0.0;doubledata[]{1,2.2,3,4,5.1,6,7,8,8.9,10,11,12,13.2,14,15,16,17.1,17.9,19,20};doubledata_temp[]{1,2.2,3,4,5.1,6,7,8,8.9,10,11,12,13.2,14,15,16,17.1,17.9,19,20};intsizesizeof(data)/sizeof(data[0]);intlen3;doublesigma1;// 计算高斯核double*kernelnewdouble[len];inthalfSizelen/2;doublesum0.0;for(i-halfSize;ihalfSize;i){doublexi;doublevalueexp(-(x*x)/(2*sigma*sigma))/(sqrt(2*PAI)*sigma);kernel[ihalfSize]value;sumvalue;}for(i0;ilen;i)// 归一化权重kernel[i]/sum;// 滤波// for (i(len-1)/2; i(size-(len-1)/2); i)for(i0;isize;i){sum0.0;for(j-halfSize;jhalfSize;j){intidxij;if(idx0idxsize)sumdata_temp[idx]*kernel[jhalfSize];}data[i]sum;}for(i0;isize;i)coutdata[i]endl;return0;}