57

PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

Embed Size (px)

Citation preview

Page 1: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN
Page 2: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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

Page 3: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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

Page 4: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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

Page 5: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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

Page 6: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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.

Page 7: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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

Page 8: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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)

Page 9: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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)

Page 10: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

7

Gambar 13. Load all library

Page 11: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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

Page 12: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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

Page 13: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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

Page 14: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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)

Page 15: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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

Page 16: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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)

Page 17: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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_())

Page 18: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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

Page 19: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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

Page 20: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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

Page 21: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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

Page 22: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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

Page 23: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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

Page 24: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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

Page 25: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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)

Page 26: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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)

Page 27: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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

Page 28: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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)

Page 29: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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

Page 30: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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

Page 31: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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

Page 32: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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

Page 33: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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)

Page 34: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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)

Page 35: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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]

Page 36: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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)

Page 37: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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)

Page 38: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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

Page 39: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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

Page 40: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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)

Page 41: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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

Page 42: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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.

Page 43: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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

Page 44: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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

Page 45: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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

Page 46: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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

Page 47: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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]

Page 48: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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

Page 49: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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

Page 50: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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

Page 51: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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

Page 52: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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

Page 53: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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.

Page 54: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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

Page 55: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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

Page 56: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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

Page 57: PENGANTAR - if-lab.itenas.ac.idif-lab.itenas.ac.id/iflab/wp-content/uploads/2019/02/PCD_v2_2019_II... · Laboratorium dengan mengikuti silabus/RPS ... Judul PRAKTEK A1- MENAMPILKAN

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