2012-09-17 18 views
6

मैं समझने की कोशिश कर रहा हूं कि छवि आकार बदलने का काम कैसे करता है - कृपया, क्या कोई मुझे बता सकता है कि "फ़िल्टर" क्या अच्छा है?छवि का आकार बदलना: "फ़िल्टर" क्या है?

  • क्या कोई फ़िल्टर गणना करता है कि कोई स्रोत पिक्सेल गंतव्य पिक्सेल में कितना योगदान देता है?

  • "बॉक्स" और "गाऊशियन" जैसे फ़िल्टर हैं, लेकिन क्या "bicubic" नामक एक फ़िल्टर है? क्या मैं यहां दो अवधारणाओं को मिलाता हूं, एक "संकल्प फ़िल्टर" और ... है?

  • क्या दोनों upscaling और downscaling के लिए एक ही फ़िल्टर का उपयोग करना संभव है? (यह एक उदाहरण कोड देखने के लिए वास्तव में बहुत अच्छा होगा)

  • क्या यह पहले एक आयाम में छवि को खींचने के लिए वांछनीय है और फिर दूसरे में?

उत्तर

7

छवि आकार बदलने में, फ़िल्टर aliasing नामक एक घटना से बचाता है। आप एक फिल्टर के बिना आकार बदलने के लिए कोशिश करते हैं, आम तौर पर aliasing अप्रिय pixellated प्रभाव है, जो विशेष रूप से दिखाई दे रहा है जब एनिमेटेड हैं के रूप में प्रकट ...

अपने अंक का जवाब करने के लिए:

  • फिल्टर की गणना करता है कितना प्रत्येक स्रोत पिक्सेल प्रत्येक गंतव्य में योगदान देता है। आकार बदलने के लिए, आप रैखिक फ़िल्टर चाहते हैं, जो कि बहुत आसान है: फ़िल्टर को छोटी ग्रेस्केल छवि के रूप में देखा जा सकता है; प्रभावी रूप से, आप फ़िल्टर को प्रत्येक आउटपुट पिक्सेल से संबंधित किसी स्थान पर केंद्रित करते हैं, उस स्थान पर फ़िल्टर मान द्वारा प्रत्येक पास के पिक्सेल को गुणा करें, और आउटपुट पिक्सेल मान प्राप्त करने के लिए उन्हें जोड़ें।

  • ऐसे सभी फ़िल्टर "रूपांतरण फ़िल्टर" हैं, क्योंकि रूपांतरण ऊपर वर्णित ऑपरेशन के लिए गणितीय नाम है। एक "बॉक्स" फ़िल्टर सचमुच एक बॉक्स की तरह दिखता है - बॉक्स के भीतर प्रत्येक पिक्सेल को समान रूप से भारित किया जाता है, जबकि "गाऊशियन" फ़िल्टर अधिक गोलाकार ब्लब्स होते हैं, किनारे पर शून्य की ओर पंख होते हैं।

  • upscaling और downscaling के लिए सबसे महत्वपूर्ण बात यह है कि अपने फ़िल्टर के लिए आकार चुनें। संक्षेप में, आप इनपुट के आउटपुट के आधार पर अपने फ़िल्टर को स्केल करना चाहते हैं और आउटपुट में निम्नतम रिज़ॉल्यूशन है। दूसरी सबसे महत्वपूर्ण बात यह है कि खराब फ़िल्टर से बचें: "बॉक्स" फ़िल्टर वह होता है जिसे आप आमतौर पर फ़िल्टर करते समय आकार बदलने का प्रयास करते हैं; कंप्यूटर ग्राफिक्स हार्डवेयर द्वारा प्रदान किए गए "बिलीनेर" फ़िल्टर में मध्यम अपस्कलिंग उत्पन्न होती है, लेकिन डाउनस्कलिंग के लिए गलत आकार में आपूर्ति की जाती है।

  • प्रदर्शन कारणों से, छवियों को एक आयाम में स्केल करना वांछनीय है और फिर दूसरा। इसका मतलब है कि आपका फ़िल्टर बहुत तेजी से चलता है: फ़िल्टर क्षेत्र के आनुपातिक के बजाय फ़िल्टर चौड़ाई के आनुपातिक समय में। यहां चर्चा की गई सभी फ़िल्टर "अलग-अलग" हैं, जिसका अर्थ है कि आप उन्हें इस तरह लागू कर सकते हैं।

यदि आप उच्च गुणवत्ता वाला फ़िल्टर चुनते हैं, तो सटीक रूप आपके विचार से कम महत्वपूर्ण है। अच्छे फिल्टर के दो वर्ग होते हैं: "गॉसियन" जैसे सभी पॉजिटिव वाले लोग जो धुंधली तरफ होते हैं, और ऋणात्मक-लॉब वाले जैसे "लैंक्सोज़" जो तेज होते हैं, लेकिन थोड़ा बजने वाले प्रभाव पैदा कर सकते हैं। ध्यान दें कि "बाइबिक" फ़िल्टर एक श्रेणी है, जिसमें "बी-स्पलाइन" शामिल है जो सभी सकारात्मक है, और "मिशेल" और "कैटमुल-रोम" जिनमें नकारात्मक लोब हैं।

+0

बहुत बहुत धन्यवाद!मुझे लगता है कि मैं अंततः समझता हूं कि विकिपीडिया कहता है कि "[एक बाइबिक] इंटरपोलेटर समान गुणों के साथ एक संकल्प लागू करके प्राप्त किया जा सकता है"। हालांकि, आखिरी बात यह है कि मुझे अभी भी यह नहीं मिलता है कि upscaling और downscaling कार्यों के लिए ** आकार ** कैसे। मैंने कई बार देखा है कि एक फ़िल्टर ने मूल्य को हार्डकोड किया है, कहता है कि कैटमुल-रोम आकार 2 का है। विशेष रूप से क्या डाउनस्कलिंग हो जाती है, अगर मेरे पास 1000px बड़ा चित्र है और इसे 10px में आकार देना है, तो आकार 100 होना चाहिए? क्या यह प्रत्येक आउटपुट पिक्सेल के लिए "avarage" (?) 100 पिक्सल धीमा नहीं है? –

+0

आपका अनुमान सही है। Upscaling के लिए, फिल्टर पिक्सेल पिच के अनुसार आकार का आकार होना चाहिए, लेकिन डाउनस्कलिंग के लिए, फ़िल्टर आउटपुट पिक्सेल पिच के अनुसार आकार का होना चाहिए। मेरा मतलब यह था कि जब मैंने लिखा था "आप इनपुट के आउटपुट के आधार पर अपने फ़िल्टर को स्केल करना चाहते हैं और आउटपुट में सबसे कम रिज़ॉल्यूशन है"। – comingstorm

+0

और, हाँ, यह प्रति आउटपुट पिक्सेल धीमा है, लेकिन आप अपने सभी * इनपुट * पिक्सेल को संसाधित किए बिना दूर जाने की उम्मीद नहीं कर सकते हैं। – comingstorm

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