यह कैसे काम करता है
अधिक विवरण कि समस्या क्या है और टूल आपकी छवि को कैसे ठीक कर रहा है।
समस्या के स्रोत को समझना
आइए उस स्थिति से शुरू करें जब सब ठीक है। और लेंस की स्थिति द्वारा "प्रकाश स्रोत" के प्रत्येक बिंदु को आपके डिवाइस के कैमरा सेंसर के एक बिंदु में केंद्रित किया जाता है। नीचे दी गई छवि ऐसी स्थिति प्रस्तुत करती है। छवि के दाईं ओर प्रकाश के एक तीक्ष्ण बिंदु के साथ काली स्क्रीन है।
"इन-फोकस" के मामले में तस्वीर लेना
अब देखते हैं कि आउट ऑफ फोकस के मामले में क्या होता है। उस स्थिति में कैमरे का लेंस गलत स्थिति में होता है और आने वाली रोशनी एक बिंदु के बजाय मुख्य बिंदु के चारों ओर फैल जाती है। छवि के दाईं ओर एक चमकते बिंदु के साथ काली स्क्रीन है। एक बिंदु के बजाय हमें वही प्रकाश चारों ओर फैला हुआ मिलता है।
"आउट-ऑफ-फोकस" के मामले में तस्वीर लेना
एक समान समस्या तब होती है जब कोई छवि गति से विकृत हो जाती है - वस्तुओं की गति या कैमरा हिलाने से। फोकस के एक बिंदु के बजाय हमें प्रकाश की एक रेखा मिलती है।
डिकनवोल्यूशन प्रक्रिया का अवलोकन
अच्छी बात यह है कि ऐसी विधियाँ मौजूद हैं, जो आउट ऑफ फोकस संस्करण से "तीक्ष्ण" छवि को पुनरुत्पादित करने में सक्षम हैं। ऐसी ही एक विधि रिचर्डसन-लूसी डिकनवोल्यूशन है। यह एक पुनरावृत्ति एल्गोरिदम है, जो छवि के मूल संस्करण को बहाल करने के लिए पॉइंट स्प्रेड फंक्शन (PSF) का उपयोग करता है। PSF क्या है? यह फ़ंक्शन बताता है कि प्रत्येक पिक्सेल कैसे विकृत है। यदि आप पिछले बिंदु को देखें तो यह ऊपर के चित्रों से "ब्लैक बैकग्राउंड इमेज" होगी।
डिकनवोल्यूशन एक फीडबैक लूप की प्रक्रिया है जो मूल छवि का "अनुमान" लगाती है और फिर कई चरणों में उस अनुमान को परिष्कृत करती है:
- 1. प्रारंभिक अनुमान: मूल छवि के मोटे अनुमान के साथ शुरू करें (अक्सर सिर्फ धुंधली छवि ही या एक सपाट ग्रे क्षेत्र)।
- 2. फॉरवर्ड प्रोजेक्शन: वर्तमान अनुमान लें और ज्ञात PSF का उपयोग करके इसे "फिर से धुंधला" करें। यह सिम्युलेट करता है कि यदि वर्तमान अनुमान सही होता तो छवि कैसी दिखनी चाहिए।
- 3. तुलना: इस पुन: धुंधले संस्करण की वास्तविक देखी गई (धुंधली) छवि से एक को दूसरे से विभाजित करके तुलना करें। यह प्रत्येक पिक्सेल के लिए एक "सुधार कारक" बनाता है।
- 4. बैक प्रोजेक्शन: उस सुधार कारक को वापस वर्तमान अनुमान पर लागू करें। यह अनिवार्य रूप से कहता है: "जिन क्षेत्रों में पुन: धुंधली छवि वास्तविक की तुलना में बहुत धुंधली थी, वहां अनुमान की चमक बढ़ाएं; जहां यह बहुत चमकीली थी, वहां इसे घटाएं।"
- 5. दोहराएं: इस अपडेट किए गए अनुमान को अगले दौर के लिए शुरुआती बिंदु के रूप में उपयोग करें। प्रत्येक पुनरावृत्ति आमतौर पर छवि को तीक्ष्ण बनाती है और अधिक विवरण बहाल करती है।
और जानें
प्रारंभिक बिंदु के लिए ब्लर आकार का अनुमान लगाना
PSF फंक्शन का प्रारंभिक अनुमान एक काफी महत्वपूर्ण कदम है। अच्छे अनुमान पूरी प्रक्रिया को तेज करते हैं। यह यहाँ कैसे किया जाता है? मैंने उसी तरीके का उपयोग किया है, जिसका उपयोग यह "पता लगाने" के लिए किया जाता है कि कोई छवि धुंधली है या नहीं: एक छवि के लैपलेसियन ट्रांसफॉर्मेशन से मानक विचलन की गणना करना।
पहले चरण में डिस्क्रीट लैपलेसियन ट्रांसफॉर्मेशन किया जाता है। यह सभी किनारों को चिह्नित करते हुए एक "ब्लैक एंड व्हाइट" छवि बनाता है। यदि छवि तीक्ष्ण (sharp) है, तो बिना किनारों वाले क्षेत्रों के बीच कई किनारे होते हैं। धुंधली छवियों के मामले में लगभग कोई तीक्ष्ण किनारे नहीं होते हैं - बल्कि एक रंग से दूसरे रंग में सुचारू संक्रमण होता है।
अगले "ब्लैक एंड व्हाइट" छवि पिक्सेल को पिक्सेल के एक सेट के रूप में पिरोया जाता है और मानक विचलन की गणना की जाती है। यह एक संख्या देता है जो बताता है कि छवि कितनी समान है। यदि मान अधिक है - इसका मतलब है कि छवि में कई तीक्ष्ण परिवर्तन हैं। यदि यह कम है तो छवि काफी समान है और बल्कि "धुंधली" है। यही तरीका कई सॉफ्टवेयरों द्वारा यह पता लगाने के लिए उपयोग किया जाता है कि छवि तीक्ष्ण है या धुंधली।
अंतिम चरण मानक विचलन के मान से मेल खाने वाला PSF फ़ंक्शन उत्पन्न करना है। यह थोड़ा कठिन था और इसके लिए कुछ प्रयोगों की आवश्यकता थी। अंत में ऐसा लगता है कि मानक विचलन के विशिष्ट मानों के लिए उचित PSF फ़ंक्शन सौंपे गए हैं। एक महत्वपूर्ण नोट: उत्पन्न PSF फ़ंक्शन गाऊसी आकार (Gaussian shape) प्राप्त करते हैं - अधिकतम चमक वाला एक एकल बिंदु और धीरे-धीरे काले रंग में कम होता जाता है। इस तरह तैयार PSF एल्गोरिदम के शुरुआती बिंदु के लिए अच्छा काम करता है।
और जानें
कुछ तकनीकी नोट्स
- GPU उपयोग - कई छवि गणनाएं काफी महंगी होती हैं, लेकिन वे कई पिक्सेल के लिए समान संचालन का उपयोग करती हैं। इसे डिवाइस ग्राफिक्स प्रोसेसिंग यूनिट का उपयोग करके आसानी से तेज किया जा सकता है। इसे ब्राउज़र में एम्बेडेड WebGL तकनीक के माध्यम से एक्सेस किया जाता है और यह gpu.js लाइब्रेरी द्वारा स्वचालित रूप से किया जाता है।
- इमेज को पढ़ना और सहेजना स्वचालित रूप से JS Canvas API द्वारा किया जाता है।
- सूचना: एक बार ऐप लोड हो जाने के बाद यह ऑफलाइन काम कर सकता है। इसलिए जब आप इमेज ड्रॉप एरिया वाला मुख्य पेज लोड करते हैं तो आप इंटरनेट कनेक्शन न होने पर भी इसका उपयोग कर सकते हैं। जब आप ऑफलाइन मोड में हों तो छवियों को संसाधित करने का प्रयास करें ;) । पूरा पेज/ऐप अभी पूरी तरह से ऑफलाइन नहीं है, लेकिन मैं ऐसा करने की योजना बना रहा हूं।