Swanilai (Eigenvalue) dan Pengenalan Wajah
Taqabbalallahu minna wa minkum, minal aidzin wal faidzin! Akhirnya kita telah melewati 30 hari puasa Ramadhan 1433 Hijriah. Bagaimana Ramadhan kali ini pembaca ? Semoga amal ibadah kita yang telah lalu diridhai oleh Allah SWT. :-) Fian ceritanya mau mohon maaf lahir bathin dahulu, jikalau ada salah-salah segala macam :'( Maafin ya ...
Sekarang Fian ceritanya mau bahas mengenai swanilai (eigenvalue) dan perannya dalam pengenalan wajah. Pembaca pasti sudah tahu kan teknologi pengenalan wajah di beberapa aplikasi atau situs jejaring sosial? Nah teknik pengenalan wajah ini dapat terlaksana diantaranya dengan menggunakan swanilai dari matriks-matriks yang berisi data gambar wajah.
Sebelum kita mengetahui swanilai dari suatu gambar, kita perlu memiliki database gambar-gambar wajah. Kemudian, gambar-gambar wajah di database ini dibaca lalu diubah menjadi gambar monokrom secara otomatis (menggunakan MATLAB, Octave, atau skrip yang kita buat sendiri). Gambar monokrom ini memiliki nilai pixel antara 0 hingga 1, 0 = putih dan 1 = hitam. Kemudian nilai-nilai pixel setiap gambar disatukan dalam suatu matrix n x m dengan n merupakan jumlah keseluruhan piksel dalam gambar dan m merupakan banyaknya gambar di database. Nilai pixel dari satu gambar dimampatkan dalam 1 kolom dengan n baris.
Langkah selanjutnya adalah mengetahui rata-rata dari seluruh gambar wajah di database, dan simpangan dari setiap gambar wajah tersebut. Rata-rata? Simpangan? Begini, kita perlu mengasumsikan bahwa wajah manusia di seluruh dunia ini diciptakan Tuhan dari sebuah bentuk dasar wajah. Dari bentuk dasar ini Tuhan kemudian mengukir bentuk mata, mulut, hidung, dan rambut dengan kreativitasNya, sehingga jadilah wajah kita saat ini :-P. Bentuk dasar wajah dapat diasumsikan sebagai rata-rata gambar wajah, dan cara Dia mengukir wajah kita dapat diasumsikan sebagai caraNya membuat deviasi (simpangan) dari rata-rata tersebut.
Andaikan matriks U merupakan isi folder database gambar, X merupakan gambarnya, dan x merupakan piksel dari gambar tersebut, \[{\bf{U}} = \left[ {\begin{array}{*{20}{c}} {{{\bf{X}}_{\bf{1}}}}\\ {{{\bf{X}}_{\bf{2}}}}\\ \vdots \\ {{{\bf{X}}_{\bf{n}}}} \end{array}} \right] = \left[ {\begin{array}{*{20}{c}} {{x_{11}}}&{{x_{12}}}& \cdots &{{x_{1m}}}\\ {{x_{21}}}&{{x_{22}}}& \cdots &{{x_{2m}}}\\ \ldots & \ldots & \ldots & \ldots \\ {{x_{n1}}}&{{x_{n2}}}& \ldots &{{x_{nm}}} \end{array}} \right]\] Maka gambar rata-rata μ dapat dicari dengan cara berikut. \[{\bf{\mu }} = \left[ {\begin{array}{*{20}{c}} {{\mu _1}}\\ {{\mu _2}}\\ \vdots \\ {{\mu _m}} \end{array}} \right] = \left[ {\begin{array}{*{20}{c}} {\frac{1}{n}\sum\limits_{i = 1}^n {{x_{i1}}} }\\ {\frac{1}{n}\sum\limits_{i = 1}^n {{x_{i2}}} }\\ \vdots \\ {\frac{1}{n}\sum\limits_{i = 1}^n {{x_{im}}} } \end{array}} \right]\] Simpangan σ dari setiap gambar:
\[{\bf{\sigma }} = \left[ {\begin{array}{*{20}{c}} {{{\bf{\sigma }}_{\bf{1}}}}\\ {{{\bf{\sigma }}_{\bf{2}}}}\\ \vdots \\ {{{\bf{\sigma }}_{\bf{n}}}} \end{array}} \right] = \left[ {\begin{array}{*{20}{c}} {\left( {{x_{11}} - {\mu _1}} \right)}&{\left( {{x_{12}} - {\mu _2}} \right)}& \cdots &{\left( {{x_{1m}} - {\mu _m}} \right)}\\ {\left( {{x_{21}} - {\mu _1}} \right)}&{\left( {{x_{22}} - {\mu _2}} \right)}& \cdots &{\left( {{x_{2m}} - {\mu _m}} \right)}\\ \ldots & \ldots & \ldots & \ldots \\ {\left( {{x_{n1}} - {\mu _1}} \right)}&{\left( {{x_{n2}} - {\mu _2}} \right)}& \ldots &{\left( {{x_{nm}} - {\mu _m}} \right)} \end{array}} \right]\] Setelah mengetahui rata-rata dan simpangan dari data gambar wajah, kita perlu mengetahui kovarians dari data simpangan. Kovarians merupakan suatu angka yang menunjukkan seberapa kuat dua variabel berhubungan, dalam hal ini adalah seberapa kuat hubungan antara gambar wajah a dan b di database kita. Hubungan terkuat dimiliki gambar wajah yang sama persis, misalnya antar gambar wajah 1 dengan gambar wajah 1 (you don't say? ). Perumusan kovarians antara gambar-gambar wajah di database dilakukan dengan cara mengalikan transpose matriks simpangan dengan matriks simpangan itu sendiri: \[{\bf{S = }}{{\bf{\sigma }}^{\bf{T}}}{\bf{*\sigma }}\] Setelah mengetahui kovarians, saatnya kita mengetahui swanilai dan juga swavektor (eigenvektor) dari gambar-gambar wajah di database. Swanilai dan swavektor ini diketahui melalui data kovarians. Misalkan matriks kovarians diandaikan S, matriks V merupakan matriks swavektor dan matriks D merupakan matriks swanilai, maka hubungan antara ketiganya dapat dijelaskan sebagai berikut.
S*V = V*D.
Kemudian, kita membentuk matriks swamuka F, dengan cara mengalikan matriks swavektor dengan matriks simpangan (σ) dari setiap gambar wajah. Matriks swamuka ini selanjutnya bisa digunakan untuk pengenalan wajah.
Sekarang Fian ceritanya mau bahas mengenai swanilai (eigenvalue) dan perannya dalam pengenalan wajah. Pembaca pasti sudah tahu kan teknologi pengenalan wajah di beberapa aplikasi atau situs jejaring sosial? Nah teknik pengenalan wajah ini dapat terlaksana diantaranya dengan menggunakan swanilai dari matriks-matriks yang berisi data gambar wajah.
Sebelum kita mengetahui swanilai dari suatu gambar, kita perlu memiliki database gambar-gambar wajah. Kemudian, gambar-gambar wajah di database ini dibaca lalu diubah menjadi gambar monokrom secara otomatis (menggunakan MATLAB, Octave, atau skrip yang kita buat sendiri). Gambar monokrom ini memiliki nilai pixel antara 0 hingga 1, 0 = putih dan 1 = hitam. Kemudian nilai-nilai pixel setiap gambar disatukan dalam suatu matrix n x m dengan n merupakan jumlah keseluruhan piksel dalam gambar dan m merupakan banyaknya gambar di database. Nilai pixel dari satu gambar dimampatkan dalam 1 kolom dengan n baris.
Langkah selanjutnya adalah mengetahui rata-rata dari seluruh gambar wajah di database, dan simpangan dari setiap gambar wajah tersebut. Rata-rata? Simpangan? Begini, kita perlu mengasumsikan bahwa wajah manusia di seluruh dunia ini diciptakan Tuhan dari sebuah bentuk dasar wajah. Dari bentuk dasar ini Tuhan kemudian mengukir bentuk mata, mulut, hidung, dan rambut dengan kreativitasNya, sehingga jadilah wajah kita saat ini :-P. Bentuk dasar wajah dapat diasumsikan sebagai rata-rata gambar wajah, dan cara Dia mengukir wajah kita dapat diasumsikan sebagai caraNya membuat deviasi (simpangan) dari rata-rata tersebut.
Andaikan matriks U merupakan isi folder database gambar, X merupakan gambarnya, dan x merupakan piksel dari gambar tersebut, \[{\bf{U}} = \left[ {\begin{array}{*{20}{c}} {{{\bf{X}}_{\bf{1}}}}\\ {{{\bf{X}}_{\bf{2}}}}\\ \vdots \\ {{{\bf{X}}_{\bf{n}}}} \end{array}} \right] = \left[ {\begin{array}{*{20}{c}} {{x_{11}}}&{{x_{12}}}& \cdots &{{x_{1m}}}\\ {{x_{21}}}&{{x_{22}}}& \cdots &{{x_{2m}}}\\ \ldots & \ldots & \ldots & \ldots \\ {{x_{n1}}}&{{x_{n2}}}& \ldots &{{x_{nm}}} \end{array}} \right]\] Maka gambar rata-rata μ dapat dicari dengan cara berikut. \[{\bf{\mu }} = \left[ {\begin{array}{*{20}{c}} {{\mu _1}}\\ {{\mu _2}}\\ \vdots \\ {{\mu _m}} \end{array}} \right] = \left[ {\begin{array}{*{20}{c}} {\frac{1}{n}\sum\limits_{i = 1}^n {{x_{i1}}} }\\ {\frac{1}{n}\sum\limits_{i = 1}^n {{x_{i2}}} }\\ \vdots \\ {\frac{1}{n}\sum\limits_{i = 1}^n {{x_{im}}} } \end{array}} \right]\] Simpangan σ dari setiap gambar:
\[{\bf{\sigma }} = \left[ {\begin{array}{*{20}{c}} {{{\bf{\sigma }}_{\bf{1}}}}\\ {{{\bf{\sigma }}_{\bf{2}}}}\\ \vdots \\ {{{\bf{\sigma }}_{\bf{n}}}} \end{array}} \right] = \left[ {\begin{array}{*{20}{c}} {\left( {{x_{11}} - {\mu _1}} \right)}&{\left( {{x_{12}} - {\mu _2}} \right)}& \cdots &{\left( {{x_{1m}} - {\mu _m}} \right)}\\ {\left( {{x_{21}} - {\mu _1}} \right)}&{\left( {{x_{22}} - {\mu _2}} \right)}& \cdots &{\left( {{x_{2m}} - {\mu _m}} \right)}\\ \ldots & \ldots & \ldots & \ldots \\ {\left( {{x_{n1}} - {\mu _1}} \right)}&{\left( {{x_{n2}} - {\mu _2}} \right)}& \ldots &{\left( {{x_{nm}} - {\mu _m}} \right)} \end{array}} \right]\] Setelah mengetahui rata-rata dan simpangan dari data gambar wajah, kita perlu mengetahui kovarians dari data simpangan. Kovarians merupakan suatu angka yang menunjukkan seberapa kuat dua variabel berhubungan, dalam hal ini adalah seberapa kuat hubungan antara gambar wajah a dan b di database kita. Hubungan terkuat dimiliki gambar wajah yang sama persis, misalnya antar gambar wajah 1 dengan gambar wajah 1 (you don't say? ). Perumusan kovarians antara gambar-gambar wajah di database dilakukan dengan cara mengalikan transpose matriks simpangan dengan matriks simpangan itu sendiri: \[{\bf{S = }}{{\bf{\sigma }}^{\bf{T}}}{\bf{*\sigma }}\] Setelah mengetahui kovarians, saatnya kita mengetahui swanilai dan juga swavektor (eigenvektor) dari gambar-gambar wajah di database. Swanilai dan swavektor ini diketahui melalui data kovarians. Misalkan matriks kovarians diandaikan S, matriks V merupakan matriks swavektor dan matriks D merupakan matriks swanilai, maka hubungan antara ketiganya dapat dijelaskan sebagai berikut.
S*V = V*D.
Kemudian, kita membentuk matriks swamuka F, dengan cara mengalikan matriks swavektor dengan matriks simpangan (σ) dari setiap gambar wajah. Matriks swamuka ini selanjutnya bisa digunakan untuk pengenalan wajah.
PENGENALAN WAJAH DENGAN MATRIKS SWAMUKA
Matriks swamuka F, agar dapat digunakan untuk pengenalan wajah, perlu diproyeksikan dahulu ke matriks simpangan σ. Hasil proyeksi matriks swamuka F ke matriks simpangan σ, F'*σ, kita namai matriks P1. Matriks P1 memiliki komponen sebanyak n x n dengan n adalah banyaknya gambar di database. Sebuah gambar test kemudian dimasukkan, dihitung simpangannya dengan rata-rata data gambar di database, lalu matriks swamuka F tadi diproyeksikan ke matriks simpangan gambar test, menghasilkan matriks P2 yang memiliki komponen sebanyak n x 1. Matriks P2 dihitung selisihnya dengan matriks P1 per kolom. Setelah dihitung selisihnya, kemudian dihitung resultan dari data selisih tersebut kolom per kolom. Resultan paling kecil pada kolom ke-n menunjukkan bahwa gambar test tersebut sesuai pada gambar ke-n di database.
subhanallah
BalasHapusalhamdulillah :-)
BalasHapuswah mumet haha
BalasHapussumpah ane gak dong...
BalasHapusKami juga mempunyai artikel yang terkait dengan pengenalan wajah, bisa di download disini:
BalasHapushttp://repository.gunadarma.ac.id/bitstream/123456789/2817/1/52.pdf
semoga bermanfaat :D
Terimakasih lho mbak Nurul, cukup bermanfaat artikelnya. Dalam pengenalan wajah, hal yang menarik adalah bagaimana ketika teknik pengenalan tersebut diaplikasikan pada gambar-gambar yang tidak ideal, misal warna jilbab yang diganti-ganti, potongan rambut yang berubah, atau aksesoris muka yang dipakai.... Selama ini teknik swamuka cukup bagus dalam hal tersebut. Swamuka akan gagal jika muka menghadap arah lain dan gambar terlampau terang/gelap. :-D
BalasHapus