Cara menggunakan python gaussian convolution 2d

And 2d convolution function which performs a 2D convolution between image and filt, image being a 2D image.

def myconv2(image, filt):
    # INPUTS
    # @ image         : 2D image, as numpy array of size mxn
    # @ filt          : 1D or 2D filter of size kxl
    # OUTPUTS
    # img_filtered    : 2D filtered image, of size (m+k-1)x(n+l-1)

    m, n = image.shape
    k, l = filt.shape
    offsety = k // 2
    offsetx = l // 2
    img_filtered = np.zeros((m+k-1, n+l-1), "double")
    image = np.pad(image, ((offsety,offsety),(offsetx, offsetx)), mode='constant')
    
    for i in range(offsety, m+offsety):
        for j in range(offsetx, n+offsetx):
            box_vals = image[ i - offsety : i + offsety+1, j-offsetx: j+offsetx+1]
            new_val = np.sum( filt *  box_vals)
            img_filtered[i][j] = np.sum(new_val)
    return img_filtered

A simple presentation of how function works for 5x5 input image and 3x3 filter kernel:

With having following 1d gaussian and its transpose, I call myconv2 function :

sigma = 3
filter_length = 5

gauss = gauss1d(sigma, filter_length).reshape(1,filter_length)
guass
array([[0.18073067, 0.20897821, 0.22058223, 0.20897821, 0.18073067]]) 

gauss_t = np.transpose(gauss)
gauss_t 
array([[0.18073067],
       [0.20897821],
       [0.22058223],
       [0.20897821],
       [0.18073067]])

myconv2(gauss, guass_t)
array([[0.        , 0.        , 0.        , 0.        , 0.        ],
       [0.        , 0.        , 0.        , 0.        , 0.        ],
       [0.03986597, 0.04609688, 0.04865652, 0.04609688, 0.03986597],
       [0.        , 0.        , 0.        , 0.        , 0.        ],
       [0.        , 0.        , 0.        , 0.        , 0.        ]])

As you can see its not actually a 2d gaussian kernel and some values are missing. I don't know what I am missing and what should I consider in my code to reach the goal. Thanks.

Setelah kemarin menggunakan image smoothing metode Averaging kali ini saya akan membahas menggunakan metode Gaussian filtering.

Gaussian filter adalah linear filter yang biasanya digunakan sebagai pengolah citra agar dapat lebih halus. Gaussian filter yang banyak digunakan dalam memproses gambar.

Gaussian filter bertujuan untuk menghilangkan noise pada citra dan meningkatkan kualitas detil citra.




Gaussian merupakan model noise yang mengikuti distribusi normal standard dengan rata-rata nol dan standard deviasi 1. Efek dari gaussian ini, pada gambar muncul titik-titik berwarna yang jumlahnya sama dengan presentase noise. Noise speckle merupakan model noise yang memberikan warna hitam pada titik yang terkena noise. Sedangkan noise salt & pepper seperti halnya taburan garam, akan memberikan warna putih pada titik yang terkena noise.

Baca Juga :

Image Blurring Pada OpenCV Python

Metode Median Filtering Menggunakan OpenCV Python

Disini saya menggunakan python untuk menggunakan metode ini tentunya menggunakan opencv sebagai library nya. Fungsi yang digunakan adalah cv2.getGaussianKernel().