上述代码低通滤波通过c++实现
时间: 2023-11-12 11:22:40 浏览: 77
C++程序设计: C++中的双二阶滤波器实现(低通、高通、带通等).zip
5星 · 资源好评率100%
以下是一个简单的 C++ 代码实现低通滤波:
```
#include <iostream>
#include <cmath>
using namespace std;
const int SIZE = 256; // 图像大小
const double PI = 3.1415926535897932384626433832795; // 圆周率
// 生成高斯低通滤波器
void GaussianLowPass(double filter[][SIZE], double sigma) {
double sum = 0.0, s = 2 * sigma * sigma;
int center = SIZE / 2;
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
int x = i - center, y = j - center;
filter[i][j] = exp(-(x * x + y * y) / s) / (PI * s);
sum += filter[i][j];
}
}
// 归一化处理
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
filter[i][j] /= sum;
}
}
}
// 图像卷积运算
void ImageConvolution(double input[][SIZE], double output[][SIZE], double filter[][SIZE], int size) {
int center = size / 2;
for (int i = center; i < SIZE - center; i++) {
for (int j = center; j < SIZE - center; j++) {
double sum = 0.0;
for (int k = -center; k <= center; k++) {
for (int l = -center; l <= center; l++) {
sum += input[i + k][j + l] * filter[k + center][l + center];
}
}
output[i][j] = sum;
}
}
}
int main() {
double input[SIZE][SIZE], output[SIZE][SIZE], filter[SIZE][SIZE];
double sigma = 10.0; // 高斯滤波器的标准差
// 生成测试图像
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
input[i][j] = sin(i / 10.0) + cos(j / 10.0);
}
}
// 生成高斯低通滤波器
GaussianLowPass(filter, sigma);
// 图像卷积运算
ImageConvolution(input, output, filter, 5);
// 输出结果
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
cout << output[i][j] << " ";
}
cout << endl;
}
return 0;
}
```
在这个实现中,我们使用了一个 $256 \times 256$ 的测试图像,并设置了高斯滤波器的标准差 $\sigma$ 为 10。我们首先调用 `GaussianLowPass` 函数来生成高斯低通滤波器,然后调用 `ImageConvolution` 函数来对测试图像进行卷积运算。最后,我们将卷积运算后的图像结果输出到控制台上。
阅读全文