Saya memiliki lebih dari 10.000 gambar yang sekitar 2000 adalah duplikat dalam format lain (seperti dalam JPEG, PNG, GIF). Kedua angka ini meningkat setiap hari. Saya perlu menghapus duplikat itu dan untuk itu saya harus tahu cara menemukannya terlebih dahulu.
Pikiran pertama saya adalah memeriksa piksel gambar dan menemukan gambar lain yang memiliki piksel berwarna sama di koordinat yang sama. Tetapi opsi ini tidak selalu berhasil. Katakanlah saya mencari duplikat. Adapun objek yang dapat dicari saya memilih file PNG 8 bit. Ini akan menemukan semua duplikat dari gambar itu, tetapi hanya PNG 8 bit, kadang-kadang 8bit GIF dan jarang JPEG (karena saya kira algoritmik gambarnya?).
Pikiran kedua saya adalah untuk menduplikasi semua gambar itu dan mewarnai ulang mereka dalam palet dua warna yang ketat (katakanlah hitam & putih) dan melakukan pemindaian yang sama seperti yang dinyatakan di atas. Sekali lagi gambar JPEG tidak 100% mirip dengan format PNG atau GIF (alasan yang sama seperti di atas?).
Pikiran ketiga adalah untuk mengurangi persentase pada seberapa banyak gambar perlu terbiasa dan meningkatkan seberapa banyak warna dapat bervariasi, menghasilkan penghapusan gambar yang tidak diinginkan ...
Adakah pikiran?
sumber
Jawaban:
Hash perseptual mungkin jawabannya:
http://www.phash.org/
sumber
Jangan bandingkan RGB (merah, hijau, biru). Bandingkan Brightness dengan setengah bobot dan bandingkan warna / rona dengan separuh lainnya (atau 2 / 3rds vs 1/3). Hitung selisih nilai dan tergantung pada nilai 'toleransi' mereka sama atau tidak.
JPEG sangat mengompres informasi warna tetapi mencoba untuk tidak merusak nilai liminance.
sumber
Ketika saya sedang menyaring banyak gambar untuk dupes beberapa tahun yang lalu saya menemukan bahwa mengurangi semuanya menjadi 8x8 thumbnail dan kemudian menghitung skor kesamaan berdasarkan kuadrat jarak (memperlakukan tiga warna secara terpisah) antara thumbnail bekerja cukup baik. Perhatikan bahwa Anda dapat menyimpan BANYAK thumbnail 8x8 dalam memori.
Hampir semua dupes mendapat skor di bawah non-dupes, tentang satu-satunya masalah adalah beberapa gambar yang kontras sangat rendah dan keseluruhan serupa meskipun konten yang sebenarnya bervariasi (latar belakang dalam setiap kasus adalah pasir pantai.)
Ini juga efektif untuk menangkap gambar yang dupes kecuali seseorang telah mengurangi resolusi atau kualitasnya untuk memotong ukuran file.
sumber
Mungkin Anda harus menulis beberapa kode yang memindai gambar agar mirip. Anda dapat mengonversi semua foto ke format ARGB dan membandingkannya. (dalam kenangan)
Pendekatan yang mungkin bisa seperti ini: Membagi gambar dalam zona. Pindai warna dan / atau kecerahan rata-rata zona untuk membandingkan dua gambar untuk kemiripan.
Jika lebih dari mengatakan, 90% dari zona cocok, Anda memilih satu untuk pindah ke daftar kandidat penghapusan. Dengan cara ini Anda memiliki daftar kandidat. Anda dapat menggunakan rasio aspek gambar untuk mengkategorikan gambar dalam gambar horizontal dan vertikal untuk mempercepat perbandingan. dengan cara ini Anda dapat mengkompensasi algoritma lossy yang tidak mereproduksi warna piksel yang tepat. Anda menjalankan program semalam, dan di pagi hari Anda sudah selesai :) di. Net ini bisa dilakukan dengan mudah dengan dia GDI + lib.
sumber