छवियों को कुंद करें


15

परिचय

तेज किनारों हैं, स्पष्ट रूप से, सिर्फ सादा खतरनाक तो, इनपुट के रूप में एक PNG दिया, नीचे वर्णित विधि का उपयोग करके छवि को धुंधला करें और उन शापित तीखे किनारों को कुंद करें।

तरीका

प्रत्येक पिक्सेल का RGB मान प्राप्त करने के लिए, निम्नलिखित तीन समीकरणों का उपयोग करें:

आर=1.5×Σ=1nआर2n
जी=1.5×Σ=1nजी2n
बी=1.5×Σ=1nबी2n

जहाँ समीपवर्ती पिक्सेल के प्रत्येक के लाल मानों का योग है। का मान आसन्न पिक्सल (जैसे, एक कोने पिक्सेल एक होगा की संख्या है , 3 का मान, जबकि छवि के केंद्र के चारों ओर एक पिक्सेल एक होगा 8 का मूल्य)।Σ=1nआर2nnn

एक आसन्न पिक्सेल एक पिक्सेल है जो सभी दिशाओं (मूल, दाएँ, ऊपर, नीचे और सभी विकर्णों पर) में मूल पिक्सेल से 1 पिक्सेल दूर है।

उदाहरण के लिए, निम्नलिखित 3 x 1 छवि में:

मध्य पिक्सेल का धुंधला RGB मान होगा:

आर=1.5*(02+02)2=0
जी=1.5*(02+2552)2=220.836=221
बी=1.5*(2552+02)2=220.836=221

जहां किसी भी दशमलव आउटपुट को निकटतम इकाई में गोल किया जाता है। आपको केवल परिणाम को मंजिल नहीं देना चाहिए।

इसलिए, मध्य पिक्सेल रंग (0, 221, 221), या होगा:

छवि में परिणाम:

आपको छवि में प्रत्येक पिक्सेल के लिए इस प्रक्रिया को दोहराना चाहिए। (ध्यान दें कि आप मूल पिक्सेल के साथ ऐसा करते हैं और संशोधित पिक्सेल नहीं। मूल रूप से, आपको मूल छवि को अधिलेखित नहीं करना चाहिए, और इसे नई, धुंधली छवि से पूरी तरह से अलग रखना चाहिए )।

यदि आप 255 से अधिक होने के लिए किसी भी मान की गणना करते हैं, तो मान लें कि इसका मान 255 है (यानी, 374 का मान 255 पर सेट किया जाएगा)।

परिणामी आउटपुट एक अलग पीएनजी छवि होना चाहिए (आप इसे जो चाहें नाम दे सकते हैं)।

उदाहरण

सुपर मारियो

मूल:

धुंधली:

बिसात

मूल:

धुंधली:

क्रिस्प्स

मूल

धुंधला

अब इतना कुरकुरा नहीं है

अमेरिकन गोथिक

मूल:

धुंधली:

बड़ी छवियों पर धब्बा देखने के लिए, धुंधली छवि पर फिर से कार्यक्रम चलाना सबसे अच्छा है:

चुनौती

किसी दिए गए PNG छवि को धुंधला करने के लिए सबसे छोटा कोड।

आप छवि प्रसंस्करण पुस्तकालयों (जैसे पीआईएल) का उपयोग कर सकते हैं लेकिन आपको अंतर्निहित धुंधला कार्यों (गणितज्ञ, मैं आपको देख रहा हूं) का उपयोग नहीं करना चाहिए।

ध्यान दें

जैसा कि @orlp नीचे कहता है:

रिकॉर्ड के लिए, (मेरी जानकारी के लिए) यह एक मानक धुंधला विधि नहीं है। यह चुनौती शैक्षिक संसाधन नहीं है।


मैं वास्तव में उस स्केलिंग से खुश नहीं हूं। nहर में दिखना चाहिए।
कार्ल नेप

मैंने कुछ अलग सोचा जब मैंने "ब्लंट" देखा: पी।
अदनान

3
रिकॉर्ड के लिए, (मेरी जानकारी के लिए) यह एक मानक धुंधला विधि नहीं है। यह चुनौती शैक्षिक संसाधन नहीं है।
orlp

यदि आपके पास 8 सफ़ेद पिक्सेल (सभी rgb (255,255,255)) से घिरा एक सफेद पिक्सेल था, तो धुंधला पिक्सेल rgb (312,312,312) होगा। क्या हम केवल [0,255] श्रेणी में मूल्यों को जकड़ने वाले हैं?
kamoroso94

1
@ kamoroso94 1: हां, मान लें कि 255 से अधिक कोई भी संख्या 255 है। 2: उदाहरण छवि को 3 x 1 छवि का प्रतिनिधित्व करना है।
बीटा डेके

जवाबों:


5

पायथन, 354 313 बाइट्स

सबसे अच्छा नहीं, लेकिन हे ...

1 लेवल इंडेंटेशन के लिए स्पेस का उपयोग करना, 2 लेवल के लिए टैब, फिर टैब + स्पेस और टैब + टैब

import Image as I
A=I.open(raw_input())
w,h=A.size
B=I.new('RGB',(w,h))
s=[-1,1,0]
r=range
for x in r(w):
 for y in r(h):
    P=[]
    for d in s:
     for e in s:
        try:P+=[A.load()[x+e,y+d]]
        except:0
    P.pop()
    B.load()[x,y]=tuple(min(int(.5+(1.5*sum([v*v for v in t])/len(P))**.5),255)for t in zip(*P))
B.save("b.jpg")
  • Edit1: बीटा क्षय के लिए धन्यवाद के math.sqrt()साथ प्रतिस्थापित()**.5
  • Edit2: minक्लैंपिंग के लिए उपयोग करना (बहुत बचत करना!) और Loovjo के 0लिए passधन्यवाद
  • Edit3: 5 बाइट बचाने के +=[]लिए.append()
  • Edit4: sस्टैंसिल के लिए वैरिएबल का उपयोग करना

1
निश्चित रूप n**0.5से कम है import math;math.sqrt(n)? क्या बाद का कोई कारण है?
बीटा डेके

हाँ, यह है, कोई कारण नहीं है। मैं तो भूल ही गया।
कार्ल नैप

2
v if v<256 else 255को छोटा किया जा सकता हैmin(v,255)
Loovjo

तुम भी passसाथ बदल सकते हैं0
Loovjo

आपको यह बताने की आवश्यकता है कि आप किस छवि लाइब्रेरी का उपयोग कर रहे हैं। यदि आप PIL / तकिया का उपयोग कर रहे हैं (और ऐसा लगता है कि आप जैसे हैं), शीर्ष आयात विवरण को पढ़ना चाहिए from PIL import Image as I
मीगो

0

MATLAB, 130 बाइट्स

एक इमेज को इनपुट के रूप में लेता है और आउटपुट को सेव करता है b.png

i=double(input(''));m=ones(3);m(5)=0;k=@(x)imfilter(x,m);imwrite(uint8(round((1.5*k(double(i.^2))./k(i(:,:,1)*0+1)).^.5)),'b.png')
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.