Рубрики

Генерация гауссовского фильтра в C ++

Гауссова фильтрация широко используется в области обработки изображений. Используется для уменьшения шума на изображении. В этой статье мы сгенерируем 2D гауссово ядро. Двухмерное ядро Гаусса следует нижеследующему распределению Гаусса.

Где y — расстояние по вертикальной оси от начала координат, x — расстояние по горизонтальной оси от начала координат, а σ — стандартное отклонение.

Реализация в C ++

// C ++ prgroam для генерации фильтра Гаусса
#include <cmath>
#include <iomanip>
#include <iostream>

using namespace std;

  
// Функция для создания фильтра Гаусса

void FilterCreation(double GKernel[][5])

{

    // инициализация стандартного отклонения до 1,0

    double sigma = 1.0;

    double r, s = 2.0 * sigma * sigma;

  

    // сумма для нормализации

    double sum = 0.0;

  

    // генерируем ядро 5x5

    for (int x = -2; x <= 2; x++) {

        for (int y = -2; y <= 2; y++) {

            r = sqrt(x * x + y * y);

            GKernel[x + 2][y + 2] = (exp(-(r * r) / s)) / (M_PI * s);

            sum += GKernel[x + 2][y + 2];

        }

    }

  

    // нормализуем ядро

    for (int i = 0; i < 5; ++i)

        for (int j = 0; j < 5; ++j)

            GKernel[i][j] /= sum;

}

  
// Программа драйвера для проверки вышеуказанной функции

int main()

{

    double GKernel[5][5];

    FilterCreation(GKernel);

  

    for (int i = 0; i < 5; ++i) {

        for (int j = 0; j < 5; ++j)

            cout << GKernel[i][j] << "\t";

        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

Ссылки:
https://en.wikipedia.org/wiki/Gaussian_filter

Эта статья предоставлена Суровым Агарвалом . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Генерация гауссовского фильтра в C ++

0.00 (0%) 0 votes