• Tidak ada hasil yang ditemukan

Modul Praktikum Pengolahan Citra Digital Menggunakan OpenCV

N/A
N/A
Protected

Academic year: 2022

Membagikan "Modul Praktikum Pengolahan Citra Digital Menggunakan OpenCV"

Copied!
14
0
0

Teks penuh

(1)

Page | 1 DAFTAR ISI

1. Install OpenCV 2. RGB to Gray

3. Split RGB channels & Merges different channels 4. Operasi Citra Negatif

5. Operasi Penjumlahan & Pengurangan 6. Operasi Boolean

7. 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. Install OpenCV

Sebelum menginstal libarary OpenCV, Anda harus install python terlebih dahulu.

Jika python telah terinstal, Anda bisa menginstal OpenCV dengan command berikut:

pip install opencv-python

kemudian tunggu hingga prosesnya selesai, seperti gambar dibawah ini.

(2)

Page | 2

2. Pengenalan

Pertama, import modul cv2 dahulu.

import cv2

Lalu untuk membaca citra, gunakan method imread () dari modul cv2, tentukan jalur ke gambar dalam argumen dan simpan citra dalam variabel seperti di bawah ini:

image = cv2.imread(“gambar.png”)

atau, jika citra terdapat dalam folder data dapat ditambahkan lokasi citra berada seperti berikut:

image = cv2.imread(“data\\gambar.png”)

Jika Anda ingin memeriksa tipe data dari variable image, dapat menggunakan command berikut:

print(type(image))

Untuk menampilkan citra, Anda dapat menggunakan method imshow() dari cv2.

cv2.imshow(‘Citra Awal’, image) cv2.waitKey(0)

Fungsi waitKey(0) sebagai argumen penundaan untuk menutup jendela. Di sini diatur waktu ke nol untuk menampilkan jendela selamanya sampai menutupnya secara manual.

(3)

Page | 3

3. 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) Contoh output:

4. 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:

(4)

Page | 4 (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 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)

(5)

Page | 5 Output:

(6)

Page | 6

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

Berikut contoh code operasi negative pada citra grayscale.

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:

(7)

Page | 7

6. 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

import numpy as np

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:

(8)

Page | 8 Kesimpulan: dengan operasi penambahan dapat meningkatkan kecerahan dari sebuah citra dan operasi pengurangan dapat menurunkan kecerahan sebuah citra.

7. 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)

(9)

Page | 9

# Penggunaan operator AND

operasiAND = cv2.bitwise_and(persegi, lingkaran) 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)

(10)

Page | 10 Output operasi OR:

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)

(11)

Page | 11 Output operasi NOT:

8. 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:

𝑀 = [1 0 𝑇𝑥 0 1 𝑇𝑦] 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)

Output:

(12)

Page | 12 B. Operasi Rotasi

Untuk memutar sebuah citra, Kita membutuhkan lebar dan tinggi dari citra tersebut karena akan menggunakannya dalam proses rotasi. Untuk merotasi matriks, dapat menggunakan method getRotationMatrix2D() dari cv2.

Sintaks method tersebut adalah:

cv2.getRotationMatrix2D(center, angle, scale)

center di sini adalah titik pusat rotasi, angle adalah sudut rotasi, scale adalah skala citra (perbesar/perkecil).

Dalam menentukan titik pusat rotasi, kita membutuhkan informasi ukuran citra (tinggi dan lebar). Untuk mendapatkan informasi tersebut dapat menggunakan atribut shape, seperti dibawah ini:

(height, width) = image.shape[0:2]

Setelah mendapatkan informasi tinggi dan lebar dari citra, maka kita dapat merotasi matriks citra dengan contoh kode berikut:

RotasiMatriks = cv2.getRotationMatrix2D((width/2, height/2),- 90,0.5)

atau

RotasiMatriks = cv2.getRotationMatrix2D((width//2, height//2),- 90,0.5)

Kemudian, merotasi citra dengan bantuan rotasi matriks. Untuk merotasi citra, dapat menggunakan method wrapAffine mengambil citra asli, matriks citra yang di rotasi dan lebar & tinggi dari citra sebagai argumen.

RotasiCitra = cv2.warpAffine(image, RotasiMatriks, (width, height))

Citra yang dirotasi disimpan dalam matriks RotasiCitra. Untuk menampilkan citra, gunakan imshow() seperti dibawah ini:

(13)

Page | 13 cv2.imshow(‘Citra Rotasi’, RotasiCitra)

cv2.waitKey(0) output:

Citra hasil rotasi dapat di simpan pada folder data (contoh) menggunakan perintah imwrite() seperti dibawah ini:

cv2.imwrite(‘data\\gambar_rotasi.png’, RotasiCitra) C. 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)

(14)

Page | 14

#flipping vertical-horizontal flip_verhor=cv2.flip(image,-1)

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)

Ouput:

Referensi

Dokumen terkait

Penelitian pengolahan citra digital untuk mengenali tanda air pada uang kertas rupiah asli dan palsu dengan menerapkan segmentasi citra menggunakan bahasa pemrograman

Hasil pengujian rata-rata ̅ tiap butir kuisioner untuk responden (mahasiswa) yang belum mengambil mata kuliah Pengolahan Citra Digital.. Hal ini

Kemudian sistem akan melakukan pengolahan citra dengan menggunakan algoritma deteksi tepi untuk mengetahui tinggi dan lebar dari suatu objek dalam citra.. Selanjut- nya

Elemen (i,j) dalam matriks menyatakan rata-rata intensitas cahaya pada area citra yang direpresentasikan oleh pixel. Resolusi (derajat rincian yang dapat dilihat) citra

Pada metode penelitian ini dirancang alat untuk mengidentifikasi jenis daging menggunakan Python 2.7 dan OpenCV dengan menggunakan pengolahan citra digital

Hasil ekstraksi warna buah, perimeter, area, tinggi, lebar, dan area cacat dari citra perlu dianalisis dengan statistik untuk mengetahui korelasi antara

8) Dari hasil yang diperoleh langkah 7 agar histogram kelihatan dilayar maka dapat ditambahkan beberapa code pada gambar 4.6 untuk menampilkan di memo, gambar 4.7 menampilkan

Hasil ekstraksi warna buah, perimeter, area, tinggi, lebar, dan area cacat dari citra perlu dianalisis dengan statistik untuk mengetahui korelasi antara