Saya telah bermain dengan membuat mosaik gambar. Script saya mengambil sejumlah besar gambar, mengecilkannya ke ukuran thumbnail dan kemudian menggunakannya sebagai petak untuk memperkirakan gambar target.
Pendekatannya sebenarnya cukup menyenangkan:
Saya menghitung galat kuadrat rata-rata untuk setiap ibu jari di setiap posisi ubin.
Pada awalnya saya hanya menggunakan penempatan serakah: menempatkan ibu jari dengan kesalahan paling sedikit pada ubin yang paling cocok, dan kemudian yang berikutnya dan seterusnya.
Masalahnya dengan serakah adalah pada akhirnya Anda menempatkan ibu jari yang paling berbeda pada ubin yang paling tidak populer, apakah cocok atau tidak. Saya tunjukkan contoh di sini: http://williamedwardscoder.tumblr.com/post/84505278488/making-image-mosaics
Jadi saya kemudian melakukan swap acak sampai skrip terputus. Hasilnya cukup oke.
Pertukaran acak dua ubin tidak selalu merupakan peningkatan, tetapi terkadang rotasi tiga atau lebih ubin menghasilkan peningkatan global yaitu A <-> B
mungkin tidak membaik, tetapi A -> B -> C -> A
1
mungkin ..
Untuk alasan ini, setelah memilih dua ubin acak dan menemukan mereka tidak membaik, saya memilih sekelompok ubin untuk mengevaluasi apakah mereka bisa menjadi ubin ketiga dalam rotasi seperti itu. Saya tidak mengeksplorasi apakah set empat ubin dapat diputar menguntungkan, dan sebagainya; itu akan menjadi super mahal segera.
Tapi ini butuh waktu .. Banyak waktu!
Apakah ada pendekatan yang lebih baik dan lebih cepat?
Pembaruan hadiah
Saya menguji berbagai implementasi Python dan binding dari Metode Hungaria .
Sejauh ini yang tercepat adalah Python murni https://github.com/xtof-durr/makeSimple/blob/master/Munkres/kuhnMunkres.py
Firasat saya adalah bahwa ini mendekati jawaban optimal; ketika dijalankan pada gambar uji, semua perpustakaan lain menyetujui hasil tetapi ini kuhnMunkres.py, sementara menjadi pesanan besarnya lebih cepat, hanya menjadi sangat sangat dekat dengan skor implementasi yang disepakati.
Kecepatan sangat bergantung pada data; Mona Lisa bergegas melewati kuhnMunkres.py dalam 13 menit, tetapi Parkit Scarlet Chested membutuhkan waktu 16 menit.
Hasilnya hampir sama dengan swap dan rotasi acak untuk parkit:
(kuhnMunkres.py di sebelah kiri, swap acak di sebelah kanan; gambar asli untuk perbandingan )
Namun, untuk gambar Mona Lisa yang saya uji, hasilnya terlihat lebih baik dan dia benar-benar membuat 'senyuman' definisinya bersinar melalui:
(kuhnMunkres.py di sebelah kiri, swap acak di sebelah kanan)