मैं छवि मोज़ाइक बनाने के साथ खेल रहा हूँ। मेरी स्क्रिप्ट बड़ी संख्या में छवियां लेती है, उन्हें थंबनेल आकार में नीचे ले जाती है और फिर लक्ष्य छवि को अनुमानित करने के लिए टाइल्स के रूप में उनका उपयोग करती है।
दृष्टिकोण वास्तव में काफी मनभावन है:
मैं हर टाइल की स्थिति में प्रत्येक अंगूठे के लिए माध्य वर्ग त्रुटि की गणना करता हूं।
सबसे पहले मैंने सिर्फ एक लालची प्लेसमेंट का उपयोग किया: अंगूठे को उस टाइल पर कम से कम त्रुटि के साथ रखा जो इसे सबसे अच्छी तरह से फिट बैठता है, और फिर अगले और इसी तरह।
लालची के साथ समस्या यह है कि यह आपको अंततः कम से कम लोकप्रिय टाइलों पर सबसे अलग अंगूठे रखने की अनुमति देता है, चाहे वे बारीकी से मेल खाते हों या नहीं। मैं यहां उदाहरण दिखाता हूं: http://williamedwardscoder.tumblr.com/post/84505278488/making-image-mosaics
इसलिए मैं तब स्क्रिप्ट को बाधित होने तक यादृच्छिक स्वैप करता हूं। परिणाम काफी ठीक हैं।
दो टाइलों का एक यादृच्छिक स्वैप हमेशा एक सुधार नहीं होता है, लेकिन कभी-कभी तीन या अधिक टाइलों के रोटेशन के परिणामस्वरूप वैश्विक सुधार होता है A <-> B
, लेकिन A -> B -> C -> A
1
इसमें सुधार नहीं हो सकता है।
इस कारण से, दो यादृच्छिक टाइल चुनने और उन्हें सुधारने की खोज नहीं करने के बाद, मैं मूल्यांकन करने के लिए टाइल्स का एक गुच्छा उठाता हूं कि क्या वे इस तरह के रोटेशन में तीसरी टाइल हो सकते हैं। मुझे पता नहीं है कि चार टाइलों के किसी भी सेट को लाभप्रद रूप से घुमाया जा सकता है, और इसी तरह; यह जल्द ही सुपर महंगा होगा।
लेकिन इसमें समय लगता है .. बहुत समय!
क्या एक बेहतर और तेज दृष्टिकोण है?
बाउंटी अपडेट
मैंने हंगेरियन विधि के विभिन्न पायथन कार्यान्वयन और बाइंडिंग का परीक्षण किया ।
अब तक सबसे तेज शुद्ध-पायथन https://github.com/xtof-durr/makeSimple/blob/master/Munkres/kuhnMunkres.py था
मेरा कूबड़ यह है कि यह इष्टतम उत्तर का अनुमान लगाता है; जब एक परीक्षण छवि पर चलाया जाता है, तो अन्य सभी पुस्तकालय परिणाम पर सहमत होते हैं लेकिन यह kuhnMunkres.py, परिमाण के आदेशों के तेजी से होने के दौरान, केवल उस स्कोर के बहुत करीब पहुंच गया जिस पर अन्य कार्यान्वयन सहमत थे।
गति बहुत डेटा-निर्भर है; मोना लिसा 13 मिनट में kuhnMunkres.py के माध्यम से दौड़ी, लेकिन स्कारलेट Chested Parakeet को 16 मिनट लगे।
परिणाम पैराकेट के लिए यादृच्छिक स्वैप और घुमाव के समान थे:
(बाईं ओर kuhnMunkres.py, दाईं ओर यादृच्छिक स्वैप, तुलना के लिए मूल छवि )
हालाँकि, मैंने जिस मोना लिसा छवि के साथ परीक्षण किया, उसके परिणामों में काफी सुधार हुआ था और उसने वास्तव में अपनी 'मुस्कान' को परिभाषित किया था:
(बाईं ओर kuhnMunkres.py, दाईं ओर यादृच्छिक स्वैप)