Görüntü mozaikleri yapmakla oynuyorum. Betiğim çok sayıda resim alır, küçük resim boyutuna ölçeklendirir ve ardından bir hedef görüntüye yaklaşmak için bunları karo olarak kullanır.
Yaklaşım aslında oldukça hoş:
Her karo konumundaki her başparmak için ortalama kare hatasını hesaplıyorum.
İlk başta sadece açgözlü bir yerleşim kullandım: başparmağın en uygun olduğu kiremit üzerinde en az hatayı ve sonra bir sonraki ve benzeri.
Açgözlü problem, en yakın zamanda en az popüler karolara en yakın başparmakları yerleştirmenize izin verir; Burada örnekleri gösteriyorum: http://williamedwardscoder.tumblr.com/post/84505278488/making-image-mosaics
Bu yüzden komut dosyası kesilene kadar rastgele takaslar yaparım. Sonuçlar gayet iyi.
İki karonun rastgele değiştirilmesi her zaman bir gelişme değildir, ancak bazen üç veya daha fazla karonun dönüşü küresel bir iyileşme ile sonuçlanır, yani A <-> B
iyileşmeyebilir, ancak A -> B -> C -> A
1
..
Bu nedenle, iki rastgele kiremit seçtikten ve gelişmediklerini keşfettikten sonra, böyle bir rotasyonda üçüncü kiremit olup olmadıklarını değerlendirmek için bir demet fayans seçiyorum. Herhangi bir dört kiremit kümesinin karlı bir şekilde döndürülüp döndürülemeyeceğini keşfetmiyorum vb. bu çok pahalı gerçek olurdu.
Ama bu zaman alıyor .. Çok zaman!
Daha iyi ve daha hızlı bir yaklaşım var mı?
Ödül Güncellemesi
Macar Yöntemi'nin çeşitli Python uygulamalarını ve bağlantılarını test ettim .
Şimdiye kadar en hızlısı saf Python idi https://github.com/xtof-durr/makeSimple/blob/master/Munkres/kuhnMunkres.py
Benim önsezim bunun en uygun cevaba yaklaşması; bir test görüntüsü üzerinde çalıştırıldığında, diğer tüm kütüphaneler sonuç üzerinde anlaştılar, ancak bu kuhnMunkres.py, büyüklük siparişleri daha hızlı olurken, diğer uygulamaların üzerinde anlaştığı puana çok yaklaştı.
Hız çok verilere bağlıdır; Mona Lisa 13 dakikada kuhnMunkres.py'ye koştu, ancak Scarlet Chested Parakeet 16 dakika sürdü.
Sonuçlar Parakeet için rastgele takaslar ve rotasyonlarla aynıydı:
(kuhnMunkres.py solda, rastgele takaslar; karşılaştırma için orijinal görüntü )
Bununla birlikte, test ettiğim Mona Lisa görüntüsü için, sonuçlar belirgin şekilde iyileştirildi ve aslında tanımlanmış 'gülümsemesi' parladı:
(kuhnMunkres.py solda, rastgele takaslar sağda)