Pengolahan Citra Digital Grayscale

BY Novi/Noringo-sama

 



Jangan lupa dukungannya!


 Scroll down untuk mendapatkan modul

Pengolahan citra digital grayscale merupakan pengolahan citra digital yang mengubah gambar berwarna-warni menjadi gambar bewarna keabu-abuan.

Adapun langkahnya sebagai berikut.

Pertama import library yang dibutuhkan

Import library berarti mengambil atau memasukkan modul yang akan digunakan.

 

#mengimport library

import cv2

import matplotlib

import numpy as np

import matplotlib.pyplot as plt

from google.colab.patches import cv2_imshow

import math

 

-          Cv2 merupakan library yang digunakan untuk melakukan pengolahan citra digital pada gambar.

-        matplotlib merupakan library untuk memvisualisasikan data baik 2D maupun 3D secara statis, interaktif dan dinamis

-   numpy merupakan libray untuk melakukan perhitungan atau komputasi numerik termasuk didalamnya nanti dapat mengolah matriks yang dibutuhkan dalam pengolahan citra dan kita inisialisasikan dia dengan np.

-        pyplot dalam matplotlib yang merupakan library untuk untuk memvisualisasikan gambar ataupun data yang mana disini diinisialisasikan sebagai plt.

-   pengambilan library tambahan dari (from) google colab berupa library cv2-imshow yang digunakan untuk menampilkan gambar menggunakan cv2.

-      math merupakan library yang mana ia berfungsi untuk mengakses fungsi dari matematika yang berupa nilai float.

Jika ingin menggunakan cv2 maka data harus dibaca melalui google drive.

Selanjutnya mengambil gambar dari google drive (pilihan)

#mengambil data dari google drive

from google.colab import drive

drive.mount('/content/gdrive')

Sintaks di atas merupakan sintaks yang digunakan untuk menghubungkan antara google colab dengan drive dengan cara memanggil library drivenya dan melakukan pendefinisan apa yang akan diambil dalam hubungan tersebut, disini adalah gambar.

 

Mengakses google drive

# Inisialisasi direktori tempat data disimpan

#Ini saya sesuaikan dengan drive tempat saya menyimpan

path = "/content/gdrive/MyDrive/citra/" 

# Cek isi direktori

import os

os.listdir(path)

 

Pada path dilakukan deklarasi folder mana yang digunakan untuk menyimpan data (gambar), kemudian data (gambar) tersebut akan diolah oleh system operasi agar dapat dibaca oleh komputer. Berikut hasil pembacaan isi data dalam folder.


 

Membaca gambar dengan cv2

#membaca gambar dari google drive

img = cv2.imread(path + 'calon_jodoh.jpeg')

cv2_imshow(img)

 

imread merupakan fungsi untuk membaca gambar. Disini gambar dibaca juga diikuti oleh letak dimana gambar tersebut berada (path).

Cv2_imshow(nama variabel yang menampung gambar), imshow merupakan fungsi untuk menampilkan gambar.

 

Jika tidak ingin mengambil gambar dari drive, tetapi ingin mengambil gambar dari web.

Note!! Format harus png karena pyplot hanya menerima pembacaan gambar dengan type PNG.

Membaca gambar dengan plt

#membaca gambar dari web

img = plt.imread('https://blogger.googleusercontent.com/img/a/AVvXsEiYYX3agFO61SCNNAHLQkfV2JmI3cJOahLCETF4eI_V0oH010V2itRX8AOCuNTb3T5PfHTuHMyYIsr8m1uj-BoD-uuRXs51fO6f1Km2aoIr7vKl3o_IzpBhrckT17hAYYWLoxqO4h9jhHmPZUUoqTSAkR47LS8banwgxX1vTWAQ-9Y-5ukXqYvZlYI2GA=s400')

plt.imshow(img)

 

Hasil pembacaan gambar




Membaca ukuran gambar

#melihat ukuran image

img.shape

 

shape merupakan function untuk membaca ukuran suatu data.



Bisa dilihat pada hasil gamabr sebelumnya sebagai perbandingan. Disini tinggi atau lebar gambar sebesar 239 px dan panjang gambar sebesar 400px. Kemudian 3 itu adalah dimension yang mana sebuah gambar terdiri dari 3 layer, yaitu red, green dan blue.

Merubah gambar bewarna menjadi grayscale dengan library cv2

#Mengubah gambar rgb menjadi citra grayscale menggunakan library

abu_abu1= cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

cv2_imshow(abu_abu1)

 

cvtColor merupakan function yang digunakan untuk melakukan pengolahan termasuk perubahan warna pada gambar. Disini warnanya akan diubah dari BGR menjadi gray. Hasilnya kemudian akan ditampilkan melalui cv2_imshow.



Menampilkan gambar dengan pyplot

plt.imshow(abu_abu1)



Bisa dilihat karena tadia pengolahannya menggunakan cv2 sehingga menjadi seperti ini. Ini disebabkan karena perbedaan pembacaan layer gambar antara pyplot atau plt dengan cv2 dimana cv2 membaca bgr, sedangkan pyplot membaca rgb.

Cara mengatasinya

abu_abu3 = cv2.cvtColor(abu_abu1,cv2.COLOR_GRAY2RGB)

plt.imshow(abu_abu3)

 

ubah dari gray menjadi rgb agar gambar menjadi warna abu-abu, kita harus menyesuaikan pengolahan gambar sesuai dengan pyplot.



Atau bisa dengan cara simple, yaitu menambahkan cmap=”gray” tanpa perlu menconvert ke rgb lagi.

#Mengubah gambar rgb menjadi citra grayscale menggunakan library

abu_abu1= cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

plt.imshow(abu_abu1,cmap="gray")

Cmap disini digunakan untuk mengubah warna dasar dari gambar yang ada, gray berarti warna keabu-abuan.


 

 

Melakukan pengolahan citra digital grayscale menggunakan perulangan plt

#Mengubah gambar rgb menjadi citra grayscale menggunakan perulangan dengan pyplot

b=img[:,:,2]

g=img[:,:,1]

r=img[:,:,0]

 

j_baris = len(img)

j_kolom = len(img[0])

 

abu_abu2 = np.zeros((j_baris,j_kolom))

for i in range(j_baris) : 

  for j in range(j_kolom) : 

    abu_abu2[i,j] = 0.299*r[i,j] + 0.587 * g[i,j] + 0.114 *b[i,j]

  

plt.imshow(abu_abu2,cmap="gray")

 

Disini kita harus memisahkan layer terlebih dahulu, karena menggunakan plt, maka pembacaannya dari rgb, r di channel 0, g dichannel 2 dan b dichannel 3.

[: , : , channel]

: -> pertama pembacaan baris

: -> kedua pembacaan kolom

Channel merupakan layer yang dibaca.

Len -> length -> membaca jumlah ukuran panjang .

J_baris ->len(img) -> membaca jumlah semua baris

J_baris ->len(img) -> membaca jumlah semua kolom

Np.zeros (j_baris,j_kolom)  -> membuat matriks yang diisikan angka 0 sebanyak jumlah baris dan jumlah kolom.

Range -> batasan

Melakukan perulangan sebanyak j_baris dan melakukan perulangan sebanyak j_kolom guna mengambil nilai dan mengelola semua matriks.

0.299*r[i,j] + 0.587 * g[i,j] + 0.114 *b[i,j] merupakan rumus yang telah ditentukan

abu_abu2[i,j] -> matriks yang menampung hasil perhitungan

kemudian setelah selesai perulangan didapatkan matriks baru yang akan membentuk warna gambar baru, yaitu grayscale.



Melakukan pengolahan citra digital grayscale menggunakan perulangan cv2

#Mengubah gambar rgb menjadi citra grayscale menggunakan perulangan dengan cv2

b=img[:,:,0]

g=img[:,:,1]

r=img[:,:,2]

j_baris = len(img)

j_kolom = len(img[0])

 

abu_abu2 = np.zeros((j_baris,j_kolom))

for i in range(j_baris) : 

  for j in range(j_kolom) : 

    abu_abu2[i,j] = 0.299*r[i,j] + 0.587 * g[i,j] + 0.114 *b[i,j]

  

abu_abu2 = abu_abu2.astype(np.uint8) 

cv2_imshow(abu_abu2)

Sama seperti pada plt, cuman yang membedakan adalah pembacaan layer dari channel 0 untuk blue, kemudian 1 untuk red dan 2 untuk green.

Selanjutnya hasil akan diubah ke type uint8 dengan numpy. Karena bisa saja hasilnya akan menjadi – atau koma sehingga dia harus diubah menjadi 8 bit dengan uint8 yang rangenya dari 0 – 255. Kenapa tidak boleh -? Karena warna tidak ada yang -.



Membandingkian hasil gambar dengan library dan tidak

#menampilkan dua gambar sekaligus

f, (gambar1, gambar2) = plt.subplots(1, 2, figsize=(10,5))

gambar1.set_title('Gray Library')

gambar1.imshow(abu_abu1,cmap="gray")

gambar2.set_title('Gray Perulangan')

gambar2.imshow(abu_abu2,"gray")

 

Subplots merupakan bagian dari plot. Disini ada dua plot sehingga ada angka 1 dan 2, kemudian figsize adalah ukuran dari gambar yang akan ditampilkan.

Set title digunakan untuk mengatur judul gambar.



Dont forget to support me on trakteer