Upload
phamtruc
View
412
Download
58
Embed Size (px)
Citation preview
i
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
ii
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
1
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
2
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
3
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.
4
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
5
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)
6
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)
7
Gambar 13. Load all library
8
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
9
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()
10
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
11
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)
12
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
13
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)
14
Listing Program
Keseluruhan
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
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_())
15
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))
16
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
G=20
B=45
R=140
G=65
B=100
R=200
G=100
B=25
R=50
G=150
B=200
R=20
G=150
B=100
R=56
G=88
B=123
R=26
G=187
B=99
R=84
G=214
B=69
R=80
G=65
B=254
R=58
G=85
B=250
R=78
G=89
B=215
R=95
G=78
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
17
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
Keseluruhan
import sys
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
18
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
19
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):
20
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 Program
Keseluruhan
class ImageProc(QMainWindow):
def __init__(self):
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
21
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 waktu
25 menit
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
Program
Proses sama dengan pengaturan cahaya hanya nilai kontras dapat diatur sebagai beriku:
#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
22
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
waktu
20 menit
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)
23
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)
24
Judul PRAKTEK A7- NEGATIVE IMAGE
Deskripsi Untuk citra negatif dapat diperoleh dengan Persamaan (7) f(x, y)’ = 255 – f(x, y) (7)
Estimasi
waktu
20 menit
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
25
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
waktu
10 menit
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)
26
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
waktu
10 menit
Prerequisite Asumsi praktek sebelumnya harus sudah dikerjakan
1. Tambahkan pada halaman GUI menu Histogram Grayscale
2. Beri object name adalah actionGray_Histogram
Listing
Program
Pada praktek ini menggunakan library matplotlib sehingga:
#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
27
Listing
program
Keseluruha
n
@pyqtSlot()
def GrayHistogramClicked(self):
img = cv2.cvtColor(self.image, cv2.COLOR_BGR2GRAY)
self.image = img
self.displayImage(2)
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
waktu
10 menit
Prerequisite Asumsi praktek sebelumnya harus sudah dikerjakan
1. Tambahkan pada halaman GUI menu Histogram RGB
2. Beri object name adalah actionRGB_Histogram
Listing
Program
#deklarasikan menu Histogram
#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
waktu
15 menit
28
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
program
@pyqtSlot()
def EqualHistogramClicked(self):
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
29
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
30
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)
31
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)
32
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 citracitra[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]
33
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)
34
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)
35
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
36
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
37
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:
a) [1 1 11 1 11 1 1
]
b) [6 0 −66 1 −66 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)
38
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]])
39
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
2𝜋𝜎2 exp(−(𝑥2 + 𝑦2)/2𝜎2 (8)
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:
𝐺(0,0) = 1
2∗3.14 ∗ 12 exp(−(02 + 02)/212)= 0.1592
Untuk setiap koordinat kernel dapat diperoleh dengan cara yang sama.
40
Kernel Gaussian
Ubah supaya nilai di dalam matriks menjadi bilangan bulat, maka di kali dengan 1/345
1
345
[ 1 5 7 5 15 20 33 20 57 33 55 33 75 20 33 20 51 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).
41
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
42
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
43
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
44
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]
45
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()
46
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
47
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
48
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()
49
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
50
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.
51
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
52
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
53
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
54
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