जुन्या फोटोंमधील तपकिरी (sepia) छटा आणि कृष्णधवल (grayscale) रंगछटा एक अनोखे आकर्षण टिकवून ठेवतात, भूतकाळातील क्षण जणू गोठवून ठेवतात. तरीही, त्यामध्ये मूळ दृश्यातील सजीव रंगांची कमतरता जाणवते. कल्पना करा की या जपलेल्या आठवणींमध्ये पुन्हा रंगांचे प्राण फुंकले जात आहेत, एका फिकट कृष्णधवल पोर्ट्रेटला पूर्ण रंगात त्या व्यक्तीचे जग दाखवणाऱ्या खिडकीत रूपांतरित केले जात आहे. ही रूपांतरण प्रक्रिया, जी इमेज कलरलायझेशन (image colorization) म्हणून ओळखली जाते, तिने कलाकार आणि इतिहासकारांना दीर्घकाळ मोहित केले आहे. आज, कृत्रिम बुद्धिमत्तेतील (artificial intelligence), विशेषतः डीप लर्निंगमधील (deep learning) प्रगतीमुळे, स्वयंचलित कलरलायझेशन असे परिणाम साधत आहे जे एकेकाळी केवळ विज्ञानाच्या कथांमध्ये शक्य वाटत होते.
एका कृष्णधवल प्रतिमेत रंग भरणे हे एक आकर्षक आव्हान आहे. जेव्हा एखादी प्रतिमा कृष्णधवल केली जाते, तेव्हा मूळ रंगांची (chromatic data) बरीच माहिती नैसर्गिकरित्या नष्ट होते. केवळ प्रकाशाच्या मूल्यांवरून (luminance values) एखादा अल्गोरिदम फुलाचा, ड्रेसचा किंवा आकाशाचा खरा रंग कसा ओळखू शकेल? याचे उत्तर कृष्णधवल प्रतिमेतच दडलेल्या सूक्ष्म संकेतांमध्ये आहे: पोत (textures), आकार (shapes), संदर्भ (context) आणि प्रकाश व सावलीचा खेळ. जरी मूळ रंग तंतोतंत ओळखणे अशक्य असले (ते गुलाब खरोखर किरमिजी रंगाचे होते, की गुलाबी रंगाच्या छटेचे?), तरी ध्येय एका संभाव्य (plausible) आणि सौंदर्यदृष्ट्या पटणाऱ्या कलरलायझेशनकडे वळते. उद्देश असा आहे की मानवी निरीक्षकाला ती प्रतिमा विश्वासार्ह वाटेल, कदाचित मूळ रंगीत छायाचित्रापेक्षा वेगळी ओळखता येणार नाही.
डीप लर्निंग मॉडेल्स मोठ्या डेटासेटमधील (vast datasets) गुंतागुंतीचे नमुने (patterns) आणि सांख्यिकीय संबंध (statistical relationships) उघड करण्यात उत्कृष्ट आहेत. लाखो प्रतिमांवर या मॉडेल्सना प्रशिक्षित करून, कृष्णधवल आवृत्त्यांची त्यांच्या मूळ रंगीत आवृत्त्यांशी तुलना करून, अल्गोरिदम विशिष्ट पोत आणि संरचनांना संभाव्य रंगांशी जोडायला शिकतात. ते शिकतात की गवत सामान्यतः हिरवे असते, आकाश अनेकदा निळे असते आणि विशिष्ट पोत लाकडाच्या किंवा कापडाच्या धाग्यांशी जुळतात. हे एका सुशिक्षित अंदाजासारखे आहे, परंतु एका प्रचंड व्हिज्युअल विश्वकोशाद्वारे माहितीपूर्ण आहे. अल्गोरिदम मानवी अर्थाने खरा रंग ‘जाणत’ नाही, परंतु शिकलेल्या सहसंबंधांवर (learned correlations) आधारित अत्यंत संभाव्य अंदाज (highly probable predictions) लावू शकतो.
रंगांची भाषा: CIELab आणि न्यूरल नेटवर्क्स
कलरलायझेशनला संगणकीय पद्धतीने हाताळण्यासाठी, आपल्याला रंगाचे प्रतिनिधित्व करण्यासाठी योग्य पद्धतीची आवश्यकता आहे. जरी RGB
(लाल, हिरवा, निळा) डिस्प्लेसाठी सामान्य असले तरी, ते प्रकाशमानता (luminance - brightness) आणि रंगीतपणा (chrominance - color) माहिती एकत्र करते. या कार्यासाठी अधिक फायदेशीर प्रणाली म्हणजे CIELab
कलर स्पेस. हे मॉडेल रंगाला तीन भिन्न घटकांमध्ये सुरेखपणे विभक्त करते:
- L (Lightness): हे चॅनेल कृष्णधवल माहितीचे प्रतिनिधित्व करते, पूर्ण काळ्यापासून पूर्ण पांढऱ्यापर्यंत. हे मूलतः कृष्णधवल प्रतिमेत आपल्याकडे आधीपासून असलेला इनपुट डेटा आहे.
- a: हे चॅनेल हिरव्या (ऋण मूल्ये) ते लाल (धन मूल्ये) पर्यंतच्या स्पेक्ट्रमला एन्कोड करते.
- b: हे चॅनेल निळ्या (ऋण मूल्ये) ते पिवळ्या (धन मूल्ये) पर्यंतच्या स्पेक्ट्रमला एन्कोड करते.
CIELab
चे सौंदर्य या विभाजनात आहे. आमचे डीप लर्निंग मॉडेल केवळ इनपुट लाइटनेस (‘L’) चॅनेलवर आधारित दोन क्रोमिनन्स चॅनेल (‘a’ आणि ‘b’) चा अंदाज लावण्यावर लक्ष केंद्रित करू शकते. मुख्य कार्य बनते: कृष्णधवल माहिती (L) दिल्यास, प्रत्येक पिक्सेलसाठी सर्वात संभाव्य संबंधित ‘a’ आणि ‘b’ मूल्ये कोणती आहेत?
सुरुवातीच्या प्रयत्नांमध्ये अनेकदा कन्व्होल्यूशनल न्यूरल नेटवर्क्स (CNNs
) वापरले जात होते - हा डीप लर्निंग आर्किटेक्चरचा एक प्रकार आहे जो प्रतिमांसारख्या ग्रिड-सारख्या डेटावर प्रक्रिया करण्यासाठी विशेषतः कुशल आहे. हे नेटवर्क्स मोठ्या इमेज डेटासेटवर (जसे की ImageNet
) प्रशिक्षित केले गेले होते जेणेकरून प्रत्येक पिक्सेलसाठी ‘a’ आणि ‘b’ मूल्यांचा थेट अंदाज लावला जाईल, याला रिग्रेशन समस्या (regression problem - सतत मूल्यांचा अंदाज लावणे) मानून. तथापि, एक सामान्य अडचण समोर आली: परिणामी कलरलायझेशन अनेकदा फिकट (desaturated) किंवा निस्तेज (muted) दिसत होते. का? सफरचंदासारख्या वस्तूचा विचार करा. ते संभाव्यतः लाल, हिरवे किंवा पिवळे असू शकते. जर नेटवर्क रिग्रेशन दरम्यान या शक्यतांची सरासरी काढण्याचा प्रयत्न करत असेल, तर ते एका तेजस्वी, विशिष्ट रंगाऐवजी एका निस्तेज, तपकिरी तडजोडीवर स्थिरावू शकते. अनेक संभाव्य रंगांमधील या सरासरी परिणामामुळे परिणाम धूसर होत होते.
एक आदर्श बदल: वर्गीकरण म्हणून कलरलायझेशन
फिकटपणाच्या समस्येवर मात करण्यासाठी आणि अधिक तेजस्वी, वास्तववादी रंग तयार करण्यासाठी, एक अधिक अत्याधुनिक दृष्टिकोन समस्येला पुन्हा परिभाषित करतो. रंगाच्या अंदाजाला रिग्रेशन म्हणून हाताळण्याऐवजी, ते वर्गीकरण कार्य (classification task) म्हणून पाहिले जाते.
येथे वैचारिक बदल आहे:
- क्वांटाइज्ड कलर स्पेस (Quantized Color Space): संभाव्य ‘a’ आणि ‘b’ मूल्यांच्या सतत स्पेक्ट्रमला प्रतिनिधी रंग ‘बिन्स’ (bins) किंवा वर्गांच्या पूर्वनिर्धारित संचामध्ये विभक्त (discretized) केले जाते. याला एका विशाल पॅलेटला ‘a’-‘b’ प्लेनमध्ये व्यवस्थापित करण्यायोग्य, तरीही व्यापक, वेगळ्या रंगांच्या पर्यायांच्या संचामध्ये कमी करण्यासारखे समजा.
- संभाव्यतांचा अंदाज (Predicting Probabilities): इनपुट कृष्णधवल प्रतिमेतील प्रत्येक पिक्सेलसाठी,
CNN
एकाच ‘a’ आणि ‘b’ मूल्याचा अंदाज लावत नाही. त्याऐवजी, ते क्वांटाइज्ड कलर बिन्सवर संभाव्यता वितरण (probability distribution) आउटपुट करते. ते मूलतः म्हणते, ‘या पिक्सेलसाठी, 70% शक्यता आहे की ते ‘तेजस्वी लाल बिन #5’ शी संबंधित आहे, 20% शक्यता आहे की ते ‘फिकट लाल बिन #2’ आहे, 5% शक्यता आहे की ते ‘तपकिरी बिन #12’ आहे,’ इत्यादी. - अस्पष्टतेचे निराकरण (Addressing Ambiguity): हा संभाव्य दृष्टिकोन रंगाच्या अस्पष्टतेला स्वाभाविकपणे हाताळतो. जर एखादी वस्तू अनेक रंगांची असू शकते (जसे सफरचंद), तर नेटवर्क अनेक भिन्न कलर बिन्सना महत्त्वपूर्ण संभाव्यता नियुक्त करू शकते, या अनिश्चिततेला एका सौम्य सरासरीचा अवलंब न करता प्रतिबिंबित करते.
- तेजस्वी रंगात डीकोडिंग (Decoding to Vibrant Color): अंतिम टप्प्यात या संभाव्यता वितरणाला प्रत्येक पिक्सेलसाठी एकाच, विशिष्ट रंगात रूपांतरित करणे समाविष्ट आहे. एक साधा दृष्टिकोन म्हणजे फक्त सर्वाधिक संभाव्यतेसह (मोड - mode) कलर बिन निवडणे. तथापि, तेजस्वीपणाला प्रोत्साहन देण्यासाठी आणि फिकटपणाची समस्या टाळण्यासाठी, वितरणाचा ॲनील्ड मीन (annealed mean) मोजण्यासारखी तंत्रे वापरली जातात. ही पद्धत कमी संभाव्य परंतु अधिक रंगीत (उच्च सॅचुरेशन) अंदाजांना अधिक महत्त्व देते, प्रभावीपणे ‘टाय’ तोडून तेजस्वीपणाच्या बाजूने निर्णय घेते, तरीही एकूण अंदाजित वितरणाचा आदर करते.
हे वर्गीकरण फ्रेमवर्क, विशेषतः कलरलायझेशनसाठी डिझाइन केलेल्या लॉस फंक्शनच्या (loss function - प्रशिक्षणादरम्यान मॉडेलच्या कामगिरीचे मूल्यांकन करण्यासाठी वापरले जाणारे मेट्रिक) काळजीपूर्वक रचनेसह, मॉडेलला कृष्णधवल वैशिष्ट्ये आणि संभाव्य रंगांचे वितरण यांच्यातील जटिल संबंध शिकण्यास अनुमती देते. परिणाम म्हणजे अशा प्रतिमा ज्या केवळ संभाव्य रंगांच्या नसतात, तर त्यामध्ये पूर्वीच्या रिग्रेशन-आधारित पद्धतींमध्ये अनेकदा नसलेली समृद्धता आणि व्हिज्युअल अपील देखील असते.
पडद्यामागे डोकावणे: एक व्यावहारिक डीप लर्निंग वर्कफ्लो
अशा अत्याधुनिक CNN
ला सुरवातीपासून प्रशिक्षित करणे हे एक प्रचंड मोठे काम आहे ज्यासाठी प्रचंड संगणकीय संसाधने आणि मोठे डेटासेट आवश्यक आहेत, परंतु पूर्व-प्रशिक्षित (pre-trained) मॉडेल्सचा फायदा घेतल्याने हे तंत्रज्ञान सुलभ होते. चला एका पूर्व-प्रशिक्षित डीप लर्निंग मॉडेलचा (विशेषतः Caffe
फ्रेमवर्क वापरून तयार केलेले, जसे मूळ उदाहरणात आहे) वापर करून इमेज कलरलायझेशनसाठी संकल्पनात्मक पायऱ्या पाहूया, ज्या Python
आणि सामान्य लायब्ररी वापरून अंमलात आणल्या आहेत.
१. टूलकिट एकत्र करणे:
पाया सामान्यतः Python
असतो, जो डेटा सायन्स आणि AI मध्ये लोकप्रिय असलेली एक बहुमुखी प्रोग्रामिंग भाषा आहे. मुख्य लायब्ररी महत्त्वपूर्ण भूमिका बजावतात:
NumPy
: कार्यक्षम संख्यात्मक ऑपरेशन्ससाठी आवश्यक, विशेषतः प्रतिमांचे प्रतिनिधित्व करणाऱ्या बहु-आयामी ॲरे हाताळण्यासाठी.OpenCV
(cv2
): संगणक दृष्टी (computer vision) कार्यांसाठी एक शक्तिशाली लायब्ररी. हे प्रतिमा वाचणे, लिहिणे, हाताळणे आणि प्रदर्शित करण्यासाठी फंक्शन्स प्रदान करते, आणि महत्त्वाचे म्हणजे,Caffe
,TensorFlow
, आणिPyTorch
सारख्या विविध फ्रेमवर्कमध्ये प्रशिक्षित मॉडेल्स लोड करण्यास आणि चालविण्यात सक्षम असलेले डीप न्यूरल नेटवर्क (DNN
) मॉड्यूल समाविष्ट करते.Argparse
: वापरकर्ता-अनुकूल कमांड-लाइन इंटरफेस तयार करण्यासाठी एक मानकPython
लायब्ररी, वापरकर्त्यांना इमेज फाइल पाथ सारखे इनपुट पॅरामीटर्स सहजपणे निर्दिष्ट करण्याची परवानगी देते.OS
: मूलभूत ऑपरेटिंग सिस्टम परस्परसंवादासाठी वापरले जाते, जसे की वेगवेगळ्या सिस्टम्सवर (Windows, macOS, Linux) काम करणाऱ्या फाइल पाथची रचना करणे.
२. पूर्व-प्रशिक्षित बुद्धिमत्ता मिळवणे:
न्यूरल नेटवर्कला विटेविटेने तयार करण्याऐवजी, आम्ही कलरलायझेशनसाठी आधीच प्रशिक्षित केलेल्या नेटवर्कचे प्रतिनिधित्व करणाऱ्या फाइल्स वापरतो. यामध्ये सामान्यतः समाविष्ट असते:
- मॉडेल आर्किटेक्चर फाइल (
.prototxt
Caffe
साठी): ही फाइल न्यूरल नेटवर्कची रचना परिभाषित करते – लेयर्स, त्यांचे प्रकार, कनेक्शन्स आणि पॅरामीटर्स. हे मॉडेलचे ब्लू प्रिंट आहे. - प्रशिक्षित वेट्स फाइल (
.caffemodel
Caffe
साठी): या फाइलमध्ये नेटवर्कने त्याच्या विस्तृत प्रशिक्षण प्रक्रियेदरम्यान शिकलेले संख्यात्मक वेट्स (weights) असतात. हे वेट्स मॉडेलने कृष्णधवल वैशिष्ट्यांना रंगांच्या संभाव्यतेशी मॅप करण्याबद्दल मिळवलेले ‘ज्ञान’ साठवतात. ही डिस्टिल्ड बुद्धिमत्ता आहे. - कलर क्वांटायझेशन डेटा (
.npy
फाइल): हीNumPy
फाइल सामान्यतः पूर्वी वर्णन केलेल्या वर्गीकरण दृष्टिकोनमध्ये वापरल्या गेलेल्या क्वांटाइज्ड कलर बिन्सचे केंद्रबिंदू (center points) संग्रहित करते. हे अंदाजित रंग संभाव्यतेसाठी संदर्भ पॅलेट म्हणून कार्य करते.
या फाइल्स शक्तिशाली हार्डवेअरवर संभाव्यतः आठवडे किंवा महिने चाललेल्या प्रशिक्षणाचे प्रतिनिधित्व करतात.
३. कलरलायझेशन इंजिन लोड करणे:
आवश्यक फाइल्स मिळाल्यावर, OpenCV
चे DNN
मॉड्यूल पूर्व-प्रशिक्षित नेटवर्कला मेमरीमध्ये लोड करण्याची यंत्रणा प्रदान करते. cv2.dnn.readNetFromCaffe
फंक्शन (किंवा इतर फ्रेमवर्कसाठी समतुल्य) आर्किटेक्चर आणि वेट्स फाइल्स इनपुट म्हणून घेते आणि नेटवर्कला इन्स्टंटिएट करते, ज्यामुळे ते इन्फरन्ससाठी (inference - नवीन डेटावर अंदाज लावण्याची प्रक्रिया) तयार होते. .npy
फाइलमधील कलर क्वांटायझेशन पॉइंट्स देखील लोड केले जातात, सामान्यतः NumPy
वापरून.
४. नेटवर्क घटकांचे फाइन-ट्यूनिंग (आवश्यक असल्यास):
कधीकधी, पूर्व-प्रशिक्षित नेटवर्कमधील विशिष्ट लेयर्सना इन्फरन्सपूर्वी किरकोळ समायोजनांची आवश्यकता असते. चर्चा केलेल्या वर्गीकरण-आधारित कलरलायझेशन मॉडेलच्या संदर्भात:
- आउटपुट लेयर समायोजन: ‘a’ आणि ‘b’ चॅनेल अंदाजांचे आउटपुट देण्यासाठी जबाबदार असलेला अंतिम लेयर (उदा. संदर्भ मॉडेलमध्ये
class8_ab
नाव दिलेले).npy
फाइलमधील कलर बिन केंद्रांसह स्पष्टपणे लोड करण्याची आवश्यकता असू शकते. हे सुनिश्चित करते की नेटवर्कचे आउटपुट संभाव्यता पूर्वनिर्धारित कलर पॅलेटशी योग्यरित्या मॅप होतात. पॉइंट्स अनेकदा रीशेप केले जातात आणि योग्य डेटा प्रकारात (उदा.float32
) कास्ट केले जातात, लेयरच्या ‘ब्लॉब्स’ (blobs -Caffe
चा डेटा कंटेनरसाठी शब्द) ला नियुक्त करण्यापूर्वी. - कलर रीबॅलन्सिंग (Color Rebalancing): दुसरा लेयर (उदा.
conv8_313_rh
) आउटपुटमधील भिन्न रंगांमधील संतुलन प्रभावित करण्यासाठी समायोजित केला जाऊ शकतो, संभाव्यतः सॅचुरेशन वाढवण्यासाठी किंवा प्रशिक्षणादरम्यान शिकलेले बायस (biases) दुरुस्त करण्यासाठी. यात अनेकदा लेयरचे ब्लॉब्स विशिष्ट शिकलेल्या मूल्यांवर सेट करणे समाविष्ट असते (जसे मूळ कोडमध्ये नमूद केलेले2.606
मूल्य, जे बहुधा अनुभवजन्यरित्या किंवा प्रशिक्षणादरम्यान प्राप्त केले गेले असेल).
या पायऱ्या वर्गीकरण दृष्टिकोन वापरून कलरलायझेशन कार्यांच्या विशिष्ट बारकाव्यांसाठी सामान्य पूर्व-प्रशिक्षित मॉडेलला तयार करतात.
५. इनपुट इमेज तयार करणे:
इनपुट कृष्णधवल इमेजला न्यूरल नेटवर्कमध्ये फीड करण्यापूर्वी अनेक प्रीप्रोसेसिंग पायऱ्यांमधून जावे लागते:
- लोडिंग: इमेज निर्दिष्ट फाइल पाथमधून
cv2.imread
वापरून वाचली जाते. जरी ती कृष्णधवल असली तरी,OpenCV
डीफॉल्टनुसार ती 3-चॅनेलBGR
इमेज म्हणून लोड करू शकते, ग्रे व्हॅल्यू चॅनेलमध्ये डुप्लिकेट करून. - नॉर्मलायझेशन (Normalization): पिक्सेल व्हॅल्यूज, सामान्यतः 0 ते 255 पर्यंत, 255.0 ने भागून एका लहान रेंजमध्ये, अनेकदा 0.0 ते 1.0 पर्यंत, स्केल केल्या जातात. हे नॉर्मलायझेशन नेटवर्कच्या शिक्षण आणि इन्फरन्स प्रक्रियेला स्थिर करण्यास मदत करते.
- कलर स्पेस रूपांतरण: इमेज डीफॉल्ट
BGR
कलर स्पेसमधूनCIELab
कलर स्पेसमध्येcv2.cvtColor
वापरून रूपांतरित केली जाते. लाइटनेस (L) चॅनेल वेगळे करण्यासाठी हे महत्त्वपूर्ण आहे. - रिसायझिंग (Resizing): बहुतेक पूर्व-प्रशिक्षित
CNNs
एका निश्चित आकाराच्या (उदा. 224x224 पिक्सेल,ImageNet
सारख्या डेटासेटमुळे प्रभावित झालेले एक सामान्य मानक) इनपुट प्रतिमांची अपेक्षा करतात.LAB
इमेजcv2.resize
वापरून त्यानुसार रिसाइज केली जाते. हे मानकीकरण नेटवर्कच्या आर्किटेक्चरशी सुसंगतता सुनिश्चित करते. - L चॅनेल आयसोलेशन आणि सेंटरिंग: लाइटनेस (L) चॅनेल रिसाइज केलेल्या
LAB
इमेजमधून काढले जाते. अनेकदा, त्याची मूल्ये (सामान्यतःLAB
मध्ये 0-100) नंतर सरासरी मूल्य (उदा. 50) वजा करून शून्याच्या आसपास केंद्रित केली जातात. हे सेंटरिंग आणखी एक सामान्य प्रथा आहे जी नेटवर्कची कार्यक्षमता सुधारू शकते.
हे काळजीपूर्वक प्रीप्रोसेस केलेले L चॅनेल आता नेटवर्कला सादर करण्यासाठी तयार आहे.
६. इन्फरन्स पायरी: रंगाचा अंदाज लावणे:
येथे जादू घडते:
- ब्लॉब निर्मिती (Blob Creation): प्रक्रिया केलेले L चॅनेल (आता 2D ॲरे)
DNN
मॉड्यूलद्वारे अपेक्षित असलेल्या ‘ब्लॉब’ मध्ये रूपांतरित केले जाते, जो 4-आयामी ॲरे फॉरमॅट आहे (cv2.dnn.blobFromImage
). या फॉरमॅटमध्ये सामान्यतः बॅच आकार, चॅनेल, उंची आणि रुंदीसाठी आयाम समाविष्ट असतात. - फॉरवर्ड पास (Forward Pass): ब्लॉब
net.setInput
वापरून लोड केलेल्या नेटवर्कसाठी इनपुट म्हणून सेट केला जातो. नंतर,net.forward()
पद्धत कॉल केली जाते. हे गणनेला चालना देते: इनपुट डेटा नेटवर्कच्या लेयर्समधून वाहतो, शिकलेल्या वेट्सद्वारे निर्धारित केलेल्या रूपांतरांमधून जातो, आणि शेवटी अंदाजित आउटपुट तयार करतो. आमच्या कलरलायझेशन मॉडेलसाठी, आउटपुट अंदाजित ‘a’ आणि ‘b’ चॅनेलचे (किंवा त्याऐवजी, कलर बिन्सवरील संभाव्यता वितरणांचे) प्रतिनिधित्व करते. - आउटपुट रीशेपिंग: नेटवर्कमधील रॉ आउटपुटला ‘a’ आणि ‘b’ चॅनेलशी संबंधित 2D स्थानिक फॉरमॅटमध्ये पुन्हा रीशेप आणि ट्रान्सपोज करणे आवश्यक आहे.
नेटवर्कने आता इनपुट कृष्णधवल इमेजवर आधारित रंगाच्या माहितीसाठी आपला सर्वोत्तम अंदाज तयार केला आहे.
७. रंगीत इमेजची पुनर्रचना करणे:
अंतिम टप्प्यात अंदाजित रंगाची माहिती मूळ इमेज डेटासह एकत्र करणे समाविष्ट आहे:
- अंदाजित चॅनेलचे रिसायझिंग: अंदाजित ‘a’ आणि ‘b’ चॅनेल (जे सध्या 224x224 आकाराचे आहेत, नेटवर्क इनपुटशी जुळणारे)
cv2.resize
वापरून इनपुट इमेजच्या मूळ आयामांमध्ये परत रिसाइज करणे आवश्यक आहे. हे सुनिश्चित करते की रंगाची माहिती मूळ इमेज स्ट्रक्चरशी योग्यरित्या जुळते. - मूळ लाइटनेस काढणे: महत्त्वाचे म्हणजे, लाइटनेस (L) चॅनेल मूळ, पूर्ण-आकाराच्या
LAB
इमेजमधून (प्रीप्रोसेसिंग दरम्यान रिसायझिंग करण्यापूर्वी तयार केलेले) काढले जाते. मूळ L चॅनेल वापरल्याने इमेजचे मूळ तपशील आणि प्रकाशमानता रचना जतन होते, जी रिसाइज केलेले L चॅनेल वापरल्यास खराब होईल. - एकत्रीकरण (Concatenation): मूळ L चॅनेल कलर चॅनेल अक्षावर रिसाइज केलेल्या, अंदाजित ‘a’ आणि ‘b’ चॅनेलसह एकत्र (concatenated) केले जाते. हे एका पूर्ण
LAB
इमेजला पुन्हा एकत्र करते, आता अंदाजित रंगासह. - डिस्प्ले करण्यायोग्य फॉरमॅटमध्ये परत रूपांतरण: परिणामी
LAB
इमेजcv2.cvtColor
वापरूनBGR
कलर स्पेसमध्ये परत रूपांतरित केली जाते, कारण हे बहुतेक इमेज डिस्प्ले फंक्शन्सद्वारे (जसेcv2.imshow
) अपेक्षित असलेले मानक फॉरमॅट आहे. - क्लिपिंग आणि स्केलिंग:
BGR
इमेजमधील पिक्सेल व्हॅल्यूज, सध्या नॉर्मलाइज्ड रेंजमध्ये (संभाव्यतः 0.0 ते 1.0), या वैध रेंजमध्ये राहतील याची खात्री करण्यासाठी क्लिप केल्या जातात (अंदाज प्रक्रियेमुळे मूल्ये कधीकधी किंचित सीमा ओलांडू शकतात). नंतर, डिस्प्ले किंवा मानक इमेज फाइल म्हणून सेव्ह करण्यासाठी आवश्यक असलेल्या मानक 0-255 पूर्णांक रेंजमध्ये परत स्केल केले जातात.
८. व्हिज्युअलायझेशन (Visualization):
शेवटी, cv2.imshow
सारखी फंक्शन्स मूळ कृष्णधवल इमेजला तिच्या नव्याने रंगीत केलेल्या प्रतिमेसोबत प्रदर्शित करण्यासाठी वापरली जाऊ शकतात, ज्यामुळे तात्काळ व्हिज्युअल तुलना करता येते.
प्रक्रिया कार्यान्वित करणे:
सामान्यतः, या पायऱ्या अंमलात आणणारी स्क्रिप्ट कमांड लाइनवरून चालवली जाईल. argparse
सेटअप वापरून, वापरकर्ता इनपुट कृष्णधवल इमेजचा पाथ एक आर्गुमेंट म्हणून प्रदान करेल (उदा. python colorize_image.py --image my_photo.jpg
). स्क्रिप्ट नंतर लोडिंग, प्रीप्रोसेसिंग, इन्फरन्स आणि पुनर्रचना पायऱ्या कार्यान्वित करते, आणि शेवटी रंगीत परिणाम प्रदर्शित करते किंवा सेव्ह करते.
हा वर्कफ्लो, पूर्व-प्रशिक्षित मॉडेल्स आणि शक्तिशाली लायब्ररींचा फायदा घेऊन, डीप लर्निंग कलरलायझेशनच्या जटिल सिद्धांताला एका व्यावहारिक साधनात रूपांतरित करतो, जो कृष्णधवल प्रतिमांमध्ये तेजस्वी, संभाव्य रंग जोडण्यास सक्षम आहे, प्रभावीपणे भूतकाळ आणि वर्तमान यांच्यातील अंतर कमी करतो.