Membuat Salt Noise dan Menghitung Nilai PSNR

By | June 6, 2023
Print Friendly, PDF & Email
401 Views

Dalam pengolahan gambar, tidak jarang kita menghadapi masalah yang disebabkan oleh noise, gangguan kecil yang dapat merusak kualitas visual sebuah gambar. Salah satu jenis noise yang umum ditemui adalah salt noise, yang dapat membuat gambar terlihat seperti dipenuhi titik-titik terang yang acak. Salt noise, juga dikenal sebagai salt-and-pepper noise, adalah jenis noise yang ditandai dengan kemunculan titik-titik putih dan hitam yang tersebar secara acak di seluruh gambar. Noise ini dapat muncul akibat berbagai faktor, termasuk ketidaksempurnaan sensor pada kamera digital atau kerusakan dalam proses pengiriman dan penyimpanan gambar.

Salt noise dapat merusak kualitas visual sebuah gambar dengan membuatnya terlihat kabur, kurang tajam, dan tidak detail. Titik-titik putih dan hitam yang tersebar acak dapat mengaburkan detail penting dalam gambar, seperti wajah atau objek utama.

Membuat Salt Noise dan Mengukur Nilai PSNR sebenarnya sangat mudah kok, yaitu dengan cara membangkitkan bilangan random yang nanti akan diletakan pada koordinat pixel/gambar. Membuat Salt Noise  berupa hitam (pixel bernilai 0) dan putih (pixel bernilai 255) dengan cara membuat ambang batas, contoh sederhana Membuat Salt Noise yaitu

  • jika nilai random > 0.9 akan dibuat hitam
  • sedangkan nilai random <0.1 akan dibuat putih

Kalian bebas mengaturnya

import random
import cv2
import numpy as np
from matplotlib import pyplot as plt


def add_noise(img):
    img2 = img.copy()
    if img.ndim==3:
        row,col,dim = img.shape
    else:
        row,col = img.shape
    koordinat = np.random.rand(row,col)
    img2[koordinat>0.9]=0
    koordinat = np.random.rand(row,col)
    img2[koordinat<0.1] = 255
    return img2
    

img = cv2.imread('gambar.jpg',1)
img2 = add_noise(img)
    
plt.close('all')
plt.figure()
plt.imshow(cv2.cvtColor(np.concatenate((img,img2),axis=0), cv2.COLOR_BGR2RGB))
plt.show()

Cara kerja algoritma diatas sangat mudah kok, setiap bilangan random mempunyai rentang nilai 0 sampai dengan 1, misalkan untuk angka 0.9 akan diisi dengan 0 (hitam) sedangkan angka dibawah 0.1 akan diisi 255 (putih).

See also  Transformasi Hough Untuk Ekstraksi Iris Mata

Menghitung Nilai PSNR

Menghitung Nilai PSNR sangat mudah, kalian hanya perlu library yang dibutuhkan

from skimage.metrics import peak_signal_noise_ratio  as psnr

Kemudian langsung saja hitung

psnr(img,img2)

nilai diatas yaitu 12.25. Semakin tinggi noise level sebuah citra maka semakin rendah nilai PSNR citra tersebut. Hal ini dikarenakan noise akan membuat perbedaan antara citra yang diamati dengan citra aslinya. Nilai PSNR yang semakin kecil menandakan bahwa citra tersebut berbeda dengan aslinya.

Mari kita buktikan dengan mengubah nilai ambang batas 0.9 menjadi 0.5 sehingga akan semakin banyak noise, Kode function akan kita ubah menjadi seperti berikut yang artinya akan semakin banyak noise (warna akan semakin hitam)

def add_noise(img):
    img2 = img.copy()
    if img.ndim==3:
        row,col,dim = img.shape
    else:
        row,col = img.shape
    koordinat = np.random.rand(row,col)
    img2[koordinat>0.5]=0
    koordinat = np.random.rand(row,col)
    img2[koordinat<0.1] = 255
    return img2

Nilai PSNR nya semakin kecil 6.91 karena noise semakin banyak.

 

 

Leave a Reply