• Tidak ada hasil yang ditemukan

Modul Praktikum Pengolahan Citra Digital Menggunakan OpenCV

N/A
N/A
Protected

Academic year: 2021

Membagikan "Modul Praktikum Pengolahan Citra Digital Menggunakan OpenCV"

Copied!
11
0
0

Teks penuh

(1)

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)

(2)

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

(3)

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 − 𝑓(𝑥, 𝑦)

(4)

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

(5)

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:

(6)

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

(7)

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)

(8)

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)

(9)

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)

(10)

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)

(11)

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)

Gambar

Gambar berwarna sedikit lebih rumit karena kita berurusan dengan array 3D di  mana setiap piksel dirender dalam tiga  channel warna yang berbeda

Referensi

Dokumen terkait

Untuk menjadi bahan pembanding, maka nilai piksel citra asli diambil dari citra yang belum terdistorsi. Citra asli diubah menjadi citra grayscale terlebih dahulu,

Pada gambar 4.9 merupakan citra asli dari sel darah Sickle Cell pertama,. kemudian citra asli tersebut dirubah menjadi bentuk

Dari gambar 13 dapat dilihat bahwa citra grade4a.jpg jika dilakukan segmentasi k-mean dengan jumlah klaster 2, akan diperoleh citra dengan dua warna yang

Gambar 4.2 Spesifikasi respon magnituda ternormalisasi untuk filter digital lowpass Jika frekuensi tepi passband (Fp) dan stopband (Fs) dari filter digital dinyatakan dalam Hz

Hasil running programnya adalah seperti terlihat pada gambar di bawah ini dimana gambar yang di sebelah kiri atas adalah gambar citra grayscale, sedangkan yang di sebelah kanan

wajah manusia dari gambar atau video menggunakan database wajah yang tersimpan sehingga pengenalan wajah sendiri dapat dilakukan dengan berbagai cara, salah satunya

Dalam aplikasi ini untuk mendapatkan total luas dalam range warna Hue, total piksel dan total luas dari citra asli akan dihitung agar dapat dilihat perbedaan

KODE OUTPUT ANALISIS Program yang Anda berikan menggunakan Matplotlib untuk menampilkan dua gambar: gambar asli dalam format BGR dan gambar yang telah dikonversi ke skema warna RGB