0% menganggap dokumen ini bermanfaat (0 suara)
338 tayangan

Modul PCD

Dokumen ini memberikan panduan instalasi dan konfigurasi perangkat lunak yang dibutuhkan untuk praktikum pengolahan citra digital menggunakan bahasa pemrograman Python, termasuk instalasi Python, PyCharm, library OpenCV dan PyQt, serta cara membuat proyek baru di PyCharm.

Diunggah oleh

DUAAARR MEMEK
Hak Cipta
© © All Rights Reserved
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
338 tayangan

Modul PCD

Dokumen ini memberikan panduan instalasi dan konfigurasi perangkat lunak yang dibutuhkan untuk praktikum pengolahan citra digital menggunakan bahasa pemrograman Python, termasuk instalasi Python, PyCharm, library OpenCV dan PyQt, serta cara membuat proyek baru di PyCharm.

Diunggah oleh

DUAAARR MEMEK
Hak Cipta
© © All Rights Reserved
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 57

PENGANTAR

Modul dan Jobsheet Praktikum Pengolahan Citra Digital I (For Instructor) 2018/2019 ini disusun
sebagai pendukung kegiatan praktikum matakuliah Pengolahan Citra Digital bagi Asisten
Laboratorium dengan mengikuti silabus/RPS dari matakuliah. Praktikum ini menggunakan library
OPenCV dan Python 3. Modul praktikum ini disusun oleh dosen matakuliah dan diperiksa kembali
bersama dengan para asisten Lab. Berikut ini adalah Penanggungjawab dan Asisten Praktikum:

Kepala Laboratorium : Rio Korio Utoro.,MT


Koordinator Praktikum : Irma Amelia Dewi.,MT
Dosen Matakuliah : Irma Amelia Dewi.,MT
Asisten : Rustandi.,S.Kom
: Adi Nugraha.,S.Kom
: Farikh Ramadhan
: Venti Fatonah
: Maruli Ibrahim
: M. Revaldi
: Nadiati Salsabilla
: Ismail
: Rizki Maulana
: Yulianto Ardi Nugroho
: Chondro Seto Nur Suryawan
: Muhamad Rizky Rifaldy
: Afrizal Maulana Muhammad

i
DAFTAR ISI

1. INSTALASI PYTHON ............................................................................................................................. 1


2. INSTALASI PYCHARM ..........................................................................................................................2
3. INSTALASI LIBRARY PENDUKUNG .....................................................................................................2
KONFIGURASI NEW PROJECT DI PYCHARM ........................................................................................ 4
A. MENINGKATKAN KUALITAS CITRA-OPERASI TITIK.......................................................................... 8
Praktek 1- Menampilkan image .............................................................................................................. 8
Praktek 2- MENAMPILKAN CITRA ........................................................................................................ 10
Praktek 3- Konversi citra RGB ke citra keabuan .................................................................................. 15
Praktek 4- Pencerahan Citra ................................................................................................................. 19
1. Analisis jika nilai brightness diberikan nilai negatif ..................................................................... 20
Praktek 5- pengaturan kontras Citra .................................................................................................... 21
Praktek 6- Peregangan kontras ............................................................................................................ 22
Praktek 7- Negative image ................................................................................................................... 24
Praktek 8- BINER image ........................................................................................................................25
Praktek 9- HISTOGRAM CITRA GRAYSCALE ....................................................................................... 26
Praktek 10- HISTOGRAM CITRA rgb ..................................................................................................... 27
Praktek 11- HISTOGRAM equalization .................................................................................................. 27
B. MENINGKATKAN KUALITAS CITRA-OPERASI GEOMETRI .............................................................. 29
Praktek 1- translasi citra ....................................................................................................................... 29
Praktek 2- Rotasi CItra dan Transpose ................................................................................................ 29
Praktek 3- resize .................................................................................................................................... 31
Praktek 4- CROP IMAGE ........................................................................................................................32
MENINGKATKAN KUALITAS CITRA-OPERASI ARITMATIKA...................................................................33
Praktek 1- Operasi aritmatika ................................................................................................................33
Praktek 2-Operasi Boolean .................................................................................................................. 34
MENINGKATKAN KUALITAS CITRA-OPERASI SPASIAL ......................................................................... 35
Praktek 1- konvolusi 2D ........................................................................................................................ 35

ii
PRAKTIKUM PENGOLAHAN CITRA DIGITAL
Pada kegiatan praktek Pengolahan Citra Digital ini, mahasiswa akan melakukan praktikum dari mulai
mendesain dan mengimplementasikan algoritma pengolahan citra digital menggunakan bahasa
pemrograman Python dengan didukung oleh library computer vision ‘opencv2’ dan library untuk
tampilan antarmuka ‘PyQt5’.
Berikut ini adalah proses persiapan kegiatan praktikum mulai dari proses instalasi Python, open
source software untuk editor pemrograman menggunakan PyCharm dan modul lib lainnya.

1. INSTALASI PYTHON
Tahapan yang dapat dilakukan oleh mahasiswa untuk menginstal Python adalah sebagai berikut:
1. Downaload Python di https://www.python.org/downloads/

Gambar 1. Download Python

2. Setelah selesai download, klik dua kali pada ikon


3. Pilih customized untuk menentukan lokasi direktori instalasi
4. Sebaiknya install di direktori C dan beri nama dengan folder ‘Python36’ C:\\Python36
5. Ikuti petunjuk instalasi ssampai dengan selesai

1
2. INSTALASI PYCHARM
Tahapan yang dapat dilakukan oleh mahasiswa untuk menginstal editor tool untuk memudahkan
melakukan proses coding dengan cara sebagai berikut:
1. Download di https://www.jetbrains.com/pycharm/download/#section=windows

Gambar 2. Download PyCharm

2. Setelah selesai di download selanjutnya klik dua kali ikon ini


untuk memulai instalasi
3. Ikuti petunjuk instalasi sampi dengan selesai

3. INSTALASI LIBRARY PENDUKUNG


1. Setelah selesai melakukan instalasi python selanjutnya download dan install modul binary dari
library pendukung. Windows Binaries for Python Extension Packages dapat di download di
https://www.lfd.uci.edu/~gohlke/pythonlibs/
2. Search library opencv2, kemudian download opencv2 windows binary python extension
(wheel) sesuai dengan versi python dan bit sistem operasi yang digunakan. Versi Python yang
sudah diinstal sebelumnya adalah versi 3.6, sehingga dapay dicari library openCV dengan versi
Python 3.6 dan pilih jenis bit OS nya seperti pada Gambar 3

2
Gambar 3. Download Windows Binary Python Extension OpenCv2
3. Dengan cara yang sama dengan langkah dua, download wheel numpy, scipy, matplotlib,
pillow
4. Masuk ke tempat python di instal dan simpan semua wheel di folder Scripts
5. Selanjutnya setelah mendownload keseluruhan library yang dibutuhkan, dilanjutkan instalasi
dengan cara klik pada ikon Start, ketikkan cmd (command prompt di windows)
6. Masuk ke direktori C:\Python36\Scripts dengan cara ketikkan cd C://Python36/Scripts

Gambar 4. Masuk direktori python

7. Instal opencv dengan cara ketikkan ‘pip install (nama wheel dan ekstension)’ >>enter, untuk
lebih memudahkan sebaiknya copy nama filenya seperti pada Gambar 5.

3
Gambar 5. Copy nama file Wheel
8. Lakukan cara yang sama seperti pada langkah 7 untuk library numpy, scipy, matplotlib dan
pillow
9. Untuk library PyQt dikarenakan sudah include di dalam Python versi 3 hanya tinggal instal saja
di command promt tanpa harus mendownload. Ketikkan ‘pip install PyQt5’
10. Untuk menambahkan PyQt designer sebagai editor untuk mendesain halaman antarmuka
Python, maka ketikan di cmd ‘pip install pyqt5-tools’

KONFIGURASI NEW PROJECT DI PYCHARM


Untuk memulai membuat aplikasi di Pycharm dapat dilakukan sebagai berikut:
1. Double klik pada ikon Pycharm
2. Pada saat awal, aplikasi akan melakukan inisialisasi sistem terlebih dahulu
3. Kemudian klik ‘New Project’ , tentukan direktori menyimpan project dan beri nama file
dengan ’01.ShowImage’

Gambar 6. Create new project


4. Pada nama project yang sudah di-create tersebut klik kanan>>New>>Python File (Gambar 7)
5. Beri nama python file dengan ‘main’>>OK (Gambar 8 )

Gambar 7. Tambah Python File

4
Gambar 8. Nama Python file
6. Langkah berikutnya melakukan setting environment dengan cara pada toolbar bagian atas
klik File>>Setting

Gambar 9. Setting project interpreter


7. Pada halaman Setting klik pada Project: Nama Project>>Project Interpreter
8. Pada panel kanan di listbox project Interpreter pilih Show All (Gambar 9)

Gambar 10. Halaman Project Interpreter


9. Pada halaman project interpreter klik tanda + di toolbar kanan (Gambar 10)

5
10. Selanjutnya panel kiri klik Virtualenv Environment, pada panel kanan klik pada checkbox New
Environment>>Base Interpreter dirujuk ke python.exe di folder tempat menginstal python

Gambar 11. New Environment


11. Klik pada System Interpreter, pilih interpreter file ke python.exe di folder instal python>>Ok
(Gambar 12)

Gambar 12. System Interpreter


12. Setelah itu, aplikasi akan kembali ke halaman setting project interpreter, pilih pada settingan
yang telah dikonfigurasikan dan menghapus setting lain yang tidak diperlukan, klik OK
13. Sistem akan menampilkan keseluruhan library yang sudah diinstal, kemudian klik OK ( Gambar
13)

6
Gambar 13. Load all library

7
A. MENINGKATKAN KUALITAS CITRA-OPERASI TITIK

Judul PRAKTEK A1- MENAMPILKAN IMAGE

Deskripsi Mahasiswa mampu membuat aplikasi sederhana smart health menampilkan


gambar yang sudah ditentukan

Library openCV2
merupakan library computer vision yang dapat digunakan sebagai library
dalam digital image processing

Estimasi waktu 10 menit

Prerequisite Gambar dengan tema smart health


Tambahkan gambar ke dalam bagian project dengan cara:
1. Copy gambar yang akan di include-kan ke project

Gambar 14. Copy Gambar

2. Pada halaman PyCharm>>Project>>klik kanan>>pilih paste

8
Gambar 15. Paste gambar dalam projek
3. Kemudian akan keluar halaman konfirmasi paste file, isikan nama file
gambar tersebut dan pastikan direktorinya disimpan di lokasi yang
sama dengan projeknya, kemudian klik Ok

Gambar 16. Konfirmasi paste image


4. Jika sudah berhasil akan muncul nama file yang ditambahkan
sebelumnya di dalam project

Gambar 17. Gambar berhasil dimasukan ke projek

\Alur Proses 1. Import library computer vision


2. Baca file gambar yang akan di load ke sistem
3. Munculkan gambar dalam nama window ‘Image’
4. Tambahkan waitkey(n) fungsi yang digunakan untuk menambahkan
delay sementara gambar dirender
5. Menutup window dan membatalkan alokasi penggunaan memori yang
terkait.

Listing program Pada halaman main dapat diketikkan coding untuk memanggil file gambar
import cv2 //library opencv

img=cv2.imread('koala.jpg') //membaca file gambar


cv2.imshow('image',img) //menampilkan gambar
cv2.waitKey()
cv2.destroyAllWindows()

9
Judul PRAKTEK A2- MENAMPILKAN CITRA

Deskripsi Mahasiswa mampu membuat aplikasi sederhana smart health


menampilkan gambar yang sudah ditentukan dengan trigger berupa
menekan tombol/button

Library openCV2
merupakan library computer vision yang dapat digunakan sebagai library
dalam digital image processing

Estimasi waktu 15 menit

Prerequisite 1. Gambar dengan tema smart health


2. Untuk membuat projek baru, lakukan seperti pada praktek 1, termasuk
memeriksa kembali settingan jika dibutuhkan
3. Lakukan penambahan (copy paste) gambar ke dalam projek seperti
yang dilakukan pada praktek 1
4. Masuk ke direktori C:\Python36\Lib\site-packages\pyqt5-tools
5. Double klik pada ikon
6. Klik New Project
7. Setelah itu akan keluar window New Form>>Main
Window>>Create

Gambar 18. Create form QtDesigner

10
8. Posisikan sehingga seperti pada tampilan berikut ini atau
praktikan dapat kustomisasi kembali desain antarmuka

Gambar 19. Desain label dan push button


9. Klik Label, kemudian pada panel kanan, Property
Editor>>ObjectName>>ganti dengan nama “imgLabel”, kemudian
di property editor>>QFrame>>FrameShape>>Box
10. Klik pada push button>> Property Editor>>ObjectName>>ganti
dengan nama “loadButton”
11. Setelah itu save di satu folder dengan projek utama

Alur Proses 1. Import library yang dibutuhkan


2. Membuat class dengan nama ‘ShowImage’
3. Dalam class tersebut definiskan contructor method __init__, self
untuk dapat mengakses atribut dan parameter pada kelas
4. Dalam class Membuat prosedur button clicked
5. Dalam class Membuat prosedur load image
6. Dalam class Membuat prosedur display image
7. Membuat window enable menampilkan user interface dan kelasnya

Listing program #Import Library


import sys
import cv2
from PyQt5 import QtCore,QtWidgets
from PyQt5.QtCore import pyqtSlot
from PyQt5.QtGui import QImage,QPixmap
from PyQt5.QtWidgets import QDialog, Qapplication, QMainWindow
from PyQt5.uic import loadUi
#membuat class “ShowImage”
class ShowImage(QMainWindow):
def __init__(self):
super(ShowImage,self).__init__()
loadUi('showgui.ui',self)

11
self.image=None
self.loadButton.clicked.connect(self.loadClicked)
#membuat prosedur button clicked
@pyqtSlot()
def loadClicked(self):
self.loadImage('koala.jpg')
#membuat prosedur load image
def loadImage(self,flname):
self.image=cv2.imread(flname)
self.displayImage()
#membuat prosedur display image
ef displayImage(self):
qformat=QImage.Format_Indexed8

if len(self.image.shape)==3: #row[0],col[1],channel[2]
if (self.image.shape[2])==4:
qformat=QImage.Format_RGBA8888

else:
qformat=QImage.Format_RGB888

img=QImage(self.image,self.image.shape[1],self.image.shape[0],
self.image.strides[0],qformat)

# cv membaca image dalam format BGR, PyQt membaca dalam


format RGB
img=img.rgbSwapped()

# menyimpan gambar hasil load di dalam imgLabel


self.imgLabel.setPixmap(QPixmap.fromImage(img))

# memposisikan gambar di center

self.imgLabel.setAlignment(QtCore.Qt.AlignHCenter|QtCore.Qt.Al
ignVCenter)

# Membuat window enable menampilkan user interface dan kelasnya


app=QtWidgets.QApplication(sys.argv)
window=ShowImage()
window.setWindowTitle('Show Image GUI')
window.show()
sys.exit(app.exec_())

Tugas import sys


import cv2
from PyQt5 import QtCore,QtWidgets
from PyQt5.QtWidgets import QFileDialog,QMainWindow
from PyQt5.uic import loadUi
from PyQt5.QtCore import pyqtSlot
from PyQt5.QtGui import QImage,QPixmap
1. Jelaskan fungsi dari masing-masing library yang digunakan diatas
2. Modifikasi coding diatas agar dapat menampilkan citra berwarna
keabuan

12
3. Tambahkan coding untuk menampilkan gambar strecth sesuai ukuran
image label pada halaman GUI yang disediakan

Solusi 1. QtCore module contains core non-GUI functionality


2. PyqtSlot is a decorator which converts simple python method to Qt
slot
3. The QtGui module extends QtCore with GUI functionality
4. The Qimage class provides a hardware-independent image
representation that allows direct access to the pixel data, and can be
used as a paint device.
5. The Qpixmap class is an off-screen image representation that can be
used as a paint device
6. The Qwidget class is the base class of all user interface objects
7. A dialog window is a top-level window mostly used for short-term tasks
and brief communications with the user. Qdialogs may be modal or
modeless. Qdialogs can provide a return value, and they can
have default buttons.
8. Qapplication contains the main event loop, where all events from the
window system and other sources are processed and dispatched. It
also handles the application’s initialization, finalization, and provides
session management. In addition, Qapplication handles most of the
system-wide and application-wide settings.
9. PyQt5.uic.loadUi(uifile[, baseinstance=None[, package=’’[, resource_s
uffix=’_rc’]]])
Load a Qt Designer .ui file and returns an instance of the user interface.

Def loadImage(self,flname):
self.image=cv2.imread(flname,cv2.IMREAD_GRAYSCALE)
self.displayImage()

self.imgLabel.setScaledContents(True)

13
Listing Programimport sys
import cv2
Keseluruhan from PyQt5 import QtCore,QtWidgets
from PyQt5.QtWidgets import QFileDialog,QMainWindow
from PyQt5.uic import loadUi
from PyQt5.QtCore import pyqtSlot
from PyQt5.QtGui import QImage,QPixmap

class ImageProc(QMainWindow):
def __init__(self):
super(ImageProc,self).__init__()
loadUi('showgui.ui',self)
self.image=None
self.loadButton.clicked.connect(self.loadClicked)
self.action_Load_Image.triggered.connect(self.loadClicked)

@pyqtSlot()
def loadClicked(self):
flname,filter=QFileDialog.getOpenFileName(self,'Open
File','D:\\Programming\\Python',"Image Files (*.jpg)")
if flname:
self.loadImage(flname)
else:
print('Invalid Image')

def loadImage(self,flname):
self.image=cv2.imread(flname,cv2.IMREAD_COLOR)
self.displayImage()

def displayImage(self):
qformat=QImage.Format_Indexed8

if len(self.image.shape)==3:
if(self.image.shape[2])==4:
qformat=QImage.Format_RGBA8888
else:
qformat=QImage.Format_RGB888

img=QImage(self.image,self.image.shape[1],self.image.shape[0],se
lf.image.strides[0],qformat)

#BGR>RGB
img=img.rgbSwapped()
self.imgLabel.setPixmap(QPixmap.fromImage(img))

self.imgLabel.setAlignment(QtCore.Qt.AlignHCenter|QtCore.Qt.Alig
nVCenter)
self.imgLabel.setScaledContents(True)

if __name__=='__main__':
app=QtWidgets.QApplication(sys.argv)
window=ImageProc()
window.setWindowTitle('Image Processing')
window.show()
sys.exit(app.exec_())

14
Judul PRAKTEK A3- KONVERSI CITRA RGB KE CITRA KEABUAN

Deskripsi Konversi citra RGB ke citra keabuan dapat dilakukan dengan beberapa
persamaan, yaitu
greyscale = 0.333R + 0.333G + 0.333B (1)
greyscale = 0.299R + 0.587G + 0.114B (2)

Estimasi waktu 30 menit

Prerequisite Asumsi praktek 2 sudah dilakukan


1. Tambahkan push button ‘Save Image’ dengan nama objek ‘saveButton’
2. Tambahkan push button ‘Grayscale’ dengan nama objek ‘GrayButton’

Alur Proses 1. Load image RGB


2. Membuat prosedur konversi citra RGB ke grayscale (grayClicked)
3. Tampilkan citra RGB pada label 1 dan citra grayscale pada label 2

Listing Program #Import library numpy


import numpy as np
#definisikan prosedure grayButton di dalam kelas
self.grayButton.clicked.connect(self.grayClicked)
#membuat prosedure konversi citra RGB ke citra keabuan
H, W = self.image.shape[:2]
gray = np.zeros((H, W), np.uint8)
for i in range(H):
for j in range(W):
gray[i,j]= np.clip(0.299 * self.image[i, j, 0] + 0.587
* self.image[i, j, 1] + 0.114 * self.image[i, j, 2], 0, 255)
self.image=gray
self.displayImage(2)

#atur penyimpanan gambar. Pada prosedure displayImage tambahakn


def displayImage(self, windows=1):
Pada prosedure display image ubah koding untuk menamapilkan gambar
sehingga seperti berikut:

if windows==1:
self.imgLabel.setPixmap(QPixmap.fromImage(img))

self.imgLabel.setAlignment(QtCore.Qt.AlignHCenter|QtCore.Qt.Al
ignVCenter)
self.imgLabel.setScaledContents(True)
if windows==2:
self.hasilLabel.setPixmap(QPixmap.fromImage(img))

15
self.hasilLabel.setAlignment(QtCore.Qt.AlignHCenter|QtCore.Qt.
AlignVCenter)
self.hasilLabel.setScaledContents(True)

set windows==1 untuk menampilkan citra RGB dan set windows==2 untuk
menampilkan citra hasil pengolahan

Tugas 1. Jika diketahui matriks piksel citra RGB sebagai berikut:


R=80 R=140 R=200 R=50
G=20 G=65 G=100 G=150
B=45 B=100 B=25 B=200

R=20 R=56 R=26 R=84


G=150 G=88 G=187 G=214
B=100 B=123 B=99 B=69

R=80 R=58 R=78 R=95


G=65 G=85 G=89 G=78
B=254 B=250 B=215 B=198

Konversikan citra RGB menjadi citra keabuan


2. Jelaskan mengenai kegunaan dari library numpy
3. Jelaskan mekanisme untuk mengubah citra berwarna ke dalam citra
berskala keabuan!
4. Ubah tampilan dengan memanfaatkan menubar, tambahkan open dan
save dalam satu struktur File dan fungsi grayscale pada struktur
Operasi Titik sehingga muncul tampilan sebagai berikut:

5. Gunakan perintah ‘Print’ untuk menampilkan matriks piksel citra


keabuan

16
Solusi self.action_Load_Image.triggered.connect(self.loadClicked)
self.action_Save_Image.triggered.connect(self.saveClicked)
self.actionGrayscale.triggered.connect(self.grayClicked)

pada QtDesigner, Menu Load Image beri nama objek action_Load_Image,


kemudian save image diberi nama action_Save_Image serta menu
grayscale beri nama objek actionGrayscale
fungsi masing-masing menu sama dengan fungsi yang telah disediakan saat
menggunkan button

Listing Program
import sys
Keseluruhan import cv2
import math
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtWidgets import QDialog,
QApplication,QFileDialog,QMainWindow, QAction
from PyQt5.uic import loadUi
from PyQt5.QtCore import pyqtSlot
from PyQt5.QtGui import QImage,QPixmap
import numpy as np
from matplotlib import pyplot as plt

class ImageProc(QMainWindow):
def __init__(self):
super(ImageProc,self).__init__()
loadUi('showimg.ui',self)
self.image=None
self.loadButton.clicked.connect(self.loadClicked)
self.saveButton.clicked.connect(self.saveClicked)
self.grayButton.clicked.connect(self.grayClicked)

@pyqtSlot()
def grayClicked(self):
H,W= self.image.shape[:2]
gray=np.zeros((H,W),np.uint8)
for i in range (H):
for j in range (W):

gray[i,j]=np.clip(0.07*self.image[i,j,0]+0.72*self.image[i,j,1
]+0.21*self.image[i,j,2],0,255)
self.image=gray
self.displayImage(2)

@pyqtSlot()
def loadClicked(self):
flname,filter=QFileDialog.getOpenFileName(self,'Open
File','D:\\',"Image Files (*.jpg)")
if flname:
self.loadImage(flname)
else:
print('Invalid Image')
@pyqtSlot()
def saveClicked(self):
flname, filter=QFileDialog.getSaveFileName(self,'Save
17
File','D:\\',"Image Files (*.jpg)")
if flname:
cv2.imwrite(flname,self.image)
else:
print('Error')

def loadImage(self,flname):
self.image=cv2.imread(flname,cv2.IMREAD_COLOR)
self.displayImage(1)

def displayImage(self, windows=1):


qformat=QImage.Format_Indexed8

if len(self.image.shape)==3:
if(self.image.shape[2])==4:
qformat=QImage.Format_RGBA8888
else:
qformat=QImage.Format_RGB888

img=QImage(self.image,self.image.shape[1],self.image.shape[0],
self.image.strides[0],qformat)

#BGR>RGB
img=img.rgbSwapped()
if windows==1:
self.imgLabel.setPixmap(QPixmap.fromImage(img))

self.imgLabel.setAlignment(QtCore.Qt.AlignHCenter|QtCore.Qt.Al
ignVCenter)
self.imgLabel.setScaledContents(True)
if windows==2:
self.hasilLabel.setPixmap(QPixmap.fromImage(img))

self.hasilLabel.setAlignment(QtCore.Qt.AlignHCenter|QtCore.Qt.
AlignVCenter)
self.hasilLabel.setScaledContents(True)

if __name__=='__main__':
app=QtWidgets.QApplication(sys.argv)
window=ImageProc()
window.setWindowTitle('Image Processing')
window.show()
sys.exit(app.exec_())

Tambahkan perintah Print (gray)dibawah fungsi Gray [i,j] untuk


melihat hasil citra keabuan berdasarkan nilai piksel

18
Judul PRAKTEK A4- PENCERAHAN CITRA

Deskripsi Untuk mengatur tingkat kecerahan citra dapat dilakukan dengan


menggunakan persamaan berikut (Munir, 2004):
f(x, y)’ = f(x, y) + b (3)
Jika b positif, kecerahan citra bertambah, sebaliknya jika b negatif kecerahan
citra berkurang. Setelah proses pengaturan pencahayaan gunakan operasi
clipping agar nilai piksel berada di nilai minimum dan maksimum.

(4)

Estimasi waktu 30 menit

Prerequisite Asumsi praktek sebelumnya harus sudah dikerjakan


1. Tambahkan pada halaman GUI di bawah struktur Operasi titik dengan
nama menu ‘Brightness’
2. Beri object name adalah actionBrightness
3. Siapkan 5 buah citra keabuan dan 5 buah citra RGB dengan tingkat
kecerahan yang beragam

Alur Proses 1. Load image RGB


2. Konversi citra RGB ke grayscale
3. Baca array nilai piksel setiap baris dan kolom
4. Terapkan Persamaan (3) untuk proses brightness
5. Terapkan proses clipping
6. Display citra

Listing Program #konversikan citra RGB ke grayscale (pada proses ini menggunakan library
opencv)
img = cv2.cvtColor(self.image, cv2.COLOR_BGR2GRAY)

#tentukan konstanta nilai bright


brightness = 50

#Baca Nilai piksel citra


h, w = img.shape[:2]
#untuk masing-masing array piksel dilakukan penjumlahan dengan konstanta
for i in np.arange(h):
for j in np.arange(w):

19
a = img.item(i, j)
b = a + brightness
#terapkan proses clipping
if b > 255:
b = 255
elif b < 0:
b = 0
else:
b = b

img.itemset((i, j), b)

Tugas 1. Analisis jika nilai brightness diberikan nilai negatif


2. Jelaskan bahwa dengan menggunakan peningkatan kecerahan saja,
warna hitam justru menjadi tidak tegas lagi!
3. Analisis citra dengan membandingkan nilai piksel sebelum dan setelah
dilakukan proses brightness
4. Modifikasi menggunakan trackbar untuk mengatur nilai konstanta pada
halaman GUI

Listing Programclass ImageProc(QMainWindow):


def __init__(self):
Keseluruhan super(ImageProc,self).__init__()
loadUi('showgui.ui',self)
self.image=None
self.loadButton.clicked.connect(self.loadClicked)
self.saveButton.clicked.connect(self.saveClicked)

self.action_Load_Image.triggered.connect(self.loadClicked)

self.action_Save_Image.triggered.connect(self.saveClicked)
self.actionGrayscale.triggered.connect(self.grayClicked)

self.actionBrightness.triggered.connect(self.brightClicked)

self.actionSimple_Contrast.triggered.connect(self.contrastClicke
d)

@pyqtSlot()
def brightClicked(self):
img = cv2.cvtColor(self.image, cv2.COLOR_BGR2GRAY)
brightness = 50
h, w = img.shape[:2]
for i in np.arange(h):
for j in np.arange(w):
a = img.item(i, j)
b = a + brightness
if b > 255:
b = 255
elif b < 0:
b = 0
else:
b = b

20
img.itemset((i, j), b)
self.image = img
self.displayImage(2)

Judul PRAKTEK A5- PENGATURAN KONTRAS CITRA

Deskripsi Pengaturan kontras dapat dilakukan dengan Persamaan (5)


f(x, y)’ = f(x, y) * c (5)

Estimasi 25 menit
waktu

Prerequisite Asumsi praktek sebelumnya sudah dilakukan


1. Tambahkan pada halaman GUI menu Simple Contrast
2. Beri object name adalah actionSimple_Contrast
3. Siapkan 5 buah citra keabuan dan 5 buah citra RGB dengan tingkat kecerahan
yang beragam

Alur Proses 1. Import math


2. Deklarasikan fungsi button/menu
3. Load image RGB
4. Konversi citra RGB ke grayscale
5. Baca array nilai piksel setiap baris dan kolom
6. Terapkan Persamaan (5) untuk proses contrast
7. Terapkan proses clipping
8. Display citra

Listing Proses sama dengan pengaturan cahaya hanya nilai kontras dapat diatur sebagai beriku:
Program #tentukan konstanta nilai kontras
contrast = 1.6
#untuk masing-masing array piksel dilakukan pengali denga konstanta kontras

b = math.ceil(a * contrast)
#terapkan proses clipping

Tugas 1. Jelaskan yang dimaksud dengan citra dengan kontras rendah. Apakah efeknya?
2. Analisis jika nilai kontras diganti dengan nilai lebih kecil dan lebih besar dari
contoh yang diberikan

21
3. Analisis citra dengan membandingkan nilai piksel sebelum dan setelah dilakukan
proses kontras
4. Jelaskan library math serta jelaskan fungsi math.ceil
5. Modifikasi menggunakan trackbar untuk mengatur nilai konstanta pada halaman
GUI

Solusi @pyqtSlot() # contrast


def contrastClicked(self):
gray = cv2.cvtColor(self.image, cv2.COLOR_BGR2GRAY)
height = gray.shape[0]
width = gray.shape[1]

contrast = 1.6

for i in np.arange(height):
for j in np.arange(width):
a = gray.item(i, j)
b = math.ceil(a * contrast)
if b > 255:
b = 255
gray.itemset((i, j), b)
self.image = gray
self.displayImage(2)

Judul PRAKTEK A6- PEREGANGAN KONTRAS

Deskripsi Rumus Peregangan kontras dilakukan untuk mengatur kontras citra berdasarkan nilai
piksel (Munir, 2004)

(6)
Dimana:
R : nilai keabuan dalam citra semula,
S : adalah nilai keabuan yang baru,
rmin: nilai keabuan terendah dari kelompok pixel
rmax: adalah nilai keabuan tertinggi dari kelompok pixel

Estimasi 20 menit
waktu

Prerequisite Asumsi praktek sebelumnya harus sudah dikerjakan


1. Tambahkan pada halaman GUI menu Contrast Stretching
2. Beri object name adalah actionContrast_Stretching

Alur Proses Alur proses sama dengan praktek mengatur kontras citra (see praktek 5)

22
1. Tentukan nilai konstanta nilai maksimum piksel dan minimum piksel, karena pada
praktek ini menggunakan citra 8 bit maka maks=255 dan min=0
2. Baca nilai array piksel
3. Jika nilai piksel pada koordinat (i,j) lebih besar dari nilai maksimum maka, nilai
piksel (i,j) sama dengan nilai maksimum dan
4. jika nilai piksel (i,j) lebih kecil dari nilai minimum maka nilai piksel (,j) sama dengan
nilai minimum
5. Setelah itu untuk setiap nilai piksel dalam matriks citra diproses dengan
menerapkan Persamaan (6)
6. Display image

Tugas Berdasarkan percobaan sebelumnya yang telah dilakukan, merujuk kepada alur
proses yang telah dijabarkan :
1. Gambarkan flowchart proses Contrast Stretching dengan asumsi citra yang
diinputkan sudah merupakan citra keabuan
2. Implementasikan dalam coding python
3. Analisis citra dengan membandingkan nilai piksel sebelum dan setelah
dilakukan proses pengolahan

Solusi #deklarasikan fungsi menu peregangan kontras


self.actionContrast_Stretching.triggered.connect(self.stretchingContras
tClicked)

@pyqtSlot()
def stretchingContrastClicked(self):
img = cv2.cvtColor(self.image, cv2.COLOR_BGR2GRAY)
h, w = img.shape[:2]

min = 255
max = 0

for i in np.arange(h):
for j in np.arange(w):
a = img.item(i, j)
if a > max:
max = a
if a < min:
min = a

for i in np.arange(h):
for j in np.arange(w):
a = img.item(i, j)
b = float(a - min) / (max - min) * 255
img.itemset((i, j), b)

self.image = img
self.displayImage(2)

23
Judul PRAKTEK A7- NEGATIVE IMAGE

Deskripsi Untuk citra negatif dapat diperoleh dengan Persamaan (7)


f(x, y)’ = 255 – f(x, y) (7)

Estimasi 20 menit
waktu

Prerequisite Asumsi praktek sebelumnya harus sudah dikerjakan


1. Tambahkan pada halaman GUI menu Negative Image
2. Beri object name adalah actionNegative_Image

Alur Proses Alur proses sama dengan praktek mengatur kontras citra (see praktek 5)
1. Tentukan nilai konstanta maximum_intensity = 255
2. Baca nilai array piksel
3. Terapkan Persamaan (7)
4. Display image

Tugas Berdasarkan percobaan sebelumnya yang telah dilakukan, merujuk kepada alur
proses yang telah dijabarkan :
1. Jika diketahui matriks citra piksel sebagai berikut, Konversikancitra keabuan
menjadi citra negatif dengan derajat keabuan 8 bit

200 185 215 236 180 195

198 100 155 89 121 211

185 100 154 58 100 105

166 131 114 28 101 125

157 147 68 25 129 134

155 192 206 213 250 254

2. Gambarkan flowchart asumsi citra yang diinputkan sudah merupakan citra


keabuan
3. Implementasikan dalam coding python

24
4. Analisis citra dengan membandingkan nilai piksel sebelum dan setelah
dilakukan proses pengolahan

Solusi @pyqtSlot()
def negatifClicked(self):
img = cv2.cvtColor(self.image, cv2.COLOR_BGR2GRAY)
h, w = img.shape[:2]
max_intensity = 255
for i in range(h):
for j in range(w):
a = img.item(i, j)
b = max_intensity - a
img.itemset((i, j), b)
self.image = img
self.displayImage(2)

Judul PRAKTEK A8- BINER IMAGE

Tugas Awal Bagaimana mekanisme mengubah citra berskala keabuan menjadi citra biner!
Gambarkan dan jelaskan dalam bentuk flowchart!

Estimasi 10 menit
waktu

Prerequisite Asumsi praktek sebelumnya harus sudah dikerjakan


1. Tambahkan pada halaman GUI menu Biner Image
2. Beri object name adalah actionBiner_Image

Tugas 1. Implementasikan flowchart dalam listing program


2. Analisis citra dengan nilai threshold yang berbeda signifikan
3. Analisis citra dengan membandingkan nilai piksel sebelum dan setelah dilakukan
proses pengolahan

Solusi @pyqtSlot()
def BinerClicked(self):
img = cv2.cvtColor(self.image, cv2.COLOR_BGR2GRAY)
thres=100
h, w = img.shape[:2]
for i in np.arange(h):
for j in np.arange(w):
a=img.item(i,j)
if a>thres:
a=255
elif a<thres:
a=0
else:
a=a
img.itemset((i,j),a)

25
self.image = img
self.displayImage(2)

Judul PRAKTEK A9- HISTOGRAM CITRA GRAYSCALE

Deskripsi Histogram merupakan grafik yang menggambarkan penyebaran nilai-nilai intensitas


pixel dari suatu citra

Estimasi 10 menit
waktu

Prerequisite Asumsi praktek sebelumnya harus sudah dikerjakan


1. Tambahkan pada halaman GUI menu Histogram Grayscale
2. Beri object name adalah actionGray_Histogram

Listing Pada praktek ini menggunakan library matplotlib sehingga:


Program #import library matplotlib
from matplotlib import pyplot as plt
#deklarasikan menu Histogram
#membuat prosedur Histogram citra grayscale
- Konversi citra RGB ke grayscale atau gunakan citra grayscale
- Tampilkan citra keabuan di hasilLabel
- Tampilkan grafik menggunakan library matplotlib seperti di bawah ini
plt.hist(img.ravel(), 255, [0, 255])
plt.show()

Tugas 1. Analisis hasil proses histogram dari 5 buah citra keabuan yang berbeda tingkat
kecerahan dan kontrasnya
2. Jelaskan library matplotlib pada python
3. Jelaskan fungsi dari plt.hist(img.ravel(),255,[0,255])
4. Terdapat citra 4 x 4 dengan rincian nilai kecerahan piksel sbb:
Aras keabuan sebanyak 8. Bagaiamana histogram citra tersebut dalam bentuk
angka dan grafik

7 7 7 7

6 5 5 6

5 5 5 5

2 4 0 1

26
Listing @pyqtSlot()
def GrayHistogramClicked(self):
program img = cv2.cvtColor(self.image, cv2.COLOR_BGR2GRAY)
Keseluruha self.image = img
self.displayImage(2)
n plt.hist(img.ravel(), 255, [0, 255])
plt.show()

Judul PRAKTEK A10- HISTOGRAM CITRA RGB

Deskripsi Histogram merupakan grafik yang menggambarkan penyebaran nilai-nilai intensitas


pixel dari suatu citra dari 3 buah kanal yaitu Red, Green, Blue

Estimasi 10 menit
waktu

Prerequisite Asumsi praktek sebelumnya harus sudah dikerjakan


1. Tambahkan pada halaman GUI menu Histogram RGB
2. Beri object name adalah actionRGB_Histogram

Listing #deklarasikan menu Histogram


Program #membuat prosedur Histogram citra RGB
@pyqtSlot()
def RGBHistogramClicked(self):
color = ('b', 'g', 'r')
for i,col in enumerate(color):
histo=cv2.calcHist([self.image],[i],None,[256],[0,256])
plt.plot(histo,color=col)
plt.xlim([0,256])
plt.show()

Tugas 1. Analisis hasil histogram untuk 5 buah citra RGB dengan komposisi warna yang
beragam, serta tingkat kecerahan dan kontras yang berbeda
2. Berdasarkan listing program yang diberikan jelaskan masing-masing baris
3. Jelaskan fungsi calcHist

Judul PRAKTEK A11- HISTOGRAM EQUALIZATION

Deskripsi perataan histogram adalah mengubah derajat keabuan suatu pixel ( r) dengan derajat
keabuan yang baru ( s) dengan suatu fungsi transformasi T,

Estimasi 15 menit
waktu

27
Prerequisite Asumsi praktek sebelumnya harus sudah dikerjakan
1. Tambahkan pada halaman GUI menu Histogram Equalization
2. Beri object name adalah actionEqual_Histogram
3. Siapkan citra keabuan dengan beragam kondisi kontras dan pencahayaan

Listing @pyqtSlot()
def EqualHistogramClicked(self):
program hist, bins = np.histogram(self.image.flatten(), 256, [0, 256])
cdf = hist.cumsum()
cdf_normalized = cdf * hist.max() / cdf.max()
cdf_m = np.ma.masked_equal(cdf, 0)
cdf_m = (cdf_m - cdf_m.min()) * 255 / (cdf_m.max() - cdf_m.min())
cdf = np.ma.filled(cdf_m, 0).astype('uint8')
self.image = cdf[self.image]
self.displayImage(2)

plt.plot(cdf_normalized, color='b')
plt.hist(self.image.flatten(), 256, [0, 256], color='r')
plt.xlim([0, 256])
plt.legend(('cdf', 'histogram'), loc='upper left')
plt.show()

Tugas 1. Jelaskan fungsi dari masing-masing baris


2. Analisis perubahan histogram dari citra yang telah disediakan sebelumnya

28
B. MENINGKATKAN KUALITAS CITRA-OPERASI GEOMETRI

Judul PRAKTEK B1- TRANSLASI CITRA

Deskripsi Translasi citra adalah proses menggeser citra dengan menambahkan atau
mengurakan koordinat X dan Y.
Jika diilustrasikan menggunakan matriks
1 0 𝑡𝑥
𝑇 = [0 1 𝑡 ]
𝑦
Tx dan ty adalah nilai translasi, citra akan bergeser dimana x bergeserk arah
horizontal dan y bergeser arah vertikal

Estimasi waktu 10 menit

Prerequisite Pada menu bar tambahkan menu baru ‘operasi Geometri’


Di bawah Operasi Geometri tambahkan menu ‘Translasi’

Listing program h,w=self.image.shape[:2]


quarter_h,quarter_w=h/4,w/4
T=np.float32([[1,0,quarter_w],[0,1,quarter_h]])
img=cv2.warpAffine(self.image,T,(w,h))

Tugas 1. Lakukan analisis citra dengan mengubah nilai pada fungsi


quarter_h,quarter_w=h/4,w/4
2. Apakah terjadi perubahan nilai piksel setelah dilakukan proses ini?
Analisis citra dimanakan perubahan terjadi dari !jelaskan!

Judul PRAKTEK B2- ROTASI CITRA DAN TRANSPOSE

Deskripsi Memutar citra yang ditentukan nilai variabel rotasi sebesar  terhadap
sudut 0 derajat atau horizontal dan vertikal

Estimasi waktu 20 menit

Prerequisite Tambahkan menu Rotasi dan buatlah sub menu yaitu


a. -45 derajat
b. 45 derajat
c. -90 derajat
d. 90 derajat
e. 180 derajat

29
Membuat fungsi seperti pada listing program

Listing program def rotasi(self,degree):


h, w = self.image.shape[:2]

rotationMatrix = cv2.getRotationMatrix2D((w / 2, h / 2),


degree, .7)
cos = np.abs(rotationMatrix[0, 0])
sin = np.abs(rotationMatrix[0, 1])

nW = int((h * sin) + (w * cos))


nH = int((h * cos) + (w * sin))

rotationMatrix[0, 2] += (nW / 2) - w / 2
rotationMatrix[1, 2] += (nH / 2) - h / 2
rot_image = cv2.warpAffine(self.image, rotationMatrix, (h,
w))
self.image=rot_image

Tugas 1. Tambahkan event untuk setiap sub menu di menu rotasi dengan
memanggil fungsi pada listing program diatas
2. Jelaskan mengenai fungsi getRotationMatrix2D dan warpAffine
3. Tambahkan menu Transpose pada GUI QT Designer, gunakan fungsi
cv2.transpose untuk membuat prosedur transpose image
4. Jelaskan fungsi cv2.transpose

SOLUSI #soal no.1


@pyqtSlot()
def RotasiPlus45Clicked(self):
self.rotasi(-45)
self.displayImage(2)

@pyqtSlot()
def RotasiMin90Clicked(self):
self.rotasi(-90)
self.displayImage(2)
.....
.....

#soal no.3
@pyqtSlot()
def TransposeClicked(self):
trans_img=cv2.transpose(self.image)
self.image=trans_img
self.displayImage(2)

30
Judul PRAKTEK B3- RESIZE

Deskripsi Operasi yang memberikan efek memperbesar atrau memperkecil ukuran


citra sesuai dengan variabel penskalaan citra

Estimasi waktu 15 menit

Prerequisite Menambahkan menu Resize dan sub menu yaitu Zoom In, Zoom out dan
Skewed Image (mengatur image berdasarkan dimensi yang ditentukan)

Pada pembuatan fungsi ini agar citra keluaran ditampilkan menggunakan


cv2.imshow atau menampilkan windows baru (tidak ditampilkan di img
label hasil proses )

Listing program #fungsi zoom/scaling up 2x ukuran citra asli


resize_img=cv2.resize(self.image,None,fx=2,fy=2,interpolation=
cv2.INTER_CUBIC)
#fungsi scaling down ½ dari ukuran citra semula
resize_img=cv2.resize(self.image,None,fx=0.50, fy=0.50)
#fungsi mengubah ukuran berdasarkan dimensi (900 x 400)
resize_img=cv2.resize(self.image,(900,400),interpolation=cv2.I
NTER_AREA)

Tugas 1. Ubah tampilan sistem agar pada menu zoom in dapat memperbesar
dengan skala 2x, 3x, 4x dan buatkan event untuk dapat
menampilkan citra sesuai skala
2. Ubah tampilan sistem agar pada menu zoom out dapat
memperbesar dengan skala 1/2, 1/4, 3/4 dan buatkan event untuk
dapat menampilkan citra sesuai skala
3. Ubah tampilan sistem agar pada menu skewed dapat memperbesar
sesuai ukuran-ukuran yang tersedia dalam pengaturan resolusi
untuk layar komputer dan buatkan event untuk dapat menampilkan
citra sesuai dimensi yang ditentukan

Solusi @pyqtSlot()
def Linear_InterpolationClicked(self):
#make size 3/4 original image size
cv2.imshow('Original',self.image)
resize_img=cv2.resize(self.image,None,fx=0.50, fy=0.50)
self.image=resize_img
cv2.imshow('',self.image)
#self.displayImage(2)

@pyqtSlot()
def Cubic_InterppolationClicked(self):
#double size of original image size/zooming(scaling up)

31
cv2.imshow('Original', self.image)

resize_img=cv2.resize(self.image,None,fx=2,fy=2,interpolation=
cv2.INTER_CUBIC)
self.image = resize_img
cv2.imshow('',self.image)
#self.displayImage(2)

@pyqtSlot()
def skewed_SizeClicked(self):
#resize image based on exacat dimension
cv2.imshow('Original', self.image)

resize_img=cv2.resize(self.image,(900,400),interpolation=cv2.I
NTER_AREA)
self.image=resize_img
cv2.imshow('',self.image)
#self.displayImage(2)

Judul PRAKTEK B4- CROP IMAGE

Deskripsi Memotong citra citra berdasarkan ukuran dimensi yang ditentukan

Estimasi waktu 10 menit

Prerequisite Menambahkan menu Crop

Alur Proses 1. Tentukan koordinat atau posisi x (row) dan y (coloum) awal yang
diawali dari ujung kiri atas
2. Tentukan koordinat atau posisi x (row) dan y (coloum) akhir berakhir
di ujung kanan bawah
3. Set koordinat image citracitra[start row s/d end row, start col s/d end
col]
4. Tampilkan citra

Tugas 1. Buatkan flowchart dari algoritma di atas!


2. Buatkan program crop image berdasarkan flowchart yang dibuat
3. Analisis citra untuk beberapa kasus pemotongan citra

Solusi @pyqtSlot()
def CropingClicked(self):
h,w=self.image.shape[:2]
#get the strating point of pixel coord(top left)
start_row, start_col=int(h*.1),int(w*.1)
#get the ending point coord (botoom right)
end_row, end_col=int(h*.5),int(w*.5)
crop=self.image[start_row:end_row,start_col:end_col]

32
cv2.imshow('Original',self.image)
cv2.imshow('Crop Image',crop)

@pyqtSlot()
def CropingClicked(self):
h,w=self.image.shape[:2]
crop=self.image[0:1000,0:500]

C. MENINGKATKAN KUALITAS CITRA-OPERASI ARITMATIKA

Judul PRAKTEK C1- OPERASI ARITMATIKA

Deskripsi Melakukan proses artitmatika piksel antara dua buah citra

Estimasi waktu 10 menit

Prerequisite 1. Siapkan dua buah citra yang disimpan di direktori aplikasi utama
disimpan

Listing Program img1 = cv2.imread('img1.jpg', 0)


img2 = cv2.imread('img2.jpg', 0)

add_img = img1 + img2


subtract = img1 - img2

Tugas 1. Tambahkan untuk dapat menampilkan citra yang sudah dikalikan


dan dibagi
2. Analisis dari hasil empat proses citra yang diproses secara aritmatika
tersebut
3. Analisis citra dari perubahan piksel sebelum dan setelah dilakukan
operasi!

Solusi @pyqtSlot()
def aritmatika_CitraClicked(self):
img1 = cv2.imread('img1.jpg', 0)
img2 = cv2.imread('img2.jpg', 0)
add_img = img1 + img2
subtract = img1 - img2
subtract2=img2-img1
mul = img1 * img2
div = img1 / img2

cv2.imshow('Image 1', img1)


cv2.imshow('Image 2', img2)
cv2.imshow('Add', add_img)
cv2.imshow('Subtraction', subtract)
cv2.imshow('Multiply', mul)
cv2.imshow('Divide', div)

33
Judul PRAKTEK C2-OPERASI BOOLEAN

Deskripsi Melakukan proses operasi boolean terhadap dua buah citra

Estimasi waktu 10 menit

Prerequisite 1. Siapkan dua buah citra yang disimpan di direktori projek disimpan

Listing Program img1 = cv2.imread('img1.jpg', 1)


img2 = cv2.imread('img2.jpg', 1)
img1=cv2.cvtColor(img1,cv2.COLOR_BGR2RGB)
img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2RGB)
op_and=cv2.bitwise_and(img1,img2)

Tugas 1. Tambahkan untuk dapat menampilkan dua buah citra untuk operator
OR, XOR
2. Analisis dari hasil proses citra yang diproses operasi boolean tersebut
3. Analisis citra dari perubahan piksel sebelum dan setelah dilakukan
operasi!

Solusi @pyqtSlot()
def Logika_ANDClicked(self):
img1 = cv2.imread('img1.jpg', 1)
img2 = cv2.imread('img2.jpg', 1)
img1=cv2.cvtColor(img1,cv2.COLOR_BGR2RGB)
img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2RGB)
op_and=cv2.bitwise_and(img1,img2)
op_or=cv2.bitwise_or(img2,img2)
op_xor=cv2.bitwise_xor(img1,img2)

cv2.imshow('Image 1', img1)


cv2.imshow('Image 2', img2)
cv2.imshow('And', op_and)
cv2.imshow('OR', op_or)
cv2.imshow('XOR', op_xor)

34
D. MENINGKATKAN KUALITAS CITRA-OPERASI SPASIAL

Judul PRAKTEK D1- KONVOLUSI 2D

Deskripsi Konvolusi 2D merupakan suatu proses untuk memperoleh suatu piksel


berdasarkan pada nilai piksel itu sendiri dan ketetanggannya dengan
melibatkan suatu matriks kernel yang mempresentasikan pembobotan
(Kadir & Susanto, 2013).
Proses konvolusi matrik piksel citra dengan matriks kernel dapat
diilustrasikan sebagai berikut ini (Munir, 2004):

Gambar 20. Ilustrasi Konvolusi


Berbeda dengan koordinat piksel citra yang dimulai (0,0) dari ujung kiri
atas , koordinat kernel ditunjukkan pada Gambar di bawah ini

Gambar 21. Koordinat kernel

35
Estimasi waktu 20 menit

Prerequisite Siapkan 5 buah citra yang telah diedit menggunakan tools editing image
seperti Adobe Photoshop, atur sehingga citra tersebut memiiki noise
seperti salt & papper, Spike dll

Alur Proses Masukkan :


X: Citra yang akan dikonvolusi
F: Kernel Konvolusi
Keluaran:
Out: citra hasil keluaran

1. Baca ukuran tinggi dan lebar citra


2. Baca ukuran tinggi dan lebar kernel
3. H=ukuran tinggi kernel /2
4. W=ukuran lebar kernel/2
5. For i: H+1 to ukuran_tinggi_citra-H
For j:W+1 to ukuran_lebar_citra-W
#lakukan konvolusi
Sum=0
For k: -H to H
For l : -W to W
a=X[i+k, j+1]
w=F[H+k, W+1]
sum=sum+(w*a)
End for
End For
out[i, j] = sum
End For
End For

1. Untuk memanggil fungsi konvolusi di GUI buatlah menu Filtering


dibawah struktur menu Operasi Spasial dengan objectname
‘actionFilter’
2. Inisialisasi menu filtering di main.python
3. Panggil fungsi konvolusi dengan cara import function
4. Buat prosedur menu filtering
def filteringClicked(self):
ubah citra masukan menjadi grayscale

36
kernel = array piksel kernel

img_out = fungsi_konvolusi(citra masukan, kernel)

plt.imshow(img_out, cmap='gray', interpolation='bicubic')


plt.xticks([], plt.yticks([]))
plt.show()

Tugas 1. Implementasikan pseudo code diatas menjadi fungsi Konvolusi yang


terpisan file python dan disimpan dalam satu direktori dengan project
utama
2. Ujikan fungsi konvolusi diatas dengan memanggil fungsi tersebut
dengan kernel sbb:
1 1 1
a) [1 1 1]
1 1 1
6 0 −6
b) [6 1 −6]
6 0 −6
3. Analisis hasil pengujian diatas
4. Analisis citra dari perubahan piksel citra sebelum dikonvolusi dan citra
yang telah dikonvolusi!

SOLUSI import numpy as np

# X and F are numpy matrices


def convolve(X, F):

X_height = X.shape[0]
X_width = X.shape[1]

F_height = F.shape[0]
F_width = F.shape[1]

H = (F_height) // 2
W = (F_width) // 2

out = np.zeros((X_height, X_width))

for i in np.arange(H+1, X_height - H):


for j in np.arange(W+1, X_width - W):
sum = 0
for k in np.arange(-H, H + 1):
for l in np.arange(-W, W + 1):
a = X[i + k, j + l]
w = F[H + k, W + l]
sum += (w * a)
out[i, j] = sum

return out

PROSEDUR MEMANGGIL FUNGSI KONVOLUSI


@pyqtSlot()
def MeanClicked(self):
img = cv2.cvtColor(self.image, cv2.COLOR_BGR2GRAY)

37
kernel = np.array(
[[1, 1, 1],
[1, 1, 1],
[1, 1, 1]])

img_out = conv(img, kernel)

plt.imshow(img_out, cmap='gray', interpolation='bicubic')


plt.xticks([], plt.yticks([]))
plt.show()

Judul PRAKTEK D2- IMAGE SMOOTHING USING MEAN FILTER

Deskripsi Operasi pelembutan dilakukan dengan mengganti intensitas suatu pixel


dengan rata-rata dari nilai pixel tersebut dengan nilai pixel-pixel
tetangganya (Munir, 2004).

Contoh penapis rerata yang berukuran 3 x 3 dan 2 x 2 adalah seperti di


bawah ini

Gambar 22. Kernel mean filter

Estimasi waktu 15 menit

Prerequisite 1. Asumsi telah membuat fungsi konvolusi


2. Citra noise sebanyak minimal 5 buah citra

Tugas 1. Buat prosedur untuk menu pelembutan citra menggunakan mean


filter
2. Analisis hasil program untuk kernel (i) dan kernel (ii)
3. Jelaskan mengapa proses mean filter memberikan efek blurring?
Dapat dijelaskan menggunakan studi kasus proses konvolusi untuk
melembutkan citra pada ukuran citra 6 x 6 dengan derajat keabuan 8
bit!
4. Analisis piksel citra berdasarkan aplikasi yang dibuat berdasarkan citra
sebelum dikonvolusi dan yang setelah dikonvolusi!

SOLUSI @pyqtSlot()
def MeanClicked(self):
img = cv2.cvtColor(self.image, cv2.COLOR_BGR2GRAY)
mean = (1.0 / 9) * np.array(
[[1, 1, 1],
[1, 1, 1],
[1, 1, 1]])

38
img_out = conv(img, mean)

plt.imshow(img_out, cmap='gray', interpolation='bicubic')


plt.xticks([], plt.yticks([]))
plt.show()

Soal no.3 berikan studi kasus berupa matriks piksel ukuran 5x5 kemudian
konvolusi secara manual menggunakan kernel mean. Analisis hasil matriks
yang diperoleh dan hubungkan dengan hasil blurring citra.

Hubungkan bahwa Operasi penapisan ini mempunyai efek pemerataan


derajat keabuan, sehingga gambar yang diperoleh tampak lebih kabur
kontrasnya.

Judul PRAKTEK D3- IMAGE SMOOTHING USING GAUSSIAN FILTER

Deskripsi Gaussian Filter digunakan untuk proses penghalusan citra, pengaburan,


menghilangkan detail, menghilangkan noise (Munir, 2004).

1
𝐺(𝑥,𝑦) = exp⁡(−(𝑥 2 + 𝑦 2 )/2𝜎 2 (8)
2𝜋𝜎2
Dimana  adalah standar deviasi dan distribusi biasanya diatur =1
X,y adalah posisi koordinat pada kernel

Estimasi waktu 20 menit

Prerequisite 1. Asumsi telah membuat fungsi konvolusi


2. Citra noise sebanyak minimal 5 buah citra

Tugas 1. Hitung bagaimana membentuk kernel Gaussian menggunakan


Persamaan (8)
2. Buat prosedur untuk menu pelembutan citra menggunakan Gaussian
filter
3. Analisis hasil program untuk beberapa jenis gambar yang memiliki
noise
4. Analisis piksel citra berdasarkan aplikasi yang dibuat berdasarkan citra
sebelum dikonvolusi dan yang setelah dikonvolusi!

SOLUSI Contoh pada koordinat (0,0) kernel:


1
𝐺(0,0) = 2∗3.14 ∗ 12 exp⁡(−(02 + 02 )/212 )= 0.1592
Untuk setiap koordinat kernel dapat diperoleh dengan cara yang sama.

39
Kernel Gaussian
Ubah supaya nilai di dalam matriks menjadi bilangan bulat, maka di kali
dengan 1/345
1 5 7 5 1
1 5 20 33 20 5
7 33 55 33 7
345
5 20 33 20 5
[1 5 7 5 1]

@pyqtSlot()
def SmoothClicked(self):
img=cv2.cvtColor(self.image,cv2.COLOR_BGR2GRAY)
#h,w=img.shape[:2]
gauss =(1.0 / 345)* np.array(
[[1, 5, 7, 5, 1],
[5, 20, 33, 20, 5],
[7, 33, 55, 33, 7],
[5, 20, 33, 20, 5],
[1, 5, 7, 5, 1]])

img_out=conv(img,gauss)

plt.imshow(img_out,cmap=’gray’,interpolation=’bicubic’)
plt.xticks([],plt.yticks([]))
plt.show()

Judul PRAKTEK D4- IMAGE SHARPENING

Deskripsi Operasi penajaman citra bertujuan memperjelas tepi pada objek di dalam
citra atau menghilangkan bagian citra yang lembut. Operasi penajaman
dilakukan dengan melewatkan citra pada penapis lolos-tinggi (high-pass
filter).

40
Gambar 23. Kernel low pass filter

Estimasi waktu 25 menit

Prerequisite 1. Asumsi telah membuat fungsi konvolusi


2. Citra noise sebanyak minimal 5 buah citra
3. Tambahkan menu Sharpening image di GUI

Tugas 1. Buat prosedur untuk menjalankan program penajaman citra


2. Analisis hasil citra dengan mencoba kernel-kernel citra pada
Gambar.23
3. Analisis citra jika diberikan kernel filter Laplace berikut:
(1.0 / 16) *[[0, 0, -1, 0, 0],
[0, -1, -2, -1, 0],
[-1, -2, 16, -2, -1],
[0, -1, -2, -1, 0],
[0, 0, -1, 0, 0]])
4. Analisis piksel citra berdasarkan aplikasi yang dibuat berdasarkan citra
sebelum dikonvolusi dan yang setelah dikonvolusi!

SOLUSI @pyqtSlot()
def SharpClicked(self):
img = cv2.cvtColor(self.image, cv2.COLOR_BGR2GRAY)
laplace = (1.0 / 16) * np.array(
[[0, 0, -1, 0, 0],
[0, -1, -2, -1, 0],
[-1, -2, 16, -2, -1],
[0, -1, -2, -1, 0],
[0, 0, -1, 0, 0]])

img_out = conv(img, laplace)

plt.imshow(img_out, cmap='gray', interpolation='bicubic')


plt.xticks([], plt.yticks([]))
plt.show()

Judul PRAKTEK D5- MEDIAN FILTER

41
Deskripsi Median filer berbeda dengan yang sudah dikerjakan pada praktek D1-D4 yan
merupakan filterisasi secara linear, 3 modul praktek berikutnya merupakan
proses filterisasi non linear .

Sebagai contoh, tinjau matriks citra dengan kelompok pixel (berbentuk


kotak diarsir). Pixel yang sedang diproses adalah yang mempunyai
intensitas 35. Langkah yang perlu dilakukan adalah mengurutkan pixel-pixel
tersebut:

9 10 10 10 10 10 11 12 35
Median dari kelompok tersebut adalah 10
Hasil setelah median filter

Gambar 24. Proses median filter (sumber: (Putra, 2010))

Estimasi waktu 15 menit

Prerequisite 1. Asumsi telah membuat fungsi konvolusi


2. Citra noise sebanyak minimal 5 buah citra

Alur Proses 1. Konversi citra ke grayscale dapat menggunakan fungsi


cv2.COLOR_BGR2GRAY
2. img_out= copy image
3. h=ukuran tinggi citra
4. w=ukuran baris citra
5. for i=3 to h-3
for j=3 to w-3
neighbors=[]
for k=-3 to 4

42
for l=-3 to 4
a=image(i+k,j+l)
menambahkan a ke neighbors
end for
end for

mengurutkan neighbors
median=posisi neighbors ke-24
posisikan nilai piksel sebelumnya dengan nilai median
end for
end for
tampilkan citra hasil median

TUGAS 1. Implementasikan pseudo code diatas dengan membuat prosedur


‘Median Filter’
2. Lakukan pengujian dan analisis hasil pengujian terhadap minimal 5
buah citra noise yang berbeda!
3. Analisis piksel citra berdasarkan aplikasi yang dibuat berdasarkan citra
sebelum dan yang setelah difilter Median!

Solusi @pyqtSlot()
def MedianClicked(self):
img = cv2.cvtColor(self.image, cv2.COLOR_BGR2GRAY)
img_out=img.copy()
h,w=img.shape[:2]

for i in np.arange(3,h-3):
for j in np.arange(3,w-3):
neighbors=[]
for k in np.arange(-3,4):
for l in np.arange(-3,4):
a=img.item(i+k, j+l)
neighbors.append(a)
neighbors.sort()
median=neighbors[24]
b=median
img_out.itemset((i,j),b)

plt.imshow(img_out, cmap='gray', interpolation='bicubic')


plt.xticks([], plt.yticks([]))
plt.show()

Judul PRAKTEK D6- MAX FILTERING

43
Deskripsi Maximum filter adalah proses menggantikan nilai piksel dengan nilai piksel
maksimum yang dipengaruhi piksel area tetangga.

Estimasi waktu 20 menit

Prerequisite 1. Citra noise sebanyak minimal 5 buah citra


2. Tambahkan menu ‘Max Filter’ di GUI

Alur Proses 1. Konversi citra ke grayscale dapat menggunakan fungsi


cv2.COLOR_BGR2GRAY
2. img_out= copy image
3. h=ukuran tinggi citra
4. w=ukuran baris citra
5. for i=3 to h-3
for j=3 to w-3
neighbors=[]
for k=-3 to 4
for l=-3 to 4
baca piksel pada (i + k, j + l)
if a < min:
min=a
end for
end for
img_out. itemset((i, j), b)
end for
end for
tampilkan citra hasil max filter
end

Tugas 1. Buat prosedur untuk menjalankan program Maximum Filtering


2. Buatkan prosedur untuk menampilkan citra hasil minimum filtering
3. Analisis citra berdasarkan piksel sebelum dan setelah dilakukan proses
maximum filtering
4. Analisis citra berdasarkan piksel sebelum dan setelah dilakukan proses
minimum filtering

Solusi @pyqtSlot()
def MaxClicked(self):
img = cv2.cvtColor(self.image, cv2.COLOR_BGR2GRAY)
img_out = img.copy()
h, w = img.shape[:2]

44
for i in np.arange(3, h - 3):
for j in np.arange(3, w - 3):
max = 0
for k in np.arange(-3, 4):
for l in np.arange(-3, 4):
a = img.item(i + k, j + l)
if a > max:
max=a
b=max
img_out.itemset((i, j), b)

plt.imshow(img_out, cmap='gray', interpolation='bicubic')


plt.xticks([], plt.yticks([]))
plt.show()

@pyqtSlot()
def MinClicked(self):
img = cv2.cvtColor(self.image, cv2.COLOR_BGR2GRAY)
img_out = img.copy()
h, w = img.shape[:2]

for i in np.arange(3, h - 3):


for j in np.arange(3, w - 3):
min = 255
for k in np.arange(-3, 4):
for l in np.arange(-3, 4):
a = img.item(i + k, j + l)
if a < min:
min=a
b=min
img_out.itemset((i, j), b)

plt.imshow(img_out, cmap='gray', interpolation='bicubic')


plt.xticks([], plt.yticks([]))
plt.show()

45
F. DETEKSI TEPI CITRA

Judul PRAKTEK F1- DETEKSI TEPI

Deskripsi Proses mengekstraksi ciri salah satunya dengan mendeteksi keberadaan


tepi (edge) dari objek di dalam citra. Deteksi tepi memanfaatkan perubahan
nilai intensitas yang drastis pada batas dua area.
Deteksi tepi dibagi menjadi dua ordo yaitu turunan pertama dan turunan
kedua.

Turunan pertama seperti operator Sobel, Prewitt dan Roberts. Turunan


kedua seperti opertaor Laplacian dan Laplacian of Gaussian

Estimasi waktu 45 menit

Prerequisite 1. Asumsi telah membuat fungsi konvolusi


2. Citra grayscale sebanyak minimal 5 buah citra
3. Sudah membuat menu file deteksi tepi dengan sub menu Sobel

Algoritma Dalam prosedur SobelClicked


1. Img=convert RGB to Grayscale
2. Inisialiasi kernel Sobel sumbu X= ([[-1, 0, 1],[-2, 0, 2], [-1, 0, 1]])
3. Inisialiasi kernel Sobel sumbu Y=([[-1, -2, -1],[0, 0, 0],[1, 2, 1]])
4. Konvolusi img terhadap kernel Sobel sumbu x
5. Konvolusi img terhadap kernel Sobel sumbu y
6. Hitung Gradien= sqrt((Gx * Gx) + (Gy * Gy))
7. Normalisasi panjang gradient dalam range 0-255 ((citra
keluaran/nilai maksimum citra keluaran)*255)
8. Menampilkan output image dalam color map’gray’ dan
interpolation=’bicubic’

Tugas 1. Implementasikan algoritma diatas


2. Analisis hasil piksel setelah dilakukan proses deteksi tepi
3. Dengan algoritma yang sama, tambahkan fungsi untuk deteksi tepi
Prewitt dan Robets dengan penggunaan kernel masing-masing
4. Analisis perbedaan hasil dari deteksi tepi menggunakan Sobel,
Prewitt dan Roberts selain dari hasil visualisasi citra juga melalui nilai
piksel

46
Solusi @pyqtSlot()
def SobelClicked(self):
img = cv2.cvtColor(self.image, cv2.COLOR_BGR2GRAY)
Sx = np.array([[-1, 0, 1],
[-2, 0, 2],
[-1, 0, 1]])

Sy = np.array([[-1, -2, -1],


[0, 0, 0],
[1, 2, 1]])
img_x = conv(img,Sx)
img_y = conv(img,Sy)
img_out = np.sqrt(img_x*img_x + img_y*img_y)
img_out = (img_out / np.max(img_out)) * 255

self.image=img

self.displayImage(2)
plt.imshow(img_out, cmap='gray', interpolation='bicubic')
plt.xticks([]), plt.yticks([]) # to hide tick values on X and Y axis
plt.show()

def PrewittClicked(self):
img = cv2.cvtColor(self.image, cv2.COLOR_BGR2GRAY)

Px = np.array([[-1, 0, 1],
[-1, 0, 1],
[-1, 0, 1]])
Py = np.array([[-1, -1, -1],
[0, 0, 0],
[1, 1, 1]])

img_x = conv(img, Px)


img_y = conv(img, Py)

img_out = np.sqrtnp.sqrt((img_x*img_x) + (img_y*img_y))


img_out = (img_out / np.max(img_out)) * 255

47
self.image = img
self.displayImage(2)

plt.imshow(img_out,cmap = 'gray',interpolation='bicubic')
plt.xticks([]), plt.yticks([]) # to hide tick values on X and Y axis
plt.show()

48
EDGE DETECTION

Judul PRAKTEK F2- CANNY EDGE DETECTION

Deskripsi The Canny edge detection algorithm is composed of 4 steps:


1. Noise reduction;
2. Gradient calculation;
3. Non-maximum suppression;
4. Edge Tracking by Hysteresis threshold

Estimasi waktu 30 menit

Prerequisite 1. Asumsi telah membuat fungsi konvolusi


2. Citra grayscale sebanyak minimal 5 buah citra
3. Sudah membuat menu file deteksi tepi dengan sub menu Canny

Algoritma Langkah 1: Reduksi Noise


Reduksi noise menggunakan operator Gaussian, dapat menggunakan
kernel 3x3,5x5, 7x7... dst. Semakin kecil kernel maka efek blur semakin tidak
terlihat. Pada percobaan ini menggunakan kernel Gaussian 5x5 dengan
=1.4.
gauss = (1.0 / 57) * np.array(
[[0, 1, 2, 1, 0],
[1, 3, 5, 3, 1],
[2, 5, 9, 5, 2],
[1, 3, 5, 3, 1],
[0, 1, 2, 1, 0]])
Gunakan fungsi konvolusi pada praktek F1

Langkah 2: Finding Gradien


digunakan untuk mendeteksi tepi menggunakna turunan pertama. Pada
percobaan ini menggunakan operator Sobel (lihat praktek F1)
kemudian cari arah tepi
theta = np.arctan2(konvolusi_y, konvolusi_x)
Langkah 3 Non-Maximum suppression:
tujuannya untuk menemukan piksel dengan nilai maksimum pada arah tepi.
Hasil dari arah tepi di finding gradien dibagi menjadi 4 kategori arah:
 Derajat 0 - 22,5 dan 157,5 - 180 → 00 berwarna biru

49
 Derajat 22,5 - 67,5 → 450 berwarna kuning
 Derajat 67,5 - 112,5 → 900 berwarna merah
 Derajat 112,5 - 157,5 → 1350 berwarna hijau
Jika gradient (i,j) ≤ dari gradient (i-1,j+1) atau gradient (i,j) ≤ dari gradient
(i+1,j-1) maka gradient (I,j) sama dengan 0, akan tetapi bila gradient (i,j) 
dari gradient (i-1,j+1) atau gradient (i,j)  dari gradient (i+1,j-1) maka gradient
(I,j) sama dengan tepi asli

Untuk proses ini dapat menyalin fungsi berikut ini:


angle = theta * 180. / np.pi
angle[angle < 0] += 180

for i in range(1, H - 1):


for j in range(1, W - 1):
try:
q = 255
r = 255

# angle 0
if (0 <= angle[i, j] < 22.5) or (157.5 <= angle[i,
j] <= 180):
q = img_out[i, j + 1]
r = img_out[i, j - 1]
# angle 45
elif (22.5 <= angle[i, j] < 67.5):
q = img_out[i + 1, j - 1]
r = img_out[i - 1, j + 1]
# angle 90
elif (67.5 <= angle[i, j] < 112.5):
q = img_out[i + 1, j]
r = img_out[i - 1, j]
# angle 135
elif (112.5 <= angle[i, j] < 157.5):
q = img_out[i - 1, j - 1]
r = img_out[i + 1, j + 1]

if (img_out[i, j] >= q) and (img_out[i, j] >= r):


Z[i, j] = img_out[i, j]
else:
Z[i, j] = 0

except IndexError as e:
pass

img_N = Z.astype("uint8")

Langkah 4: Hysterisis Thresholding


Menentukan nilai ambang bawah dan ambang atas.
 Jika tepian dengan nilai piksel antara threshold atas dengan
threshold bawah akan ditandai sebagai tepian yang lemah.

50
 Tepian yang kuat diintepretasikan sebagai " tepian yang pasti " dan
dapat segera dimasukkan sebagai tepian pada gambar akhir.
 Tepi lemah termasuk jika dan hanya jika terhubung ke tepi yang
kuat, dengan logika bahwa noise dan variasi warna tidak mungkin
untuk menghasilkan tepi yang kuat (dengan penyesuaian yang tepat
dari thresholding).

Untuk proses ini dapat menyalin fungsi berikut ini:


weak = 100
strong = 150
for i in np.arange(H):
for j in np.arange(W):
a = img_N.item(i, j)
if (a > weak) : #weak
b = weak
if (a > strong): #strong
b = 255
else:
b = 0

img_N.itemset((i, j), b)

img_H1 = img_N.astype("uint8")
cv2.imshow("hysteresis part 1", img_H1)

#hysteresis Thresholding eliminasi titik tepi lemah jika tidak


terhubung dengan tetangga tepi kuat

strong = 255
for i in range(1, H-1):
for j in range(1, W-1):
if (img_H1[i,j] == weak):
try:
if ((img_H1[i+1, j-1] == strong) or
(img_H1[i+1, j] == strong) or
(img_H1[i+1, j+1] == strong) or
(img_H1[i, j-1] == strong) or (img_H1[i, j+1] == strong) or
(img_H1[i-1, j-1] == strong) or
(img_H1[i-1, j] == strong) or (img_H1[i-1, j+1] == strong)):
img_H1[i, j] = strong
else:
img_H1[i, j] = 0
except IndexError as e:
pass

img_H2 = img_H1.astype("uint8")

Tugas 1. Implementasikan algoritma diatas


2. Tampilkan gambar hasil setiap langkah
3. Ganti nilai thhreshold bawah dan atas, analisis hasil perubahan piksel
dan visual

51
G. MORFOLOGI CITRA

Judul PRAKTEK G1- MORFOLOGI CITRA

Deskripsi Transformasi morfologi merupakan operasi sederhana berdasarkan bentuk


citra. Dalam proses morfologi membutuhkan citra asli dan structuring
element/kernel

Estimasi waktu 20 menit

Prerequisite 1. Sudah membuat menu file Morfologi dengan sub menu Dilasi, Erosi,
Opening dan Closing
2. Siapkan beberapa citra hitam putih berupa karakter (huruf atau
angka), seperti contoh dibawah ini

Algoritma 1. Convert imagegrayscale menjadi citra biner dengan menggunakan


fungsi cv2.threshold (img, 127, 255, 0)
2. Inisialiasi Strel dengan menggunakan cv2.MORPH_CROSS, (5, 5)
3. Untuk fungsi erosi gunakan fungsi cv2.erode
4. Untuk fungsi dilasi gunakan fungsi cv2.dilate
5. Untuk fungsi opening gunakan fungsi cv2.morphologyEx
(cv2.MORPH_OPEN)
6. Untuk fungsi closing gunakan fungsi cv2.morphologyEx
(cv2.MORPH_CLOSE)

Tugas 1. Implementasikan algoritma diatas


2. Jelaskan mengenai cv2.MORPH_CROSS, (5, 5)
3. Analisis hasil citra dari piksel dan secara visualiasi
4. Analisis citra dari piksel dan secara visualiasi jika diberikan Strel
cv2.MORPH_RECT,(5,5) dan cv2.MORPH_ELLIPSE,(5,5)
5. Buatkan program morfologi dengan teknik skeletonizing

52
H. SEGMENTASI CITRA

Judul PRAKTEK H1- GLOBAL THRESHOLDING

Deskripsi Thresholding merupakan proses mengubah citra grayscale menjadi citra


biner berdasarkan nilai ambang T. Dalam fungsi cv.threshold memiliki 5
type yaitu :

Estimasi waktu 20 menit

Prerequisite 1. Sudah membuat menu file Local Thresholding dengan sub menu
Binary, Binary Invers, Trunc, To Zero, To Zero Invers

Algoritma 1. Convert citra RGB ke citra grayscale


2. inisialiasi nilai ambang dan nilai maksimum derajat keabuan
3. gunakan fungsi cv.threshold (image, nilai ambang, nilai maksimum
derajat keabuan, tipe threshold)
4. tampilkan image

keterangan:
untuk fungsi thresholding binary dapat menggunakan fungsi ini:
cv2.THRESH_BINARY
untuk fungsi thresholding inversi biner dapat menggunakan fungsi ini:
cv2.THRESH_BINARY_INV
untuk fungsi thresholding trunc dapat menggunakan fungsi ini:
cv2.THRESH_TRUNC

53
untuk fungsi thresholding to Zero dapat menggunakan fungsi ini:
cv2.THRESH_TOZERO
untuk fungsi thresholding inversi to Zero dapat menggunakan fungsi ini:
cv2.THRESH_TOZERO_INV

Tugas 1. Jika diketahui sebuah citra dengan derajat keabuan 8 level atau 3 bit
sebagai berikut, jika diberikan nilai ambang T=4 maka tentukan hasil
matriks citra setelah dithresholding menggunakan lima type dari
fungsi threshold di atas

3 0 1 5

7 6 0 4

2 7 0 6

1 3 5 5
2. Buatlah program untuk dapat men-thresholding citra menggunakan 5
tipe threshold
3. Analisis perbedaan hasil pengujian citra dengan penerapan kelima type
global threshold secara matriks dan visualiasi citra

54

Anda mungkin juga menyukai