কম্পিউটার টিউটোরিয়াল

C++-এ গাউসিয়ান ফিল্টার জেনারেশন (Gaussian Filter Generation)


ভূমিকা

গাউসিয়ান ফিল্টারিং ইমেজ প্রসেসিং-এ নויז কমাতে ব্যাপকভাবে ব্যবহৃত। ২D গাউসিয়ান কার্নেল জেনারেট করার ফর্মুলা:

$$G(x,y)= \frac{1}{2\pi\sigma^{2}}e^{-\frac{x^{2}+y^{2}}{2\sigma^{2}}}$$

C++ ইমপ্লিমেন্টেশন (৫x৫ কার্নেল)

#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;
    }
}

আউটপুট (৫x৫ কার্নেল)

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

ব্যাখ্যা

  • sigma = 1.0 - স্ট্যান্ডার্ড ডেভিয়েশন।
  • কোয়াডরেন্ট সমমিতি ব্যবহার করে -2 থেকে 2 পর্যন্ত লুপ।
  • নরমালাইজেশন করা হয়েছে যাতে সব ভ্যালুর যোগফল ১ হয়।
  1. C++-এ এনক্যাপসুলেশন

  2. C++-এ আইডেন্টিফায়ার (Identifiers)

  3. লিনাক্সে C++-এর জন্য সেরা IDE কী?

  4. লিনাক্সে C++-এর জন্য সেরা IDE কী? (আলাদা লেখা)