Anda di halaman 1dari 37

Machine Vision, Prinsip dan Penerapan MTI BINUS University - Widodo Budiharto

2015

Bab 1
Pengantar Machine Vision

Tujuan Instruksional Umum :

1. Mahasiswa mampu menjelaskan peranan dan konsep pemrograman Computer Vision


dan Machine Vision

Tujuan Instruksional Khusus :

1. Mahasiswa mampu menjelaskan fungsi dari Computer Vision dan Machine Vision
2. Mahasiswa dapat menyebutkan beberapa penerapan dari Machine Viion
3. Menjelaskan fungsi dari program OpenCV
4. Mahasiswa dapat menjelaskan penelitian di bidang Computer Vision
5. Mahasiswa dapat menginstal program OpenCV dan membuat program loading image.

1.1 Mengenal Machine Vision

Kecerdasan Buatan / Artificial Intelligence (AI) merupakan bidang ilmu komputer


yang sangat penting di era kini dan masa akan datang untuk mewujudkan sistem komputer
yang cerdas. Bidang ini telah berkembang sangat pesat di 20 tahun terakhir seiring dengan
kebutuhan perangkat cerdas pada industri dan rumah tangga. Salah satu bidang di AI yang
mengakuisisi, mengolah, memahami dan untuk mengambil informasi/keputusan dikenal
sebagai Computer Vision. Oleh karena itu, buku ini memaparkan berbagai pandangan
modern dan hasil riset terkini di bidang Computer Vision yang perlu dikuasai oleh para
akademisi, mahasiswa, pelajar dan bahkan praktisi.
Okasha pada buku Philosophy of Science: A Very Short Introduction, menyatakan
bahwa Manusia sebagai mahluk Tuhan paling sempurna memiliki keingintahuan yang
tinggi serta daya rekayasa yang luar biasa, yang berujung pada munculnya pengetahuan dan

1
Machine Vision, Prinsip dan Penerapan MTI BINUS University - Widodo Budiharto
2015

disiplin ilmu. Pada jaman Nabi Muhammad dan para pengikut sesudah jamannyapun,
sudah ada para pemikir yang mengembangkan ilmu pengetahuan dengan sangat dahsyat,
sehingga Arab pernah menjadi pusat ilmu pengetahuan dunia di Abad pertengahan.
Disiplin-disiplin yang saat ini dipelajari manusia saat ini terbagi menjadi 3 kelompok yaitu
ilmu Sains (bersumber dari bahasa latin scientia yang berarti memiliki pengetahuan atau
mengetahui), Ilmu Kesusastraan dan Seni serta kelompok ketiga seperti Metafisika, Filsafat
dan Agama. Ketiga disiplin ilmu tersebut berkembang pesat seiring dengan aktifitas
penelitian dan pengungkapan gagasan dan ide baik melalui buku, jurnal maupun media.

Kata “intelligence” berasal dari bahasa Latin “intelligo” yang berarti “saya paham”.
Berarti dasar dari intelligence ialah kemampuan untuk memahami dan melakukan aksi.
Sebenarnya, area Kecerdasan Buatan (Artificial Intelligence) atau disingkat dengan AI,
bermula dari kemunculan komputer sekitar tahun 1940-an, meskipun sejarah
perkembangannya dapat dilacak sejak zaman Mesir kuno. Pada masa ini, perhatian
difokuskan pada kemampuan komputer dalam mengerjakan sesuatu yang dapat dilakukan
oleh manusia. Dalam hal ini, komputer tersebut dapat meniru kemampuan kecerdasan dan
perilaku manusia. Salah satu cabang dari Kecerdasan buatan ialah Computer Vision.
Menurut Forsyth dan Ponece, Computer Vision adalah:

Extracting descriptions of the world from pictures or sequences of pictures

Sedangkan Machine vision:

Machine vision (MV) is the technology and methods used to provide imaging-based
automatic inspection and analysis for such applications as automatic inspection, process
control, and robot guidance in industry.

Machine vision merupakan teknologi untuk inspeksi otomatis berbasiskan image, misalnya
pada:

 Pengontrolan proses industri


 Pendeteksi nomor plat kendaraan
 Wood quality inspection

2
Machine Vision, Prinsip dan Penerapan MTI BINUS University - Widodo Budiharto
2015

 Final inspection of sub-assemblies


 Engine part inspection
 Label inspection on products
 Checking medical devices for defects
 3D model building (photogrammetry)
 Robot Vision
 Surveillance (monitor penyusup, analisa trafik jalan tol dan lainnya)
 Interaksi manusia dan robot (Human Robot Interaction)

Gambar di bawah menampilkan relasi antara computer vision dengan bidang riset lainnya :

Gambar 1.1 Hubungan Computer vision dengan bidang lainnya

Pada penerapannya, computer vision menerapkan digital image processing untuk


menerapkan algoritma komputer untuk pemrosesan image pada image digital. Menurut
Forsyth dan Ponce, Computer Vision adalah mengekstrak deskripsi dunia dari gambar atau
urutan gambar. Computer vision secara umum merupakan area yang menyertakan metode
metode untuk mengambil, pemroses menganalisa dan memahami image untuk
menghasilkan informasi numeric atau simbolik. Image processing merupakan proses
mengubah image 2D menggunakna metode Edge detection, fourirer transform atau

3
Machine Vision, Prinsip dan Penerapan MTI BINUS University - Widodo Budiharto
2015

enhancement untuk memperoleh output image 2D yang diinginkan (misalnya smoothing


gambar).

Gambar 1.2 Proses Image processing

Setelah image diperoleh lalu diproses, Metode Machine Vision antara lain:

 Stitching/Registration: Combining of adjacent 2D or 3D images.


 Filtering (e.g. morphological filtering)
 Thresholding: Thresholding starts with setting or determining a gray value that will be
useful for the following steps. The value is then used to separate portions of the image,
and sometimes to transform each portion of the image simply black and white based on
whether it is below or above that grayscale value.
 Pixel counting: counts the number of light or dark pixels
 Segmentation: Partitioning a digital image into multiple segments to simplify and/or
change the representation of an image into something that is more meaningful and easier
to analyze
 Inpainting
 Edge detection: finding object edges
 Color Analysis: Identify parts, products and items using color, assess quality from color,
and isolate features using color.
 Blob discovery & manipulation: inspecting an image for discrete blobs of connected
pixels (e.g. a black hole in a grey object) as image landmarks. These blobs frequently
represent optical targets for machining, robotic capture, or manufacturing failure.
 Pattern recognition including template matching. Finding, matching, and/or
counting specific patterns. This may include location of an object that may be rotated,
partially hidden by another object, or varying in size.
 Barcode, Data Matrix and "2D barcode" reading

Output yang umum dari Machine Vision ialah keputusan pass/fail. Penerapan terkini
misalnya pada system industry HP dan Robot Vision, dimana robot dapat melihat

4
Machine Vision, Prinsip dan Penerapan MTI BINUS University - Widodo Budiharto
2015

menggunakan kamera dan unit pendukung berupa sensor dan controller berkecepatan
tinggi.

Statistical process control has been around for many years and the benefits for adopting
these methodologies are well documented throughout quality circles. Statistical process
control does not require 100% inspection and for most industries process variation can be
reduced if not completely eliminated when the appropriate sampling plans and inspection
procedures are put into place.

Gambar 1.3 Proses Machine Vision pada Pabrik

1.2 Robot Vision

Robot vision menerapkan Machine Vision. Ada beberapa istilah penting di dalam robot
vision yang saling berhubungan, diantaranya computer vision, machine vision dan robot
vision. Computer vision merupakan teknologi paling penting di masa yang akan datang
dalam pengembangan robot yang interaktif. Computer Vision merupakan bidang
pengetahuan yang berfokus pada bidang sistem kecerdasan buatan dan berhubungan
dengan akuisisi dan pemrosesan image. Machine vision merupakan proses menerpakan
teknologi untuk inspeksi automatis berbasis image, kontrol proses dan pemanduan robot
pada berbagai aplikasi industri dan rumah tangga. Robot vision merupakan pengetahuan

5
Machine Vision, Prinsip dan Penerapan MTI BINUS University - Widodo Budiharto
2015

mengenai penerapan computer vision pada robot. Robot membutuhkan informasi vision
untuk memutuskan aksi apa yang akan dilakukan.

Penerapan saat ini vision pada robot antara lain sebagai alat bantu navigasi robot, mencari
obyek yang diinginkan, inspeksi lingkungan dan lainnya. Vision pada robot menjadi
sangat penting karena informasi yang diterima lebih detail dibanding hanya sensor jarak
atau sensor lainnya. Misalnya dengan vision, robot dapat mengenal apakah obyek yang
terdeteksi merupakan wajah orang atau bukan. Lebih jauh lagi, sistem vision yang canggih
pada robot membuat robot dapat membedakan wajah A dengan wajah B secara akurat
(Face recognition system menggunakan metode PCA, LDA dan lainnya). Proses
pengolahan dari input image dari kamera hingga memiliki arti bagi robot dikenal sebagai
visual perception, dimulai dari akuisisi image, image preprocessing untuk memperoleh
image yang diinginkan dan bebas noise misalnya, ekstrasi fitur hingga interpretasi..
Misalnya saja untuk identifikasi pelanggan dan penghindaran multiple moving obstacles
berbasis vision, atau untuk menggerakan servo sebagai aktuator untuk mengarahkan
kamera agar tetap mengarah ke wajah seseraong (face tracking).

1.3 Program OpenCV

OpenCV ialah program open source berbasiskan C++ yang saat ini banyak
digunakan sebagai program computer vision, salah satu penerapannya ialah pada robotika.

6
Machine Vision, Prinsip dan Penerapan MTI BINUS University - Widodo Budiharto
2015

Dengan OpenCV, Anda dapat membuat interaksi antara manusia dan robot (Human Robot
Interaction. Misalnya, wajah dari manusia dideteksioleh camera/webcam, lalu diproses
oleh komputer, untuk kemudian diproses oleh robot untuk melakukan aksi tertentu,
misalnya mengikuti/mengenal wajah orang tersebut. Kesemuanya itu membutuhkan
OpenCV sebagai program utama antara webcam dan pengolahnya yaitu komputer.
Silahkan kunjungi situs opencv.org untuk download atau mengetahui berita terbaru tentang
software ini. Program OpenCV 2.4.11 merupakan edisi terbaru yang harus Anda gunakan,
program ini penting untuk dapat melakukan tugas 3D pada Machine Vision

Gambar 1.4 Beberapa task 3D [1]

1.3.1 Pemrograman Dasar OpenCV

Anda membutuhkan editor dan kompiler Visual C++ 2012/ Visual Studio 2012
Express Edition untuk mengedit dan kompilasi program OpenCV. Anda terlebih dahulu
harus mengkonfigurasi Visual C++ .Net tersebut dimana file library dan sourcenya harus
disertakan. Beberapa file library juga harus ditambahkan pada input linker di Visual C++.

1. Jalankan program dan install pada suatu direktori, misalnya f:/OpenCV248 atau
f:/OpenCV248 jika menggunakan versi OpenCV 2.4.9.

7
Machine Vision, Prinsip dan Penerapan MTI BINUS University - Widodo Budiharto
2015

Gambar 1.5 Proses instalasi pada satu direktori

2. Tambahkan path ke Path Variable:

f:\OpenCV246\opencv\build\x86\vc10\bin
f:\OpenCV246\opencv\build\common\tbb\ia32\vc10

3. Lalu, buat proyek baru untuk OpenCV menggunakan Visual C++ 2012, dengan memilih
create a new Win32 console Application. Klik kanan Project dan pilh properties

Gambar 1.6 Memilih properties

Pada bagian kiri, pilih C/C++ lalu edit Additional Include Directories dengan
menambahkan :

f:\OpenCV246\opencv\build\include\opencv

f:\OpenCV246\opencv\build\include

4. PIlih linker dan tambahkan direktori ke Additional Library Directories:

8
Machine Vision, Prinsip dan Penerapan MTI BINUS University - Widodo Budiharto
2015

f:\OpenCV246\opencv\build\x86\vc10\lib

Gambar 1.7 Menambahkan Additional library Directories

5. Buka Linker dan pilih input, tambahkan Additional Dependencies berikut:

opencv_core246d.lib
opencv_imgproc246d.lib
opencv_highgui246d.lib
opencv_ml246d.lib
opencv_video246d.lib
opencv_features2d246d.lib
opencv_calib3d246d.lib
opencv_objdetect246d.lib
opencv_contrib246d.lib
opencv_legacy246d.lib
opencv_flann246d.lib

9
Machine Vision, Prinsip dan Penerapan MTI BINUS University - Widodo Budiharto
2015

Gambar 1.8 Menambahkan dependencies

Jika sudah selesai, sebagai contoh buatlah program Win32 console application untuk
menampilkan sebuah gambar di Windows, berikut contohnya:

Displayimage.cpp:
// Menampilkan Image menggunakan cvLoadImage
//Dibuat oleh Widodo Budiharto
#include "stdafx.h"
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
int _tmain(int argc, _TCHAR* argv[]){ // meload image
IplImage *img = cvLoadImage("f:\handsome.jpg");
cvNamedWindow("OpenCV",1);
cvShowImage("OpenCV",img);
//tunggu sembarang input dari user untuk exit
cvWaitKey(0);
cvDestroyWindow("OpenCV ");
cvReleaseImage(&img);
return 0;
}

10
Machine Vision, Prinsip dan Penerapan MTI BINUS University - Widodo Budiharto
2015

Pada program di atas, dibutuhkan library seperti cv.h, sxcore.h dan highgui.h agar fungsi dikenal
oleh compiler. Hasil dari program di atas ialah :

Gambar 1.9 Hasil program menampilkan image

Jika Anda menginginkan pemrograman dengan style 2.x C++, berikut contohnya
menggunakan cv::Mat. Cv::Mat muncul di OpenCV versi terkini yang secara mendasar ialah
sebuah class dengan 2 bagian data, yaitu header matrik (berisi informasi ukuran matrik, metode
yang digunakan untuk menyimpan) dan sebuah pointer ke matrik berisi nilai pixel, berikut
contohnya:

cv::Mat A, C; // membuat bagian header


A = imread(argv[1], CV_LOAD_IMAGE_COLOR); // alokasi matrik
cv::Mat B(A); // menggunakan kopi constructor
C = A; // operator assignment

Pada program di atas, kita meload image menggunakan fungsi imread(). Berikut contoh
program untuk loading image berbasis C++:

DisplayImage2.cpp:

#include "stdafx.h" // Program demo C++ untuk display image.

11
Machine Vision, Prinsip dan Penerapan MTI BINUS University - Widodo Budiharto
2015

#include <stdlib.h>
#include <cv.hpp>
#include <cxcore.hpp>
#include <highgui.h>
int _tmain(int argc, _TCHAR* argv[]){
cv::Mat img = cv::imread("f:\handsome.jpg");
cv::imshow("OpenCV",img);
//tunggu sembarang input dari user untuk exit
cv::waitKey();
return EXIT_SUCCESS;
}

1.4 Digital Image Processing


Sebuah image ialah sebuah array, atau matrik dari piksel persegi yang disusun
dalam format kolom dan baris. Pada image greyscale (8bit), tiap elemen gambar memiliki
intesitas antara 0-255, sedangkan image true color terdiri dari 24 bit( 8x8x8 =16 juta
warna) seperti gambar di bawah :

(a) (b)

Gambar 1.10 Image greyscale 8 bit (a), dan image true color yang tersusun dari 3 greyscale
image berwarna merah, hijau dan biru yang dapat berisi hingga 16 juta warna berbeda (b).

Image standar dikenal sebagai image RGB (terdiri dari komponen Merah, Hijau dan biru)
dan memiliki sistem warna 24 bit yang masing masing terdiri dari 8 bit. Representasi
warna bertipe integer bervariasi dari 0-255, sedangkan untuk tipe float berkisar antara 0-1.

12
Machine Vision, Prinsip dan Penerapan MTI BINUS University - Widodo Budiharto
2015

Nilai warna tersebut disimpan pada matrik 3 dimensi yang dilambangkan dalam Intensitas I
(X,Y, channel). Nilai warna RGB dapat dinormalisasi menggunakan persamaan :

� � �
� � = � � = � � = (1.1)
�+�+� �+�+� �+�+�

Sedangkan proses grascale menggunakan persamaan


�+�+�
���� = (1.2)

Kadang citra yang kita miliki perlu kita olah untuk tujuan tertentu yang dikenal dengan
istilah Pengolahan Citra, misalnya proses penjumlahan nilai RGB pada images. Awal mula
pemrosesan image digital dimulai pada sekitar tahun 1960an pada Jet Propulsion
Laboratory, Massachusetts Institute of Technology, Bell Laboratories, University of
Maryland, untuk aplikasi satelit, medical imaging dan character recognition.

Pemrosesan image digital memungkinkan penggunaan algoritma komplek untuk


pemrosesan image sehingga menghasilkan performa sistem yang robust dan berbiaya
murah. Klasifikasi merupakan metode yang sangat penting dalam image processing.
Pemrosesan image digital umumnya digunakan pada proses :

 Classification
 Feature extraction
 Pattern recognition
 Multi-scale signal analysis

Beberapa teknik yang digunakan pada pemrosesan image digital antara lain :

 Pixelization
 Linear filtering
 Erosi dan dilasi
 Principal components analysis
 Independent component analysis
 Hidden Markov models
 Anisotropic diffusion
 Partial differential equations

13
Machine Vision, Prinsip dan Penerapan MTI BINUS University - Widodo Budiharto
2015

Pada pengolahan citra dasar, biasanya edge detection, threshold dan countour sangat
dibutuhkan, berikut contohnya :

Countour.cpp:

//Program membuat countour dan variasi threshold


#include <cv.h>
#include <highgui.h>
IplImage* image = 0; int thresh = 100;
void on_trackbar(int) {
IplImage* gray = cvCreateImage( cvGetSize(image), 8, 1 );
CvMemStorage* storage = cvCreateMemStorage(0);
CvSeq* contours = 0;
cvCvtColor( image, gray, CV_BGR2GRAY );
cvThreshold( gray, gray, thresh, 255, CV_THRESH_BINARY );
cvFindContours( gray, storage, &contours );
cvZero( gray );
if( contours )
cvDrawContours( gray, contours, cvScalarAll(255),
cvScalarAll(255), 100 );
cvShowImage( "Contours", gray );cvReleaseImage( &gray );
cvReleaseMemStorage( &storage );
}
int main( int argc, char** argv ) {
IplImage* image;
if( argc != 2 || !(image = cvLoadImage(argv[1])) )
return -1;
cvNamedWindow( "Contours", 1 );
cvCreateTrackbar( "Threshold", "Contours",
&thresh, 255, on_trackbar );
on_trackbar(0);
cvWaitKey();
return 0;

14
Machine Vision, Prinsip dan Penerapan MTI BINUS University - Widodo Budiharto
2015

Gambar 1.11 Program countour pada Lena.jpg

Pada pengolahan citra, untuk mengambil sebagian daerah penting dari suatu image, biasa dikenal
sebagai ROI (region of interest), dapat digunakan fungsi berikut :

cvSetImageROI(src, cvRect(x,y,width,height));

Berikut ini contoh program ROI:

ROI.cpp:

#include "stdafx.h"
#include <cv.h>
#include <highgui.h>

int main(int argc, char** argv) {

IplImage* src;
cvNamedWindow("Contoh awal", CV_WINDOW_AUTOSIZE);
cvNamedWindow("Contoh akhir", CV_WINDOW_AUTOSIZE);
if( argc == 7 && ((src=cvLoadImage(argv[1],1)) != 0 ))
{
int x = atoi(argv[2]);
int y = atoi(argv[3]);

15
Machine Vision, Prinsip dan Penerapan MTI BINUS University - Widodo Budiharto
2015

int width = atoi(argv[4]);


int height = atoi(argv[5]);
int add = atoi(argv[6]);
cvShowImage( "Contoh awal", src);
cvSetImageROI(src, cvRect(x,y,width,height));
cvAddS(src, cvScalar(add),src);
cvResetImageROI(src);
cvShowImage( "Contoh akhir",src);
cvWaitKey();
}
cvReleaseImage( &src );
cvDestroyWindow("Contoh awal");
cvDestroyWindow("Contoh akhir");
return 0;
}

Gambar 1.12 Area ROI pada image

1.5 Penelitian di Bidang Machine dan Computer Vision


Penelitian di bidang Machine dan Computer Vision biasanya dimulai dengan adanya masalah
yang ada dan teridentifiaksi di sekitar kita atau di bidang kerja kita, diikuti dengan tujuan yang
ingin dicapai dari penyelesaian masalah tersebut. Pertanyaan penelitian kemudian dapat diajukan
untuk memfokuskan permasalahan yang ada. Dengan didukung literatur yang diperoleh

16
Machine Vision, Prinsip dan Penerapan MTI BINUS University - Widodo Budiharto
2015

sebelumnya, kita dapat mengonstruksikan hipotesis. Hipotesis atau hipotesa adalah jawaban
sementara terhadap masalah yang masih bersifat praduga karena masih harus dibuktikan
kebenarannya. Desain dan metode penelitian pada bidang computer vision harus dipilih yang
sesuai agar dapat dilaksanakan dengan optimal, misalnya menggunakan metode penelitian
kuantitatif karena jumlah sampel yang banyak dan menggunakan pengamatan/observasi dan survei.

Identifikasi masalah dan tujuan

Mengajukan sebuah pertanyaan penelitian

Mereview literatur sebelumnya

Mengonstruksikan hipotesis

Memilih desain dan metode penelitian

Menguji hipotesis

Membuat kesimpulan

Gambar 1.13 Langkah-langkah dalam penelitian

Hasil hipotesis dapat digunakan untuk mengambil kesimpulan dari penelitian yang telah
dilaksanakan. Kesimpulan yang diambil menyimpulkan apakah hasil penelitian yang dilakukan
dapat membuktikan hipotesis yang ada. Ketika informasi yang dikumpulkan melalui tes, peneliti
mencoba untuk memastikan bahwa tes tersebut :

 Valid: apakah instrumen pengukurannya mampu mengukur apa yang seharusnya diukur sesuai
dengan tujuan penelitan.
 Reliable: Menyediakan hasil yang konsisten bila diberikan pada kesempatan yang berbeda.

Latihan :
1. Jelaskan definisi dari Machine Vision

17
Machine Vision, Prinsip dan Penerapan MTI BINUS University - Widodo Budiharto
2015

2. Berikan penjelasan mengenai system inspeksi industry seperti pengukuran dimensi

Gambar 1.14 Inspeksi industri


3. Jelaskan peranan Computer Vision dan Machine Vision pada bidang Industri dan pendidikan
4. Buatah program untuk menampilkan image dan jelaskan tiap fungsi dari kode yang digunakan.
5. Jelaskan beberapa metode di Machine Vision
6. Sebutkan beberapa topic penelitian menarik di bidang Machine Vsiion Vision

Referensi:

1. Milan Sonka et al(2015), Image Processing, Analysis, and Machine Vision, 4th edition, Cengage
Learning, USA.

2. Forsyth, D., Ponce, J. (2012). Computer Vision: A Modern Approach. 2nd ed. Prentice Hall. ISBN:
978-0-27-376414-4
3. Opencv.org

4. Walliman, N. (2011) Research Methods: The Basics. London: Roudlege

5. Okasha, S. (2002) Philosophy of Science: A Very Short Introduction. Oxford: Oxford University
Press.

6. Stuart Russel and Peter Norvig, (2011), Artificial Intelligence, A Modern Approach, Pearson
Publisher.

7. Widodo Budiharto (2015), Robot Modern, Andi Offset Publisher- Yogyakarta.

18
Machine Vision, Prinsip dan Penerapan MTI BINUS University - Widodo Budiharto
2015

Bab 7
Feature Detection 2

Tujuan Instruksional Umum :

1. Mahasiswa mampu menjelaskan peranan dan konsep Segmentation, thresholding dan


boundary serta descriptor.

Tujuan Instruksional Khusus :

1. Mahasiswa mampu menjelaskan fungsi thresholding dan segmentation


2. Mahasiswa dapat menjelaskan megnenai fourier descriptor dan region descriptor
3. Mahasiswa dapat membuat program segmentasi

7.1 Pendahuluan
Computer Vision adalah ilmu pengetahuan dan teknologi dari suatu sistem komputer mampu
memiliki kemampuan akuisisi, memroses dan memahami (understanding) dari suatu
image/streaming video. Sehingga apabila dirumuskan, Computer Vision adalah:

Computer Vision = Camera + Computer + Pattern Recognition

Untuk representasi pada komputer, fungsi (misalnya intensitas) harus disampling pada
interval diskrit. Sampling adalah memetakan nilai intensitas ke interval diskrit. Titik-titik dimana
image disampling disebut element gambar atau piksel. Sedangkan resolusi menentukan jarak
diantara titik-titik. Pada spatial digitization(sampling) persamannya adalah:

I(x,y) =f(x,y).s(x,y) (7.1)

Dimana s(x,y) =1 untuk setiap nilai dari x dan y

Metode point prosessing adalah yang paling primitive dimana piksel lama dikonversi ke
piksel baru berdasarkan fungsi yang telah ditentukan. Pada pengolahan citra dasar,

19
Machine Vision, Prinsip dan Penerapan MTI BINUS University - Widodo Budiharto
2015

biasanya edge detection, threshold dan countour sangat dibutuhkan. Konsepnya dapat
menggunakan triangle algorithm untuk mencari nilai threshold seperti gambar di bawah:

Gambar 7.1 Triangle algorithm

Untuk mengubah image warna ke grayscale digunakan persamaan beriut

grayscale image = ( (0.3 * R) + (0.59 * G) + (0.11 * B) ).

Tujuan dari image processing adalah :


1. Visualization – observasi obyek yang tidak terlihat.
2. Image sharpening and restoration – untuk membuat image yang lebih bagus terlihat
3. Image retrieval - menjcari image of interest.
4. Measurement of pattern – mengukur berbagai obyek pada image
5. Image Recognition – membedakan antara obyek di image

Gambar 7.2 color image (a) and grayscale image (b)

7.2 Threshoding
20
Machine Vision, Prinsip dan Penerapan MTI BINUS University - Widodo Budiharto
2015

Thresholding merupakan method segmenetasi yang paling mudah, sebagai contoh


memisahkan area image suatu obyek dengan area lainnya dengan cara variasi intensitas (dengan
membuat image orisinal menjadi gray) diantara piksel obyek tersebut dengan piksel background
dengan nilai ambang(threshold) tertentu. Thresholding merupakan proses dasar segmentasi.
Segmentasi merupakan salah satu tugas tersulit dalam pemrosesan image. Akurasi segmentasi
ditentukan oleh sukses atau gagalnya prosedur analisis otomatis. Aksi Segmentasi terdiri dari
membagi image ke region atau obyek yang sesuai. Tujuan dari segmentasi image untuk
dekomposisi image ke bagian yang berarti.

Gambar 7.3 Inspeksi PCB otomatis

Segmentasi image secara umum berdasarkan property nilai intensitas:

1. Discontinuity: partisi image berdasarkan abrupt changes pada intensitas seperti edges

2. Similarity: partisi image ke regiton yang mirip sesuai pada criteria yang ditentukan.

Thresholding merupakan pendekatan dasar dari segmentasi. Single value thresholding secara
matematis adalah:

1 if f (x, y )  T
g(x, y )  
0 if f (x, y )  T

Proses melakukan thresholding pada OpenCV menggunakan fungsi threshold. Berikut


contohnya :

Threshold.cpp:
//Thresholding Demo
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include <stdlib.h>

21
Machine Vision, Prinsip dan Penerapan MTI BINUS University - Widodo Budiharto
2015

#include <stdio.h>

using namespace cv;


/// Global variables
int threshold_value = 0;
int threshold_type = 3;;
int const max_value = 255;
int const max_type = 4;
int const max_BINARY_value = 255;

Mat src, src_gray, dst;


char* window_name = "Threshold Demo";
char* trackbar_type = "Type: \n 0: Binary \n 1: Binary Inverted \n 2: Truncate \n 3: To Zero \n 4: To Zero
Inverted";
char* trackbar_value = "Value";

/// Function headers


void Threshold_Demo( int, void* );

int main( int argc, char** argv ){


/// Load image
src = imread( argv[1], 1 );
/// Ubah image ke gray
cvtColor( src, src_gray, CV_RGB2GRAY );

/// buat window


namedWindow( window_name, CV_WINDOW_AUTOSIZE );
/// Buat Trackbar
createTrackbar( trackbar_type, window_name, &threshold_type, max_type, Threshold_Demo );
createTrackbar( trackbar_value, window_name, &threshold_value, max_value, Threshold_Demo );
Threshold_Demo( 0, 0 );
while(true)
{
int c;
c = waitKey( 20 );
if( (char)c == 27 )
{ break; }

22
Machine Vision, Prinsip dan Penerapan MTI BINUS University - Widodo Budiharto
2015

}
}
void Threshold_Demo( int, void* ){
/* 0: Binary
1: Binary Inverted
2: Threshold Truncated
3: Threshold to Zero
4: Threshold to Zero Inverted
*/
threshold( src_gray, dst, threshold_value, max_BINARY_value,threshold_type );
imshow( window_name, dst );
}

Gambar 7.4 Program Threshold pada Lena.jpg

Partisi image histogram menggunakan single global threshold. Basic global threshold, T,
dihitung menggunakan algoritma:

1. Select an initial estimate for T (typically the average grey level in the image)

23
Machine Vision, Prinsip dan Penerapan MTI BINUS University - Widodo Budiharto
2015

2. Segment the image using T to produce two groups of pixels: G1 consisting of pixels with grey
levels >T and G2 consisting pixels with grey levels ≤ T

3. Compute the average grey levels of pixels in G1 to give μ1 and G2 to give μ2

4. Compute a new threshold value:


1   2
T
2
5. Repeat steps 2 – 4 until the difference in T in successive iterations is less than a predefined limit
T∞

Gambar 7.5 Hasil thresholding

Menggunakan global threshold mungkin bukan pilihan bagus dimana image memili
pencahayaan berbeda pada beda tempat, sehingga dibutuhkan adaptive thresholding, pada
Phyton:

cv.AdaptiveThreshold(src, dst, maxValue, adaptive_method=CV_ADAPTIVE_THRESH_

adaptiveThreshold.py:

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('bw.png',0)
img = cv2.medianBlur(img,5)

ret,th1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY)

24
Machine Vision, Prinsip dan Penerapan MTI BINUS University - Widodo Budiharto
2015

th2 = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_MEAN_C,\
cv2.THRESH_BINARY,11,2)
th3 = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,\
cv2.THRESH_BINARY,11,2)

titles = ['Original Image', 'Global Thresholding (v = 127)',


'Adaptive Mean Thresholding', 'Adaptive Gaussian Thresholding']
images = [img, th1, th2, th3]

for i in xrange(4):
plt.subplot(2,2,i+1),plt.imshow(images[i],'gray')
plt.title(titles[i])
plt.xticks([]),plt.yticks([])
plt.show()

Gambar 7.6 global threshold

7.3 Histogram Equalization


Histogram equalization merupakan representasi grafis dari distribusi intensitas dari image, yang
mengkuantifikasi jumlah piksel untuk tiap intensitas. Histogam equalization merupakan representasi
grafis dari distribusi intensitas image, perhatikan gambar di bawah dimana idealnya intensitas pixel
menyebar.

25
Machine Vision, Prinsip dan Penerapan MTI BINUS University - Widodo Budiharto
2015

Gambar 7.7 Histogram equalization

Berikut kode demo Histogram Equalization yang dapat digunakan pada pendeteksi objek
di system robotika [4]:

Histogram.cpp:
//Demo Histogram Eequalization
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
#include <stdio.h>
using namespace cv;
using namespace std;
int main( int argc, char** argv ){
Mat src, dst;
char* source_window = "Source image";
char* equalized_window = "Equalized Image";
/// Load image
src = imread( argv[1], 1 );
if( !src.data )
{ cout<<"Usage: ./Histogram_Demo <path_to_image>"<<endl;
return -1;}
/// konversi ke grayscale
cvtColor( src, src, CV_BGR2GRAY );
/// Apply Histogram Equalization
equalizeHist( src, dst );
/// Menampilkan hasil
namedWindow( source_window, CV_WINDOW_AUTOSIZE );
namedWindow( equalized_window, CV_WINDOW_AUTOSIZE );
imshow( source_window, src );
imshow( equalized_window, dst );
/// Wait until user exits the program

26
Machine Vision, Prinsip dan Penerapan MTI BINUS University - Widodo Budiharto
2015

waitKey(0);
return 0;
}

Gambar 7.8 Hasil Histogram equalization

7.5 Boundary
OpenCV menggunakan marker-based watershed algorithm yang merupakan interactive image
segmentation. Kita memberikan label yang berbeda untuk obyek yang kita kenal sehingga kita dapatkan
boundary dengan nilai -1.

Boundary.py:

import numpy as np
import cv2
from matplotlib import pyplot as plt

img = cv2.imread('coins.png')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(gray,0,255,cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)

27
Machine Vision, Prinsip dan Penerapan MTI BINUS University - Widodo Budiharto
2015

Gambar 7.9 Hasil thresholding

markers = cv2.watershed(img,markers)
img[markers == -1] = [255,0,0]

OpenCV memiliki sample watershed segmentation bernama watershed.py.

Gambar 7.10 Hasil labelling

Kita dapat merepresentasikan contour dengan urutan koordinat pikel pada image.
Himpunan piklse pada batas dari suatu bentuk ditraslasi ke himpunan koneksi diantara mereka.

28
Machine Vision, Prinsip dan Penerapan MTI BINUS University - Widodo Budiharto
2015

Gambar 7.11 Berbagai Konektifitas

7.6 Identifikasi Boundary


Obyek dipresentasikan sebagai kumpulan pixel di image. Untuk mendukung pengenalan
obyek, dibutuhkan penjelasan property dari pixel grup  object descriptor. 2 bentuk object
descriptor:

1. Boundary descriptor: characterize an arrangement of pixels in the object perimeter or


boundary

2. Region descriptor: characterize an arrangement of pixels within the area of the object

7.7 Descriptor
Terdapat 2 region descriptor:

1. Basic: characterize the geometric properties of the region

2. Moment: characterize the density of the region

Sebuah region dapat dijelaskan dengan memperhatikan pengukuran scalar berdasarkan


property geometris. Anggap x[m] dan y[m] koordinat m-th pixel pada boundary, bilangan
komplek z[m]=x[m]+jy[m], dan Fourier Descriptor (FD) dari bentuk didefinisikan sebagai DFT
dari z[m]:

29
Machine Vision, Prinsip dan Penerapan MTI BINUS University - Widodo Budiharto
2015

Untuk extracting keypoints and computing descriptors menggunakan SIFT (Scale Invariant
Feature Transform) algorithm oleh D. Lowe dapat membaca:

Lowe, D. G., “Distinctive Image Features from Scale-Invariant Keypoints”, International


Journal of Computer Vision, 60, 2, pp. 91-110, 2004.

7.8 Moments

Moment menjelaskan layout bentuk. Perhitungan seluruh moment hingga order ke tiga dari
sebuah polygon atau bentuk teraster:

In case of a raster image, momen spasial dihitung:

Momen pusat dhitung:

Dimana adalah center massa:

normalized central moments dihitung:

Catatan:

, , hence the values are not stored.

Fungsi menghitung 7 Hu invariants:

30
Machine Vision, Prinsip dan Penerapan MTI BINUS University - Widodo Budiharto
2015

Gambar 7.12 Invariant moments

Moments.cpp:
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
#include <stdio.h>
#include <stdlib.h>

using namespace cv;


using namespace std;

Mat src; Mat src_gray;


int thresh = 100;
int max_thresh = 255;
RNG rng(12345);

/// Function header


void thresh_callback(int, void* );

/** @function main */


int main( int argc, char** argv )
{
/// Load source image and convert it to gray
src = imread( argv[1], 1 );

/// Convert image to gray and blur it


cvtColor( src, src_gray, CV_BGR2GRAY );
blur( src_gray, src_gray, Size(3,3) );

31
Machine Vision, Prinsip dan Penerapan MTI BINUS University - Widodo Budiharto
2015

/// Create Window


char* source_window = "Source";
namedWindow( source_window, CV_WINDOW_AUTOSIZE );
imshow( source_window, src );

createTrackbar( " Canny thresh:", "Source", &thresh, max_thresh,


thresh_callback );
thresh_callback( 0, 0 );

waitKey(0);
return(0);
}

/** @function thresh_callback */


void thresh_callback(int, void* )
{
Mat canny_output;
vector<vector<Point> > contours;
vector<Vec4i> hierarchy;

/// Detect edges using canny


Canny( src_gray, canny_output, thresh, thresh*2, 3 );
/// Find contours
findContours( canny_output, contours, hierarchy, CV_RETR_TREE,
CV_CHAIN_APPROX_SIMPLE, Point(0, 0) );

/// Get the moments


vector<Moments> mu(contours.size() );
for( int i = 0; i < contours.size(); i++ )
{ mu[i] = moments( contours[i], false ); }

/// Get the mass centers:


vector<Point2f> mc( contours.size() );
for( int i = 0; i < contours.size(); i++ )
{ mc[i] = Point2f( mu[i].m10/mu[i].m00 , mu[i].m01/mu[i].m00 ); }

/// Draw contours


Mat drawing = Mat::zeros( canny_output.size(), CV_8UC3 );
for( int i = 0; i< contours.size(); i++ )
{
Scalar color = Scalar( rng.uniform(0, 255), rng.uniform(0,255),
rng.uniform(0,255) );
drawContours( drawing, contours, i, color, 2, 8, hierarchy, 0, Point()
);
circle( drawing, mc[i], 4, color, -1, 8, 0 );
}

/// Show in a window


namedWindow( "Contours", CV_WINDOW_AUTOSIZE );
imshow( "Contours", drawing );

/// Calculate the area with the moments 00 and compare with the result of
the OpenCV function
printf("\t Info: Area and Contour Length \n");
for( int i = 0; i< contours.size(); i++ )
{

32
Machine Vision, Prinsip dan Penerapan MTI BINUS University - Widodo Budiharto
2015

printf(" * Contour[%d] - Area (M_00) = %.2f - Area OpenCV: %.2f -


Length: %.2f \n", i, mu[i].m00, contourArea(contours[i]), arcLength(
contours[i], true ) );
Scalar color = Scalar( rng.uniform(0, 255), rng.uniform(0,255),
rng.uniform(0,255) );
drawContours( drawing, contours, i, color, 2, 8, hierarchy, 0, Point()
);
circle( drawing, mc[i], 4, color, -1, 8, 0 );
}
}

Pada Versi OpenCV 3.0

#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace cv;
using namespace std;
Mat src; Mat src_gray;
int thresh = 100;
int max_thresh = 255;
RNG rng(12345);
void thresh_callback(int, void* );
int main( int, char** argv )
{
src = imread( argv[1], 1 );
cvtColor( src, src_gray, COLOR_BGR2GRAY );
blur( src_gray, src_gray, Size(3,3) );
const char* source_window = "Source";
namedWindow( source_window, WINDOW_AUTOSIZE );
imshow( source_window, src );
createTrackbar( " Canny thresh:", "Source", &thresh, max_thresh,
thresh_callback );
thresh_callback( 0, 0 );
waitKey(0);
return(0);
}
void thresh_callback(int, void* )
{
Mat canny_output;
vector<vector<Point> > contours;
vector<Vec4i> hierarchy;
Canny( src_gray, canny_output, thresh, thresh*2, 3 );
findContours( canny_output, contours, hierarchy, RETR_TREE,
CHAIN_APPROX_SIMPLE, Point(0, 0) );
vector<Moments> mu(contours.size() );
for( size_t i = 0; i < contours.size(); i++ )
{ mu[i] = moments( contours[i], false ); }
vector<Point2f> mc( contours.size() );
for( size_t i = 0; i < contours.size(); i++ )

33
Machine Vision, Prinsip dan Penerapan MTI BINUS University - Widodo Budiharto
2015

{ mc[i] = Point2f( static_cast<float>(mu[i].m10/mu[i].m00) ,


static_cast<float>(mu[i].m01/mu[i].m00) ); }
Mat drawing = Mat::zeros( canny_output.size(), CV_8UC3 );
for( size_t i = 0; i< contours.size(); i++ )
{
Scalar color = Scalar( rng.uniform(0, 255), rng.uniform(0,255),
rng.uniform(0,255) );
drawContours( drawing, contours, (int)i, color, 2, 8, hierarchy, 0, Point()
);
circle( drawing, mc[i], 4, color, -1, 8, 0 );
}
namedWindow( "Contours", WINDOW_AUTOSIZE );
imshow( "Contours", drawing );
printf("\t Info: Area and Contour Length \n");
for( size_t i = 0; i< contours.size(); i++ )
{
printf(" * Contour[%d] - Area (M_00) = %.2f - Area OpenCV: %.2f - Length:
%.2f \n", (int)i, mu[i].m00, contourArea(contours[i]), arcLength(
contours[i], true ) );
Scalar color = Scalar( rng.uniform(0, 255), rng.uniform(0,255),
rng.uniform(0,255) );
drawContours( drawing, contours, (int)i, color, 2, 8, hierarchy, 0, Point()
);
circle( drawing, mc[i], 4, color, -1, 8, 0 );
}
}

Gambar 7.13 Hasil moment

34
Machine Vision, Prinsip dan Penerapan MTI BINUS University - Widodo Budiharto
2015

7.9 Embedded System untuk Machine Vision

Pada saat ini, beberapa sistem embedded yang terkenal untuk dapat melakukan image
processing ialah Raspberry Pi yang dilengkapi dengan kamera parallel kecepatan tinggi dan
Odroid-XU berbasiskan quad prosesor, misalnya untuk tracking pada robot[5]. Gambar di bawah
ini menampilkan Raspberri Pi dan Odroid-XU.

(a) (b)

Gambar 7.14 Raspberry Pi model B 512M dengan kamera parallel (a) dan Odroid-XU (b)

Sistem embedded biasanya digunakan untuk aplikasi-aplikasi akuisisi data, pengontrol


multifungsi dengan daya yang dibutuhkan minimal, misalnya :

1. Pengontrolan robot berbasis vision


2. Transaksi dan display di jalan toll.
3. Telemetri di tempat-tempat remote.
4. Industri mainan anak-anak/games
5. Electronics smart devices di mall dan industry
6. Telepresence robot
7. Robot humanoid dan robot soccer

Agar dapat bekerja dengan power yang rendah dan cepat, sistem embedded memiliki 2
komponen utama, yaitu:

35
Machine Vision, Prinsip dan Penerapan MTI BINUS University - Widodo Budiharto
2015

1. Hardware

 Catu daya stabil bertegangan dan berarus rendah


 Mikrorosesor ARM Cortex, Propeller, Intel dan lainnya
 Memori DRAM
 Timer
 Port HDMI
 Port USB
 Port Audio stereo
 Port I/O

2. Software

Sistem Embedded memiliki software yang ditulis dalam bahasa yang lebih dekat/dikenali
oleh hardware, misalnya C++ dan Java, dengan sistem Operasi seperti Linux Ubuntu jika
menggunakan Odroid dan Raspbian jika menggunakan Raspberry Pi.

Latihan :
1. Jelaskan fungsi dari Histogram equalization
2. Buat program untuk mengambil obyek bola dari lingkungannya menggunakan
thresholding, smoothing dan histogram equalization.
3. Jelaskan mengenai contour:

The cv::findCountours function will detect contours on the input binary image:
void MarkerDetector::findContours(const cv::Mat& thresholdImg,
std::vector<std::vector<cv::Point>
>& contours,
int minContourPointsAllowed)
{
std::vector< std::vector<cv::Point> > allContours;
cv::findContours(thresholdImg, allContours, CV_RETR_LIST, CV_
CHAIN_APPROX_NONE);
contours.clear();
for (size_t i=0; i<allContours.size(); i++)
{
int contourSize = allContours[i].size();
if (contourSize > minContourPointsAllowed)
{
contours.push_back(allContours[i]);
}
}

36
Machine Vision, Prinsip dan Penerapan MTI BINUS University - Widodo Budiharto
2015

Referensi:

1. Milan Sonka et al(2015), Image Processing, Analysis, and Machine Vision, 4 th edition, Cengage
Learning, USA.
2. Forsyth, D., Ponce, J. (2012). Computer Vision: A Modern Approach. 2nd ed. Prentice Hall. ISBN:
978-0-27-376414-4
3. Opencv.org
4. Walliman, N. (2011) Research Methods: The Basics. London: Roudlege
5. Okasha, S. (2002) Philosophy of Science: A Very Short Introduction. Oxford: Oxford University
Press.
6. Stuart Russel and Peter Norvig, (2011), Artificial Intelligence, A Modern Approach, Pearson
Publisher.
7. Stuart Russel and Peter Norvig, (2011), Artificial Intelligence, A Modern Approach,
Pearson Publisher.
8. Widodo Budiharto (2015), Robot Modern, Andi Offset Publisher- Yogyakarta.
9. Widodo Budiharto et al, Ball Distance Estimation and Tracking System of Humanoid
Soccer Robot, Lecturer Notes on Information Technology, Springer Publisher, 2014.

37

Anda mungkin juga menyukai