Fungsi hash adalah sebuah pemetaan dari sebuah himpunan asal/domain (berupa teks/gambar/atau sembarang object) yang memiliki panjang/ukuran yang beragam ke suatu nilai/vektor/string yang (biasanya) memiliki panjang tetap. Hasil pemetaan-nya sering disebut sebagai nilai hash (terkadang disebut juga hash codes, digests, atau hashes).
Fungsi hash digunakan di banyak aplikasi, baik cryptography, database, sampai di data science dalam pengolahan data besar (Saya beberapa kali post tentang hal ini di Group Data Science di Facebook). Fungsi Hash juga bermacam-macam, salah satu yang paling tenar mungkin Secure Hash Algorithm 1 (SHA-1) dalam cryptographic hashing. Contoh fungsi hash lain yang akan dibahas (secara sekilas) di post ini adalah fungsi average hashing atau aHash yang akan digunakan untuk membandingkan 2 atau lebih gambar di post ini.
Konsepnya sederhana, aHash dilakukan dengan cara:
Outputnya adalah sebagai berikut:
Resize Image => Reduce Colour => Hitung Average Intensity Value => Set bits comapping value2 images kemudian dapat dihitung jaraknya dengan (misal) jarak Hamming untuk menentukan apakah 2 buah image serupa, sama, atau secara signifikan berbeda. Contoh lain hashing : Perception hashing (pHash), difference hashing (dHash), dan wavelet hashing (wHash). Contoh Aplikasi: pertama-tama mari kita install modul yang dibutuhkan (dari terminal/command prompt):
pip install imagehashMaster modul ini dapat diakses di website ini: https://github.com/JohannesBuchner/imagehash
license-nya BSD-2 yang mengizinkan penggunaan untuk komersil (sehingga ok juga untuk penelitian).
Kita akan menggunakan 4 images berikut untuk percobaan kita:
from PIL import Image import imagehash path = 'C:/Temp/' images = ['poster.jpg','poster_Small_mod.jpg', 'poster_Med_mod.jpg','kittens.jpg'] images = [path+f for f in images] hash1 = imagehash.average_hash(Image.open(images[0])) print('hash1 value = ',hash1) hash2 = imagehash.average_hash(Image.open(images[1])) print('hash2 value = ',hash2) print('Logical equality = ', hash1 == hash2) print('Difference Between Small Modified Images= ', abs(hash1 - hash2)) hash3 = imagehash.average_hash(Image.open(images[2])) print('Difference Between Medium-Large Modified Images= ', abs(hash1 - hash3)) hash4 = imagehash.average_hash(Image.open(images[3])) print('Difference Between Unrelated Images= ', abs(hash1 - hash4))
hash1 value = 80d39fbdbdbdfd00 hash2 value = 80d39fbdbdbdfd80 Logical equality = False Difference Between Small Modified Images= 1 Difference Between Medium-Large Modified Images= 19 Difference Between Unrelated Images= 25Terlihat ternyata, kita bisa dengan mudah mendeteksi duplikat, small-medium modification, hingga membandingkan 2 image yang berbeda. Tentu saja pembahasan tentang image hashing jauh lebih kompleks dan rumit, namun semoga post ini bisa menjadi pengantar singkat tentang image hashing dan aplikasinya di SMA. Silahkan share jika sekiranya bermanfaat, like kalau emang suka, dan kalem ajah kalau ndak ... :)
Cheers,
</TES>®
Tidak ada komentar:
Posting Komentar
Relevant & Respectful Comments Only.