C++ 中的高斯濾波器生成
眾所周知,高斯濾波在影像處理領域中應用十分廣泛。它常用於減少影像的噪聲。本小節將介紹如何生成二維高斯核。用於生成二維核的高斯分佈如下。
$$G(x,y)= \frac{1}{2\Pi\:\sigma^{2}}e^{\frac{x^{2}+y^{2}}{2\sigma^{2}}}$$
舉例
讓我們瞭解一下以下實現,以獲得更好的理解 −
#include <cmath> #include <iomanip> #include <iostream> #define PI 3.1415 using namespace std; void calc_filter(double kernel[][5]) { double sigma = 1.0; double p, q = 2.0 * sigma * sigma; double sum = 0.0; for (int x = -2; x <= 2; x++) { for (int y = -2; y <= 2; y++) { p = sqrt(x * x + y * y); kernel[x + 2][y + 2] = (exp(-(p * p) / q)) / (PI * q); sum += kernel[x + 2][y + 2]; } } for (int i = 0; i < 5; i++) for (int j = 0; j < 5; j++) kernel[i][j] /= sum; } int main() { double kernel[5][5]; calc_filter(kernel); for (int i = 0; i < 5; ++i) { for (int j = 0; j < 5; ++j) cout << kernel[i][j] << " "; cout << endl; } }
輸出
0.00296902 0.0133062 0.0219382 0.0133062 0.00296902 0.0133062 0.0596343 0.0983203 0.0596343 0.0133062 0.0219382 0.0983203 0.162103 0.0983203 0.0219382 0.0133062 0.0596343 0.0983203 0.0596343 0.0133062 0.00296902 0.0133062 0.0219382 0.0133062 0.00296902
廣告