Ho giocato con la creazione di mosaici di immagini. Il mio script prende un gran numero di immagini, le ridimensiona fino alle dimensioni della miniatura e le utilizza come tessere per approssimare un'immagine di destinazione.
L'approccio è in realtà abbastanza piacevole:
Calcolol'errorequadraticomedioperognipolliceinogniposizionedelriquadro.
All'iniziohousatosolounposizionamentogoloso:mettiilpolliceconilminimoerroresulriquadrochemegliosiadatta,epoiilprossimoecosìvia.
Ilproblemaconavidièchetilasciaallafineposizionareipollicipiùdiversisulletesseremenopopolari,indipendentementedalfattochecorrispondanoomeno.Mostroesempiqui:
Quindi faccio uno scambio casuale fino a quando lo script non viene interrotto. I risultati sono abbastanza OK.
Uno scambio casuale di due tessere non è sempre un miglioramento, ma a volte una rotazione di tre o più tessere porta a un miglioramento globale, ovvero A <-> B
potrebbe non migliorare, ma A -> B -> C -> A
1
può ..
Per questo motivo, dopo aver scelto due tessere casuali e aver scoperto che non migliorano, scelgo un gruppo di tessere per valutare se possono essere la terza tessera in tale rotazione. Non esploro se una serie di quattro tessere può essere ruotata proficuamente, e così via; sarebbe presto molto costoso.
Ma questo richiede tempo .. Un sacco di tempo!
Esiste un approccio migliore e più rapido?
Aggiornamento bounty
Ho testato varie implementazioni e collegamenti Python del Metodo ungherese .
Di gran lunga il più veloce è stato il link
La mia impressione è che questo approssima la risposta ottimale; quando si esegue un'immagine di prova, tutte le altre librerie sono d'accordo sul risultato ma questo kuhnMunkres.py, pur essendo di ordine di grandezza più veloce, è diventato molto molto molto vicino al punteggio concordato dalle altre implementazioni.
La velocità è molto dipendente dai dati; La Monna Lisa si è precipitata attraverso kuhnMunkres.py in 13 minuti, ma il Parakeet Scarlet Chested ha impiegato 16 minuti.
I risultati erano più o meno gli scambi e le rotazioni casuali per il Parrocchetto:
(kuhnMunkres.py a sinistra, swap casuali a destra; immagine originale per il confronto )
Tuttavia, per l'immagine della Mona Lisa con cui ho provato, i risultati sono stati notevolmente migliorati e lei ha effettivamente mostrato il suo "sorriso" attraverso:
(kuhnMunkres.py a sinistra, swap casuali a destra)