Pembelajaran Berbasis Problem Solving Nama Problem Geometry Shape Counter Level Medium Estimasi Waktu 3 minggu
Estimasi waktu pengerjaan adalah 2 minggu: 1. Buatlah sebuah program dengan input sebuah gambar yang berisikan 5 bentuk yaitu: lingkaran, segi empat, segitiga, segi lima dan bintang. Luaran dari program adalah jumlah masing-masing bentuk tersebut. Ilustrasi dari tampilan sistem adalah sebagai berikut:
Lingkaran: 1 Segi Empat: 1 Segitiga : 1 Segi Lima:1 Bintang: 1
Open Image
Deteksi Bentuk
Untuk mempermudah pemrosesan maka diasumsikan gambar sudah dalam bentuk hitam putih, anda dapat menggunakan fungsi im2bw untuk mengkonversi gambar menjadi hitam putih. Alur blok proses dari sistem adalah sebagai berikut: Tahap 1 : membangun data model dari bentuk dengan menggunakan teori momen dalam ektrasi ciri (Materi untuk momen dapat dilihat pada buku : Feature Ekstraction and Image Processing, Marx Nixon and Alberto Aguado, chapter 7.3 Region Descriptor) Tahap 2: membangun GUI sesuai dengan contoh diatas dimana dilakukan proses load data model hasil tahap pertama untuk melakukan pencocokan. Yang perlu dikumpulkan: 1. Kode program 2. Dokumentasi Program yang berisi: - Landasan teori - Rancangan sistem - Hasil Pengujian (minimal 10 pengujian) - Performansi Sistem - Kesimpulan dan Saran Created For Lecture Material CSG4I3 Sistem Rekognisi Lecture: Tjokorda Agung Budi Wirayuda, Fakultas Informatika Universitas Telkom
1
Membangun Model
Menguji Model untuk 1 objek
Menguji Model untuk banyak objek
Tahap 1: Membangun Model Sediakan gambar bentuk yang ingin dikenali dimana setiap bentuk disimpan dalam sebuah file Kotak.png Segitiga.png Lingkaran.png
Bintang.png
Segilima.png
Terjemahkan formula moment ke dalam kode:
Keterangan: x,y =lokasi pixel, I(x,y)=intensitas pixel , dimana untuk gambar hitam putih hanya akan berisi angka 1 dan 0, p dan q = indek moment ∆A= delta posisi dimana untuk gambar diskrit ∆A=1.
function hasil=moment(I,p,q) %I= gambar yang akan dihitung momentnya, dalam format bw %p= indek moment untuk x %q =indek moment untuk y [m,n]=size(I); %m=baris ~ y %n=kolom ~ x hasil=0; for i=1:n for j=1:m Created For Lecture Material CSG4I3 Sistem Rekognisi Lecture: Tjokorda Agung Budi Wirayuda, Fakultas Informatika Universitas Telkom
2
hasil=hasil+i^p*j^q*I(j,i);% ingat akses matrik basisnya baris dan kolom end end Script untuk menguji keberhasilan perhitungan momen:
%kita akan menggunakan salah satu manfaat dari moment yaitu dapat digunakan untuk menentukan pusat benda. clc; clear; I=imread('kotak.png'); Ibw=im2bw(I); %ingat asumsi bahwa objek yang dicari bernilai 1, %dalam penyimpanan data putih=1 dan hitam=0 %di kasus kita hitam seharusnya bernilai 1 m00=moment(~Ibw,0,0);%identik dengan luas m10=moment(~Ibw,1,0); m01=moment(~Ibw,0,1); %memanfaatkan moment untuk mencari titik pusat benda %xc=m10/m00 %yc=m01/m00 xc=round(m10/m00); yc=round(m01/m00); %tampilkan gambar dan berikan marker pada pusatnya imshow(Ibw) hold on plot(xc, yc, 'b*') hold off Sampai tahap ini kita telah berhasil melakukan perhitungan moment dasar, tahap selanjutnya adalah menggunakan perhitungan moment dasar ini untuk menghitung 7 invariant moment (lihat slide pertemuan 9, halaman 17-20).Moment -> central moment -> invarian moment Sesuai dengan harapan pada tahap 1 yaitu membangun model, maka hasil perhitungan anda hasrus disimpan untuk dapat digunakan ulang. Dalam Matlab kita dapat menggunakan mekanisme penyimpanan dalam *.mat file untuk melakukan hal ini. Berikut kode “dummy” untuk melakukan penyimpanan clc; clear; %menyiapkan variabel untuk menyimpan model Model=zeros(5,7); Nama_Model=struct('Bentuk',{}); % 5=jumlah model , 7 ciri model (harusnya invarian moment) I=imread('kotak.png'); Ibw=im2bw(I); %ingat asumsi bahwa objek yang dicari bernilai 1, %dalam penyimpanan data putih=1 dan hitam=0 %di kasus kita hitam seharusnya bernilai 1 m00=moment(~Ibw,0,0);%identik dengan luas m10=moment(~Ibw,1,0); m01=moment(~Ibw,0,1); Created For Lecture Material CSG4I3 Sistem Rekognisi 3 Lecture: Tjokorda Agung Budi Wirayuda, Fakultas Informatika Universitas Telkom
%memanfaatkan moment untuk mencari titik pusat benda %xc=m10/m00 %yc=m01/m00 xc=round(m10/m00); yc=round(m01/m00); %tampilkan gambar dan berikan marker pada pusatnya imshow(Ibw) hold on plot(xc, yc, 'b*') hold off %simpan hasil perhitungan ke model Nama_Model(1).Bentuk='kotak'; %ini hanya contoh saja, seharusnya anda menyimpan 7 invariant moment Model(1,1)=m00;Model(1,2)=m10;Model(1,3)=m01; %========================================================= I=imread('lingkaran.png'); Ibw=im2bw(I); %ingat asumsi bahwa objek yang dicari bernilai 1, %dalam penyimpanan data putih=1 dan hitam=0 %di kasus kita hitam seharusnya bernilai 1 m00=moment(~Ibw,0,0);%identik dengan luas m10=moment(~Ibw,1,0); m01=moment(~Ibw,0,1); %memanfaatkan moment untuk mencari titik pusat benda %xc=m10/m00 %yc=m01/m00 xc=round(m10/m00); yc=round(m01/m00); %tampilkan gambar dan berikan marker pada pusatnya imshow(Ibw) hold on plot(xc, yc, 'b*') hold off %simpan hasil perhitungan ke model Nama_Model(2).Bentuk='lingkaran'; %ini hanya contoh saja, seharusnya anda menyimpan 7 invariant moment Model(2,1)=m00;Model(2,2)=m10;Model(2,3)=m01; %==== Lanjutkan sampai 5 bentuk ======% %........ %........ %simpan model
save('modelmoment.mat','Model','Nama_Model') Data model akan tersimpan pada sebuah file .mat dengan nama modelmoment.mat, untuk menggunakan kembali silahkan anda load dengan perintah
load('modelmoment.mat') Ok, silahkan dilanjutkan secara mandiri 25 September 2014
Created For Lecture Material CSG4I3 Sistem Rekognisi Lecture: Tjokorda Agung Budi Wirayuda, Fakultas Informatika Universitas Telkom
4
Tahap 1: Membangun Model (Lanjutan) Kita telah memiliki sebuah fungsi untuk menghitung moment yaitu:
function hasil=moment(I,p,q) Selanjutnta kita akan menggunakan fungsi tersebut untuk menghitung Xc dan Yc yang akan digunakan dalam menghitung central moment, dimana formula untuk central moment adalah sebagai berikut:
pq ( x x ) p ( y y ) q f ( x, y ), x x
y
m10 , m00
y
m01 m00
function hasil=central_moment(I,xc,yc,p,q) %I= gambar yang akan dihitung momentnya, dalam format bw %xc = pusat masa x %yc = pusat masa y %p= indek moment untuk x %q =indek moment untuk y [m,n]=size(I); %m=baris ~ y %n=kolom ~ x hasil=0; for i=1:n for j=1:m hasil=hasil+(i-xc)^p*(j-yc)^q*I(j,i);% ingat akses matrik basisnya baris dan kolom end end Tahap selanjutnya adalah memanfaatkan fungsi moment dan central_moment untuk membangun 7 invariant moment yang didefinisikan sebagai berikut
Created For Lecture Material CSG4I3 Sistem Rekognisi Lecture: Tjokorda Agung Budi Wirayuda, Fakultas Informatika Universitas Telkom
5
function hasil=ektraksiciri(Ibw) m00=moment(~Ibw,0,0);%identik dengan luas m10=moment(~Ibw,1,0); m01=moment(~Ibw,0,1); %memanfaatkan moment untuk mencari titik pusat benda %xc=m10/m00 %yc=m01/m00 xc=round(m10/m00); yc=round(m01/m00); %hitung central moment u00=central_moment(~Ibw,xc,yc,0,0); u20=central_moment(~Ibw,xc,yc,2,0); u02=central_moment(~Ibw,xc,yc,0,2); u11=central_moment(~Ibw,xc,yc,1,1); u30=central_moment(~Ibw,xc,yc,3,0); u03=central_moment(~Ibw,xc,yc,0,3); u12=central_moment(~Ibw,xc,yc,1,2); u21=central_moment(~Ibw,xc,yc,2,1); %hitung normalize central moment n20=u20/u00^2; n02=u02/u00^2; n11=u11/u00^2; n30=u30/u00^3; n03=u03/u00^3; n12=u12/u00^3; n21=u21/u00^3; %menghitung invariant moment (dalam kode ini baru dihitung 4 %invariant moment saja) M1=n20+n02; M2=(n20-n02)^2+4*n11; M3=(n30-3*n12)^2+(3*n21-n03)^2; M4=(n30+n12)^2+(n21+n03)^2; hasil=[M1,M2,M3,M4]; Resume: Sampai tahap ini kita telah memiliki 3 fungsi: No Nama Funsgi function hasil=moment(I,p,q) 1 2 3
Keterangan Menghitung moment dari sebuah objek function Menghitung central moment dari hasil=central_moment(I,xc,yc,p,q) sebuah objek function hasil=ektraksiciri(Ibw) Menghitung 7 invariant moment dari sebuah objek
Fungsi tersebut akan digunakan untuk membangun model/template dari setiap objek yang akan dikenali. Mekanisme penyimoanan model akan menggunakan file *.mat dimana *.mat akan berisikan informasi mengenai 7 invariant moment dari suatu objek. Untuk menyederhanakan proses maka informasi dari setiap objek akan disimpan pada file *.mat yang berbeda. Created For Lecture Material CSG4I3 Sistem Rekognisi Lecture: Tjokorda Agung Budi Wirayuda, Fakultas Informatika Universitas Telkom
6
Mari kita tuliskan scipt untuk melakukan ektraksi ciri dan menyimpan data dari objek yang akan kita kenali, kita beri nama script_simpan_model
I=imread('bintang.png'); Ibw=im2bw(I); M=ektraksiCiri(~Ibw); save('bintang.mat','M'); %ulangi untuk bentuk lain yang akan dikenali Periksa hasil dari script_simpan_model:
No
Penyimpanan dalam *.mat
Isi file *.mat
1
Template objek dalam gambar Kotak.png
kotak.mat
M= 0,169808386213761 0,00113986545584888 4,10115292387752e-11 5,06625958603628e-10
2
Bintang.png
bintang.mat
M= 0,209038983493168 0,000813874870822633 2,55889942519087e-09 1,68166004129090e-09
3
Segitiga.png
segitiga.mat
M= 0,225219252105609 0,221949384348273 7,03034972860717e-07 4,78250972745054e-08
4
Lingkaran.png
lingkaran.mat
5
Segilima.png
segilima.mat
M= 0,159521798945384 0,000226877287856150 7,23382435711437e-12 8,87107657635300e-10 M= 0,163075012413174 0,000244857280636777 1,69105765060367e-11 3,48387726688887e-11
Silahkan anda menyediakan akses dalam bentuk GUI untuk proses pembangunan model
Created For Lecture Material CSG4I3 Sistem Rekognisi Lecture: Tjokorda Agung Budi Wirayuda, Fakultas Informatika Universitas Telkom
7
Tahap 2: Menguji Model Untuk 1 Objek Pada tahap 1 kita telah memiliki model dari objek yang akan dikenali dan disimpan dalam sebuah file *.mat untuk setiap objek. Tahap 2 adalah menguji model hasil tahap 1 untuk 1 objek tunggal. Dimulai dengan mempersiapkan gambar objek tunggal yang akan diujikan. Silahkan membuat kembali gambar objek yang akan diujikan untuk setiap model dengan variansi ukuran (buat 2 gambar untuk setiap model). Kotak1.png
Segitiga1.png
Bintang1.png
Segilima1.png
Kotak2.png
Segitiga2.png
Bintang2.png
Segilima2.png
Lingkaran1.png
Lingkaran2.png
Algoritma pengenalan: (1) Baca gambar yang akan dikenali (2) Lakukan proses ekstraksi ciri pada gambar yang akan dikenali (3) Load seluruh data model (4) Bandingkan hasil ektraksi ciri pada langkah ke-2 dengan seluruh data model dan pilih jarak terdekat
Secara umum kita telah memiliki seluruh fungsi yang dibutuhkan, tinggal menambahkan fungsi untuk melakukan pencocokan antara data model dengan data yang akan diujikan. Berikut adalah fungsi untuk melakukan pencocokan: Created For Lecture Material CSG4I3 Sistem Rekognisi Lecture: Tjokorda Agung Budi Wirayuda, Fakultas Informatika Universitas Telkom
8
function [hasil1,hasil2]=matching(Ciri1) %Ciri1 adalah hasil ektraksi ciri data yang akan diujikan %load semua data model load kotak.mat Model_1=M; load lingkaran.mat Model_2=M; load bintang.mat Model_3=M; load segilima.mat Model_4=M; load segitiga.mat Model_5=M; %Siapkan penamaan dari bentuk, kita gunakan struct karena tipe %data nama bentuk adalah string yang tidak mungkin disimpan %dalam bentuk matrik Nama_Model=struct('Nama',{}); Nama_Model(1).Nama='kotak'; Nama_Model(2).Nama='lingkaran'; Nama_Model(3).Nama='bintang'; Nama_Model(4).Nama='segilima'; Nama_Model(5).Nama='segitiga'; %bandingkan ciri1 dengan data model %cari yang terdekat d1=norm(Ciri1-Model_1); d2=norm(Ciri1-Model_2); d3=norm(Ciri1-Model_3); d4=norm(Ciri1-Model_4); d5=norm(Ciri1-Model_5); d=[d1;d2;d3]; %urutkan dari yang terkecil [id,d]=sort(d); hasil1=d(1); hasil2=Nama_Model(hasil1).Nama; Seluruh mekanisme yang kita butuhkan telah siap untuk disusun dalam sebuah script pengujian. Mari tuliskan script pengujian
%1.Membaca data yang akan diujikan I=imread('bintang1.png'); Ibw=im2bw(I); %2.Melakukan proses ektraksi ciri M=ektraksiCiri(~Ibw); %3 dan 4 Load seluruh data model dan lakukan pencocokan [hasil1,hasil2]=matching(M); %Tampilkan informasi nama bentuk display(hasil2);
Silahkan anda menyediakan akses dalam bentuk GUI untuk proses pengujian ini Created For Lecture Material CSG4I3 Sistem Rekognisi Lecture: Tjokorda Agung Budi Wirayuda, Fakultas Informatika Universitas Telkom
9
Tahap 3: Menguji Model Untuk Banyak Objek Pada tahap 2, kita telah melakukan pengujian untuk 1 objek pada 1 gambar (cukup mudah). Tahap selanjutnya adalah melakukan pengujian dimana gambar yang di-inputkan mengandung banyak objek. Misalk kita ujikan dengan gambar berikut.
Harapan keluaran dari sistem adalah: Kotak=4 Lingkaran=2 Bintang=6 Segitiga=0 Segilima=0 Proses yangg dilakukan relatif sama dengan tahap 2, hanya saja diperlukan mekanisme untuk melakukan segmentasi objek pada gambar, sehingga algoritma untuk tahap 3 adalah sebagai berikut: (1) Baca gambar yang akan dikenali (2) Lakukan proses sgementasi untuk menghitung N yang merupakan jumlah objek dalam gambar (3) Lakukan perulangan sebanyak N -Lakukan proses ekstraksi ciri pada gambar yang akan dikenali -Load seluruh data model -Bandingkan hasil ektraksi ciri pada langkah ke-2 dengan seluruh data model dan pilih jarak terdekat -Update counter perhitungan bentuk (4) Tampilkan counter perhitungan bentuk
Untuk melakukan proses segmentasi, kita manfaatkan fungsi bawaan dari Matlab yaitu fungsi regionprops. Deskripsi dari fungsi regionprops adalah sebagai berikut: regionprops
Measure properties of image regions Syntax STATS = regionprops(BW, properties) STATS = regionprops(CC, properties)
Created For Lecture Material CSG4I3 Sistem Rekognisi Lecture: Tjokorda Agung Budi Wirayuda, Fakultas Informatika Universitas Telkom
10
STATS = regionprops(L, properties) STATS = regionprops(..., I, properties)
Description STATS = regionprops(BW, properties) measures a set of properties for each connected component (object) in the binary image, BW. The image BW is a logical array; it can have any
dimension. STATS = regionprops(CC, properties) measures a set of properties for each connected component (object) in CC, which is a structure returned by bwconncomp. STATS = regionprops(L, properties) measures a set of properties for each labeled region in the label matrix L. Positive integer elements of L correspond to different regions. For example, the set of elements of L equal to 1 corresponds to region 1; the set of elements of L equal to 2 corresponds to region 2; and so on. STATS = regionprops(..., I, properties) measures a set of properties for each labeled region in the image I. The first input to regionprops—either BW, CC, or L—identifies the regions in I. The sizes must match: size(I) must equal size(BW), CC.ImageSize, or size(L). STATS is a structure array with length equal to the number of objects in BW, CC.NumObjects, or max(L(:)). The fields of the structure array denote different properties for each region, as specified by properties.
Properties properties can be a comma-separated list of strings, a cell array containing strings, the single string 'all', or the string 'basic'. If properties is the string 'all', regionprops
computes all the shape measurements, listed in Shape Measurements. If called with a grayscale image, regionprops also returns the pixel value measurements, listed in Pixel Value Measurements. If properties is not specified or if it is the string 'basic', regionprops computes only the 'Area', 'Centroid', and 'BoundingBox' measurements. You can calculate the following properties on N-D inputs: 'Area', 'BoundingBox', 'Centroid', 'FilledArea', 'FilledImage', 'Image', 'PixelIdxList', 'PixelList', and 'SubarrayIdx'. Shape Measurements 'Area'
'EulerNumber'
'Orientation'
'BoundingBox'
'Extent'
'Perimeter'
'Centroid'
'Extrema'
'PixelIdxList''
'ConvexArea'
'FilledArea'
'PixelList'
'ConvexHull'
'FilledImage'
'Solidity'
'ConvexImage'
'Image'
'SubarrayIdx'
'Eccentricity'
'MajorAxisLength'
'EquivDiameter' 'MinorAxisLength'
Pixel Value Measurements 'MaxIntensity'
'MinIntensity' 'WeightedCentroid'
'MeanIntensity' 'PixelValues'
Kita akan menggunakan properti shape measurement 'Image' untuk melakukan segmentasi, dimana hasil luarannya adalah berupa matrik segment objek. Created For Lecture Material CSG4I3 Sistem Rekognisi Lecture: Tjokorda Agung Budi Wirayuda, Fakultas Informatika Universitas Telkom
11
I=imread('Uji1.png'); %jadikan gambar hitam putih I=im2bw(I); figure(1);imshow(I); %panggil fungsi bawaan matlab %region_props s= regionprops(~I,'Image'); %hitung jumlah segment jum_seg=size(s,1); % Lakukan proses per segment % Siapkan mekanisme perhitungan hasil Nama_Model=struct('Nama',{}, 'Jumlah',{}); Nama_Model(1).Nama='kotak'; Nama_Model(1).Jumlah=0; Nama_Model(2).Nama='lingkaran'; Nama_Model(2).Jumlah=0; Nama_Model(3).Nama='bintang'; Nama_Model(3).Jumlah=0; Nama_Model(4).Nama='segilima'; Nama_Model(4).Jumlah=0; Nama_Model(5).Nama='segitiga'; Nama_Model(5).Jumlah=0;
for i=1:jum_seg; %lakukan ektraksi ciri a=s(i).Image; M=ektraksiCiri(~a); %proses pencocokan [hasil1,hasil2]=matching(M); %update counter jumlah Nama_Model(hasil1).Jumlah=Nama_Model(hasil1).Jumlah+1; end %tampilkan hasil for i=1:5 display(strcat(Nama_Model(i).Nama,'=',num2str(Nama_Model(i).Jumlah)) ); end Ok, kerangka untuk menghasilkan program Geometry Shape Counter telah siap untuk digunakan. Mulai berkreasi dan berinovasi dari sisi pemrograman.
Silahkan anda menyediakan akses dalam bentuk GUI untuk proses pengujian ini
“Yakinlah bahwa manusia diciptakan dengan berbagai bakat dan potensi untuk mengembangkan diri. Potensi tersebut harus anda asah dan realisasikan melalui proses pembelajaran dan pendewasaan diri” – COK-
Created For Lecture Material CSG4I3 Sistem Rekognisi Lecture: Tjokorda Agung Budi Wirayuda, Fakultas Informatika Universitas Telkom
12