2017-02-14 25 views
8

आवेदन में, लगभग 1 बिलियन पीएनजी छवियां (आकार 1024 * 1024 और लगभग 1 एमबी प्रत्येक) हैं, इसे 1 अरब छवियों को एक विशाल छवि में संयोजित करने की आवश्यकता है, फिर आकार 1024 * 1024 एकता थंबनेल बनाता है । या शायद हमें छवियों को एक बड़े पैमाने पर गठबंधन करने की आवश्यकता नहीं है, लेकिन कंप्यूटर मेमोरी में एकता थंबनेल का उत्पादन करने के लिए बस कुछ जादू एल्गोरिदम करें? इस बीच इस प्रक्रिया को यथासंभव तेज़ी से, सेकंड में बेहतर, या कम से कम कुछ मिनटों में किया जाना चाहिए। क्या किसी के पास विचार है?एक अरब पीएनजी छवियों के लिए एकतापूर्ण थंबनेल कैसे तैयार करें?

enter image description here

+2

अमेरिका अरब ('10 ** 9') या यूरोपीय संघ अरब (' 10 ** 12')? – alk

+0

एक अरब का मतलब है, एक बड़ी मात्रा। – Suge

+0

* एकता थंबनेल * और किस उद्देश्य के लिए आपका क्या मतलब है? – user694733

उत्तर

3

ImageMagick कि कर सकते हैं:

montage -tile *.png tiled.png

आप जो भी कारण के लिए एक बाहरी सहायक का उपयोग नहीं करना चाहते हैं, तो आप अभी भी स्रोतों का उपयोग कर सकते हैं।

+0

यह मेरे परीक्षण में बड़ी मात्रा में छवियों के लिए बहुत धीमा है, कोई सुझाव? – Suge

+0

तो मशीनों के समूह पर, मोंटेज (साथ-साथ) का उपयोग करके छवियों को एक साथ समूहीकृत करने की अनुमति होगी। तो अपने लक्ष्यों को प्राप्त करने के लिए, आप सबसे पहले एनएक्सएन नौकरियों का एक सेट बनायेंगे, और उनको चलाएंगे, फिर जेनरेट किए गए मोंटेज पर, दोबारा जब तक आप एक मोंटेज के साथ नहीं छोड़े जाते हैं तब तक दोहराएं। – mksteve

9

एक अरब छवियों को एक montage प्रक्रिया में लोड करने का विचार हास्यास्पद है। आपका प्रश्न अस्पष्ट है, लेकिन आपका दृष्टिकोण यह निर्धारित करना चाहिए कि आपकी मूल छवि में प्रत्येक मूल छवि कितनी पिक्सल होगी, फिर प्रत्येक छवि से समानांतर में आवश्यक पिक्सल निकालें। फिर उन पिक्सल को अंतिम छवि में इकट्ठा करें।

convert image1.png image2.png ... -format "%[fx:mean.r],%[fx:mean.g],%[fx:mean.b]:%f\n" info: 

नमूना आउटपुट

:

तो, अगर प्रत्येक छवि अपने अंतिम छवि में एक पिक्सेल द्वारा प्रतिनिधित्व किया जाएगा, तो आप प्रत्येक छवि के मतलब जो आप इस तरह कर सकते हैं प्राप्त करने की आवश्यकता

0.423529,0.996078,0:image1.png 
0.0262457,0,0:image2.png 

आप जीएनयू के साथ समानांतर में बहुत तेजी से तो ऐसा कर सकते हैं समानांतर,

की तरह कुछ का उपयोग कर 0
find . -name \*.png -print0 | parallel -0 convert {} -format "%[fx:mean.r],%[fx:mean.g],%[fx:mean.b]:%f\n" info: 

तो फिर तुम एक अंतिम छवि बना सकते हैं और में अलग-अलग पिक्सेल डाल दिया।

स्कैनिंग भी 1,000,000 PNG फ़ाइलें कई घंटे लग जाने की संभावना है ...

आप नहीं है का कहना है कि कितना बड़ा आपकी छवियों हैं, लेकिन यदि वे प्रत्येक 1 एमबी के आदेश के हैं, और आपके पास 1,000,000,000 हैं तो आपको उन्हें पढ़ने के लिए I/O की पेटबाइट करने की आवश्यकता है, इसलिए 500 एमबी/एस अल्ट्रा-फास्ट एसएसडी के साथ भी, आप 23 दिन होंगे ।

+0

यदि टाइल छवियों को विभिन्न क्लाइंट से अपलोड किया जाएगा, तो अपलोड करने से पहले क्लाइंट पर प्रतिनिधित्व पिक्सेल का उत्पादन करना एक अच्छा विचार है, फिर सर्वर पर पिक्सल को छवि पर मिश्रित करें? क्या इस तरह से बहुत तेज होगा? – Suge

+1

उत्तर आपके पर्यावरण पर निर्भर करता है, दुर्भाग्यवश, मैं वर्तमान विवरण से समझ नहीं पा रहा हूं। यदि 1,000,000,000 ग्राहक प्रत्येक आपको एक छवि भेज रहे हैं, तो यह आपको प्रत्येक के लिए न्यूनतम आवश्यक भेजने के लिए समझ में आता है। यदि 1,000,000 छवियां प्रदान करने वाले प्रत्येक 1024 क्लाइंट हैं, तो प्रत्येक ग्राहक के लिए आपके लिए एक संपूर्ण ब्लॉक तैयार करने के लिए यह समझदारी होगी लेकिन यदि आप प्रत्येक ग्राहक केवल एक तस्वीर भेजता है तो आप ऐसा नहीं कर सकते हैं। आम तौर पर, आप जितनी अधिक मशीनें व्यक्तिगत भागों पर काम कर सकते हैं, बेहतर। –

+2

क्या मैं सम्मानपूर्वक सुझाव देता हूं कि आप अपना प्रश्न संपादित करें और इसे सुधारें ताकि लोक को उन मामलों को कवर करने और अपने समय बर्बाद करने की आवश्यकता न हो जो खराब वर्णन से उत्पन्न झूठी धारणाओं के आधार पर प्रासंगिक या उत्तर देने वाले उत्तर न हो ... –

3

यादृच्छिक-नमूनाकरण जैसे यादृच्छिक एल्गोरिदम संभव हो सकता है।

संयुक्त छवि को ध्यान में रखना इतना बड़ा है, किसी भी रैखिक एल्गोरिदम विफल हो सकता है, उच्च जटिलता विधि का उल्लेख नहीं करना।

गणना के अनुसार, हम प्रत्येक थंबनेल पिक्सेल 1000 छवि पर निर्भर कर सकते हैं। तो एक नमूना अवशिष्ट परिणाम परिणाम को प्रभावित नहीं करता है।

एल्गोरिथ्म वर्णन इस प्रकार हो सकता है:

प्रत्येक झलक पिक्सेल के लिए समन्वय, बेतरतीब ढंग से एन छवियों जो अनुरूप स्थान, और प्रत्येक छवि के नमूने एम पिक्सल और फिर उनकी औसत मूल्य की गणना करें चुनें। अन्य थंबनेल पिक्सल के लिए एक ही काम करें।

हालांकि, अगर आपकी छवियां यादृच्छिक रूप से संयुक्त हैं, तो परिणाम 0.5 मूल्यवान ग्रेस्केल छवि हो जाता है।क्योंकि केंद्रीय सीमा प्रमेय द्वारा, थंबनेल छवि पिक्सेल का अंतर शून्य होता है। तो आपने सुनिश्चित किया है कि संयुक्त थंबनेल स्वयं संरचित है।

पुनश्च: का उपयोग कर OpenCV एक अच्छा विकल्प होगा

संबंधित मुद्दे