一维高斯滤波C++
时间: 2023-07-11 22:08:13 浏览: 93
以下是一维高斯滤波的C++代码实现,其中sigma表示标准差,kernelSize表示核大小,input表示输入的一维数据,output表示输出结果:
```cpp
void gaussBlur_1D(float* input, float* output, int size, float sigma, int kernelSize)
{
int halfKernel = kernelSize / 2;
float* kernel = new float[kernelSize];
float sum = 0.0f;
for (int i = 0; i < kernelSize; i++) {
kernel[i] = exp(-1 * pow((i - halfKernel) / sigma, 2) / 2);
sum += kernel[i];
}
for (int i = 0; i < kernelSize; i++) {
kernel[i] /= sum;
}
for (int i = 0; i < size; i++) {
float result = 0.0f;
for (int j = -halfKernel; j <= halfKernel; j++) {
int index = i + j;
if (index >= 0 && index < size) {
result += input[index] * kernel[j + halfKernel];
}
}
output[i] = result;
}
delete[] kernel;
}
```
使用方法如下:
```cpp
int main() {
float input[10] = { 1, 2, 3, 4, 5, 4, 3, 2, 1, 0 };
float output[10] = { 0 };
gaussBlur_1D(input, output, 10, 1.0f, 3);
for (int i = 0; i < 10; i++) {
cout << output[i] << " ";
}
cout << endl;
return 0;
}
```
其中input输入数据为{1,2,3,4,5,4,3,2,1,0},输出结果如下:
```
0.324652 1.32376 2.75245 4.00001 4.75245 4.00001 2.75245 1.32376 0.324652 0
```