圖像去噪極簡教程(3)——高斯濾波

高斯濾波和均值濾波的原理一樣,在均值濾波中所有的像素點的權重都一樣,而在高斯濾波中則是越靠近中心的像素點權重遠大,權重的分配由二維高斯公式生成的矩陣決定,矩陣的階和掃描的窗口大小一致。

關於二維高斯公式這裏不再贅述,不瞭解的可以看看這篇文章:高斯函數的詳細分析,這裏就只給出一個二維高斯分佈的產生函數了:

//生成高斯核
double* make_kernel(int size, double sigma) {
    if (size % 2 == 0) {
        cout << "size必須爲奇數" << endl;
        return NULL;
    }

    double* kernel = new double[size * size];
    double d_sigma_2 = 2 * sigma * sigma;
    double c = 1 / (3.141592654 * d_sigma_2);
    double sum = 0;

    for (int i = 0; i < size; i++) {
        for (int k = 0; k < size; k++) {
            double x = i - int(size / 2);
            double y = k - int(size / 2);

            kernel[i*size+k] = exp(-(x * x + y * y) / d_sigma_2) * c;
            sum += kernel[i*size + k];
        }
    }

    for (int i = 0; i < size*size; i++) {
        kernel[i] = kernel[i] / sum;
    }
    return kernel;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章