1
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
2 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:
3 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
4 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
5 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
6 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
7 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
8
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
9 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
10
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);
11 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:
12 #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
13 Nilai warna tersebut disimpan pada matrik 3 dimensi yang dilambangkan dalam Intensitas I
(X,Y, channel). Nilai warna RGB dapat dinormalisasi menggunakan persamaan :
� � = �
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 :
14 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 );
15 }
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 ))
{
16 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
17 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.
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
Identifikasi masalah dan tujuan
Mengajukan sebuah pertanyaan penelitian
Mengonstruksikan hipotesis Mereview literatur sebelumnya
Memilih desain dan metode penelitian
Menguji hipotesis
18 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.
19
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
20 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)
21 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:
Proses melakukan thresholding pada OpenCV menggunakan fungsi threshold. Berikut
22
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 );
23 }
}
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:
24 2. Segment the image using T to produce two groups of pixels: G1 consisting of pixels with grey
levels >T and G2consisting pixels with grey levels ≤ T
3. Compute the average grey levels of pixels in G1to give μ1 and G2to give μ2 4. Compute a new threshold value:
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) 2
2 1
25 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
26
Gambar 7.7 Histogram equalization
Berikut kode demo Histogram Equalization yang dapat digunakan pada pendeteksi objek
di system robotika [4]:
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 );
27 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)
28
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.
29 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]:
30 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.
31 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 );
32 /// 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 );
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) );
namedWindow( "Contours", CV_WINDOW_AUTOSIZE ); imshow( "Contours", drawing );
/// Calculate the area with the moments 00 and compare with the result of the OpenCV function
33 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) );
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 );
Canny( src_gray, canny_output, thresh, thresh*2, 3 );
34 { 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) );
35
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
36 1. Hardware
Catu daya stabil bertegangan dan berarus rendah
Mikrorosesor ARM Cortex, Propeller, Intel dan lainnya Memori DRAM
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,
37 }
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. Stuart Russel and Peter Norvig, (2011), Artificial Intelligence, A Modern Approach, Pearson Publisher.
8. Widodo Budiharto (2015), Robot Modern, Andi Offset Publisher- Yogyakarta.