मैंने शीर्ष स्टैक ओवरफ्लो उपयोगकर्ताओं के अवतार से 2025 हेडशॉट्स का एक मोज़ेक संकलित किया है ।
(इसे पूर्ण आकार में देखने के लिए चित्र पर क्लिक करें।)
आपका कार्य एक एल्गोरिथ्म लिखना है जो कि इस 45 × 45 ग्रिड से 48 × 48 पिक्सेल अवतारों का उपयोग करके किसी अन्य छवि का एक सटीक फोटोमेक बना देगा।
परीक्षण छवियाँ
यहाँ परीक्षण चित्र हैं। पहला, ज़ाहिर है, एक प्रकाश बल्ब!
(वे यहाँ पूर्ण आकार नहीं कर रहे हैं। पूर्ण आकार में इसे देखने के लिए एक छवि पर क्लिक करें। आधा आकार संस्करणों के लिए उपलब्ध हैं चुंबन , रविवार की दोपहर ... , स्टीव जॉब्स , और क्षेत्रों ।)
सभी के लिए विकिपीडिया के लिए धन्यवाद, लेकिन फिर से देखा गया।
पूर्ण आकार के इन चित्रों में सभी आयाम 48 से विभाज्य हैं। बड़े लोगों को JPEG होना चाहिए ताकि वे अपलोड करने के लिए पर्याप्त संकुचित हो सकें।
स्कोरिंग
यह एक लोकप्रियता प्रतियोगिता है। मोज़ाइक के साथ प्रस्तुत करना जो मूल छवियों को सबसे सटीक रूप से चित्रित करता है, को वोट दिया जाना चाहिए। मैं एक या दो हफ्ते में सबसे ज्यादा वोट देने वाले जवाब को स्वीकार करूंगा।
नियम
आपका फोटोमोसाक्स पूरी तरह से अनलॉक्ड 48 × 48 पिक्सेल अवतारों से बना होना चाहिए जो ऊपर मोज़ेक से लिया गया है, एक ग्रिड में व्यवस्थित है।
आप मोज़ेक में अवतार का पुन: उपयोग कर सकते हैं। (बड़े परीक्षण छवियों के लिए वास्तव में आपको करना होगा।)
अपना आउटपुट दिखाएं, लेकिन ध्यान रखें कि परीक्षण छवियां बहुत बड़ी हैं, और StackExchange केवल 2MB तक की छवियों को पोस्ट करने की अनुमति देता है । इसलिए अपनी छवियों को संपीड़ित करें या उन्हें कहीं और होस्ट करें और यहां छोटे संस्करण डालें।
विजेता की पुष्टि करने के लिए आपको अपने प्रकाश बल्ब या गोले मोज़ाइक के पीएनजी संस्करण प्रदान करने होंगे। ऐसा इसलिए है कि मैं उन्हें (नीचे देखें) सत्यापित कर सकता हूं ताकि यह सुनिश्चित किया जा सके कि मोसाद को बेहतर बनाने के लिए आप अतिरिक्त रंगों को नहीं जोड़ रहे हैं।
सत्यापनकर्ता
यह पायथन लिपि का उपयोग यह जांचने के लिए किया जा सकता है कि क्या एक पूरा मोज़ेक वास्तव में अनलक्ड अवतारों का उपयोग करता है। बस सेट toValidate
और allTiles
। यह JPEGs या अन्य हानिपूर्ण प्रारूपों के लिए काम करने की संभावना नहीं है क्योंकि यह बिल्कुल चीजों की तुलना करता है, पिक्सेल के लिए पिक्सेल।
from PIL import Image, ImageChops
toValidate = 'test.png' #test.png is the mosaic to validate
allTiles = 'avatars.png' #avatars.png is the grid of 2025 48x48 avatars
def equal(img1, img2):
return ImageChops.difference(img1, img2).getbbox() is None
def getTiles(mosaic, (w, h)):
tiles = {}
for i in range(mosaic.size[0] / w):
for j in range(mosaic.size[1] / h):
x, y = i * w, j * h
tiles[(i, j)] = mosaic.crop((x, y, x + w, y + h))
return tiles
def validateMosaic(mosaic, allTiles, tileSize):
w, h = tileSize
if mosaic.size[0] % w != 0 or mosaic.size[1] % h != 0:
print 'Tiles do not fit mosaic.'
elif allTiles.size[0] % w != 0 or allTiles.size[1] % h != 0:
print 'Tiles do not fit allTiles.'
else:
pool = getTiles(allTiles, tileSize)
tiles = getTiles(mosaic, tileSize)
matches = lambda tile: equal(tiles[pos], tile)
success = True
for pos in tiles:
if not any(map(matches, pool.values())):
print 'Tile in row %s, column %s was not found in allTiles.' % (pos[1] + 1, pos[0] + 1)
success = False
if success:
print 'Mosaic is valid.'
return
print 'MOSAIC IS INVALID!'
validateMosaic(Image.open(toValidate).convert('RGB'), Image.open(allTiles).convert('RGB'), (48, 48))
भाग्य आप सभी का साथ दे! मैं परिणाम देखने के लिए इंतजार नहीं कर सकता।
नोट: मुझे पता है कि फोटोमैसिक एल्गोरिदम ऑनलाइन खोजना आसान है, लेकिन वे अभी तक इस साइट पर नहीं हैं। मैं वास्तव में उम्मीद कर रहा हूं कि हम सामान्य रूप से औसत प्रत्येक टाइल और प्रत्येक ग्रिड स्थान की तुलना में अधिक दिलचस्प हैं और उन्हें " एल्गोरिथ्म " से मिलाते हैं।