Page | 1 DAFTAR ISI
1. RGB to Gray
2. Split RGB channels & Merges different channels 3. Operasi Citra Negatif
4. Operasi Penjumlahan & Pengurangan 5. Operasi Boolean
6. Operasi Geometri
Dalam modul ini, kita akan belajar bagaimana memproses citra dengan Python menggunakan library OpenCV.
OpenCV adalah open-source library gratis yang digunakan dalam pemrosesan citra secara real-time. OpenCV digunakan untuk memproses citra, video, dan bahkan streaming langsung, tetapi dalam tutorial ini, kita akan memproses gambar hanya sebagai langkah pertama.
1. RGB to Gray
Color space (ruang warna) di representasikan tiga channel berbeda, yaitu: Merah, Hijau, dan Biru (RGB). Setiap channel berasal dari apa yang disebut sifat trichromatic (trikromatik) penglihatan manusia karena kita memiliki tiga fotoreseptor terpisah yang masing-masing merespons secara selektif ke bagian spektrum warna yang berbeda. Tiga warna primer ditambahkan untuk menghasilkan 16.777.216 warna berbeda dalam sistem RGB 8-bit per channel. Di OpenCV, gambar diubah menjadi array multi-dimensi, yang sangat menyederhanakan manipulasinya. Misalnya, gambar skala abu-abu diinterpretasikan sebagai array 2D dengan piksel yang bervariasi dari 0 hingga 255.
Untuk mengubah citra RGB ke grayscale, dapat menggunakan method cvtColor(), dengan contoh kode sebagai berikut:
import cv2
image = cv2.imread("D:\\logo.png")
imageGray = cv2. cvtColor(image, cv2.COLOR_BGR2GRAY) cv2.imshow('Citra Greyscale', imageGray)
cv2.waitKey(0)
Page | 2
2. Split RGB channels & Merges different channels
Gambar berwarna sedikit lebih rumit karena kita berurusan dengan array 3D di mana setiap piksel dirender dalam tiga channel warna yang berbeda. Menarik untuk membagi gambar asli menjadi komponen biru, hijau, dan merah untuk memahami cara kerja struktur berlapis warna. Kita akan menggunakan 2 method OpenCV:
1. Split () : memisahkan array multidimensi
2. Merge() : menggabungkan beberapa channel yang berbeda
Jika kita mencetak bentuk channel yang dihasilkan, kita akan melihat bahwa dimensi telah diturunkan skalanya ke 1. Setiap channel berisi komponen RGB gambar tetapi dirender dalam format skala abu-abu 1 dimensi.
Untuk memisahkan ketiga channel citra RGB, dapat menggunakan method split(), dengan contoh kode sebagai berikut:
(blue, green, red) = cv2. split(image) Contoh output:
Setelah dipisahkan setiap channel RGB maka akan terlihat seperti gambar diatas, karena setiap channel hanya di representasikan dalam 1 channel saja maka tidak terlihat warna merah, hijau ataupun biru. Agar setiap channel bisa menampilkan
Page | 3 warna sesuai channel-nya maka harus di di representasikan dalam 3 channel menggunakan method merge(). Sebagai contoh:
import cv2
import numpy as np
image = cv2.imread("D:\\logo.png") b,g,r = cv2.split(image)
#Buat matriks nol seukuran dengan citra
MatriksNol = np.zeros(image.shape[:2],image.dtype) m = MatriksNol
#merge matriks nol dengan matriks citra channel merah merah = cv2.merge([m,m,r])
cv2.imshow('Citra red channel', merah) cv2.waitKey(0)
Output:
3. Operasi Negatif
Operasi negatif bertujuan untuk mendapatkan citra negatif dengan cara mengurangi nilai intensitas piksel dari nilai keabuan maksimum. Secara umum persamaannya adalah sebagai berikut :
𝑓(𝑥, 𝑦)′= 255 − 𝑓(𝑥, 𝑦)
Page | 4 import cv2
import numpy as np
#citra input adalah citra RGB
image = cv2.imread("D:\\logo.png") #konversi RGB ke Grayscale
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) #Buat matriks 255 seukuran dengan citra
Matriks = np.ones(image.shape[:2],image.dtype)*255 #Operasi citra negatif
citraNegatif = Matriks – gray cv2.imshow('Citra', gray)
cv2.imshow('Citra negatif', citraNegatif) cv2.waitKey(0)
output:
4. Operasi Penjumlahan & Pengurangan
Penjumlahan citra adalah operasi menjumlahkan dua matriks yang berukuran sama. Secara umum, persamaannya adalah sebagai berikut:
𝐶(𝑥, 𝑦) = 𝐴(𝑥, 𝑦) + 𝐵(𝑥, 𝑦)
C adalah citra baru yang intensitas tiap pikselnya adalah jumlah dari intensitas tiap piksel pada matriks A dan matriks B.
import cv2
Page | 5 image = cv2.imread("D:\\logo.png")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
MatriksSatu = np.ones(image.shape[:2],image.dtype)*100 #operasi penjumlahan
citraPenjumlahan = cv2.add(gray,MatriksSatu) cv2.imshow('Citra', gray)
cv2.imshow('Citra Penjumlahan', citraPenjumlahan) cv2.waitKey(0)
Output:
Pengurangan citra adalah operasi saling mengurangkan dua matriks yang berukuran sama. Secara umum, persamaannya adalah sebagai berikut:
𝐶(𝑥, 𝑦) = 𝐴(𝑥, 𝑦) − 𝐵(𝑥, 𝑦)
C adalah citra baru yang intensitas tiap pikselnya adalah selisih dari intensitas tiap piksel pada matriks A dan matriks B. Untuk operasi pengurangan dapat menggunakan method subtract() dari opencv, sehingga menghasilkan output seperti gambar dibawah ini:
Page | 6 Kesimpulan: dengan operasi penambahan dapat meningkatkan kecerahan dari sebuah citra dan operasi pengurangan dapat menurunkan kecerahan sebuah citra.
5. Operasi Boolean
Selain operasi aritmatika, pemrosesan citra digital juga melibatkan operasi Boolean (AND, OR, NOT & XOR)
a. Operasi AND A B A AND B 0 0 0 0 1 0 1 0 0 1 1 1
Berikut contoh code penggunaan operator AND pada gambar. import cv2
import numpy as np
# membuat matriks untuk menggambar persegi
persegi = np.zeros((400,400),dtype="uint8")
# sintaks method rectangle (var,(titik awal),(lebar, tinggi), warna, thickness)
# jika thickness diisi -1 maka objek akan diisi warna penuh
cv2.rectangle(persegi,(60,60),(340,340),255,-1)
# membuat matriks untuk menggambar lingkaran
lingkaran = np.zeros((400,400),dtype="uint8")
# sintaks method circle (var,(titik pusat),radius (r)/jari-jari, warna, thickness)
cv2.circle(lingkaran,(200,200),150,255,-1)
# Penggunaan operator AND
Page | 7 cv2.imshow("Persegi", persegi)
cv2.imshow("Lingkaran", lingkaran) cv2.imshow("Operasi AND", operasiAND) cv2. waitKey(0) output: Hasil AND b. Operasi OR A B A AND B 0 0 0 0 1 1 1 0 1 1 1 1
Untuk operator OR dapat menggunakan method bitwise_or() pada opencv, seperti dibawah ini:
operasiOR = cv2.bitwise_or(persegi, lingkaran)
Page | 8 c. Operator XOR A B A AND B 0 0 0 0 1 1 1 0 1 1 1 0
Untuk operator XOR dapat menggunakan method bitwise_xor() pada opencv, seperti dibawah ini:
operasiXOR = cv2.bitwise_xor(persegi, lingkaran)
Output operasi XOR:
d. Operator NOT A NOT(A)
0 1
1 0
Untuk operator XOR dapat menggunakan method bitwise_xor() pada opencv, seperti dibawah ini:
operasiNOT = cv2.bitwise_not(persegi)
Page | 9
6. Operasi Geometri
A. Operasi Translasi Rumus translasi citra:
𝑥′= 𝑥 + 𝑇𝑥 𝑦′= 𝑦 + 𝑇𝑦
Yang dalam hal ini, 𝑇𝑥 adalah besar pergeseran dalam arah x, sedangkan 𝑇𝑦 adalah besar pergeseran dalam arah y, dengan mengikuti matriks berikut:
𝑀 = [10 01 𝑇𝑇𝑥 𝑦] Sebagai contoh, lihat code berikut:
import cv2
import numpy as np
image = cv2.imread('lena.jpg') height, width = image.shape[:2]
#membuat matriks M dengan contoh Tx = 100 & Ty=50 M = np.float32([[1,0,100], [0,1,50]])
image_translation = cv2.warpAffine(image, M,(height, width))
cv2.imshow('Citra', image)
cv2.imshow('Citra Translasi', image_translation) cv2.waitKey(0)
Page | 10 B. Operasi Flipping
Flipping adalah operasi geometri yang sama dengan pencerminan. Ada tiga macam flipping : horizontal, vertical dan vertical-horizontal.
Flipping vertikal adalah pencerminan pada sumbu-X dari citra A menjadi citra B, yang diberikan oleh :
𝑥′= 𝑥 𝑦′= 𝑀 − 𝑦
Flipping horizontal adalah pencerminan pada sumbu-Y dari citra A menjadi citra B, yang diberikan oleh :
𝑥′ = 𝑁 − 𝑥 𝑦′ = 𝑦
Flipping verical-horizontal adalah proses pencerminan pada sumbu-X kemudian dicerminkan lagi terhadap sumbu-Y.
Sebagai contoh, lihat code berikut: import cv2 import numpy as np image = cv2.imread('lena.jpg') #flipping horizontal flip_hor=cv2.flip(image,1) #flipping vertical flip_ver=cv2.flip(image,0) #flipping vertical-horizontal flip_verhor=cv2.flip(image,-1)
Page | 11 cv2.imshow('Citra', image)
cv2.imshow('Citra Flip Horizontal', flip_hor) cv2.imshow('Citra Flip Vertical', flip_ver)
cv2.imshow('Citra Flip Vertical-Horizontal', flip_verhor) cv2.waitKey(0)