computer-visionकंप्यूटर-दृष्टि से शुरुआत करना


टिप्पणियों

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

डिजिटल चित्र 2 या 3 आयामी संकेतों का विवेक है। दूसरे शब्दों में, डिजिटल चित्रों में निरंतर डोमेन के पिक्सेल या स्वर के सैम्पल सेट होते हैं।

                                        f : R² ⊃ Ω → R

जहाँ f the पर डिजिटल छवि है: आयताकार छवि डोमेन

सादगी के लिए, हम केवल 2 आयामी डिजिटल छवियों की चर्चा करेंगे, जैसे कि हमारे स्टैकऑवरफ्लो अवतारों में।

पिक्सेल के बारे में: छवियों के प्रकारों के बारे में चर्चा शुरू करने से पहले हम पिक्सेल मूल्यों के बारे में बताते हैं। अंगूठे के पिक्सल का एक नियम मान 0 से शुरू होता है जो बिना किसी प्रकाश (काले) को दर्शाता है, 1 तक पहुंचता है, अधिकतम तीव्रता (जैसे सफेद), और पूर्णांक में उनका प्रतिनिधित्व किया जाता है।

बाइनरी इमेज: ब्लैक एंड व्हाइट केवल इमेज। प्रत्येक पिक्सेल या तो 0 या 1 है, प्रत्येक पिक्सेल को थोड़ा सा दर्शाया जा सकता है। वे बहुत लोकप्रिय रूप से नहीं जानते हैं, क्योंकि वे आमतौर पर वैज्ञानिक अनुप्रयोगों में या उदाहरण के लिए मुखौटा के रूप में अन्य छवि प्रसंस्करण कार्यों के लिए उपयोग किए जाते हैं।

बाइनरी रूप में लीना छवि

एक बाइनरी इमेज उदाहरण। (इस फ़ाइल के छवि पिक्सेल मूल्यों को चेतावनी देना आवश्यक नहीं है बाइनरी, यह प्रदर्शन के लिए है, यह भी लीना है, इमेज प्रोसेसिंग डेवलपमेंट का सितारा)

ग्रेस्केल छवियाँ: ऑनलाइन फ़िल्टर के लिए धन्यवाद, हर कोई अभी भी इन छवियों को बहुत अच्छी तरह से जानता है। ये चित्र आम तौर पर प्रति पिक्सेल एक बाइट होते हैं, जिसमें 0 काले और 255 सफेद रंग के होते हैं, सब कुछ एक अलग टोन ग्रे होता है, यह देखते हुए कि मनुष्य केवल 40 रंगों के ग्रे को भेद सकता है, यह रेंज कई अनुप्रयोगों के लिए पर्याप्त है (ध्यान दें कि मान यहाँ पिक्सल को 0 से 1 तक बाइट मान 0 से 255 से मैप किया जाता है)

ग्रेस्केल में लीना की छवि

रंग छवियाँ: अंत में, सबसे आम डिजिटल छवि प्रकार, रंग छवियां। हमें यहां चैनलों की अवधारणा का उल्लेख करना होगा। डिजिटल इमेज में चैनल भी होते हैं, वास्तव में, ऊपर वर्णित बाइनरी और ग्रेस्केल इमेज में भी चैनल होते हैं। अधिकांश सामान्य विवरण आरजीबी (रेड-ग्रीन-ब्लू) मॉडल होंगे, ऐसी स्थिति में छवि में 3 चैनल हैं (आयामों के साथ इसे भ्रमित न करें, ये अभी भी 2 डी छवियां हैं) छवि की लाली, नीलापन और हरापन का वर्णन करने के लिए। इस स्थिति में, प्रत्येक पिक्सेल एक ट्रिपल है, 0 - 255 (सबसे लाल से लाल नहीं), 0 - 255 (सबसे अधिक हरा नहीं है), 0 - 255 (सबसे नीला से नीला नहीं) के बीच का मान है। इस मॉडल के लिए, पिक्सेल {0,0,0} काला है, {255,255,255} सफेद है, {255,0,0} लाल है, {255, 255, 0} पीला है। हालांकि, रंग एक बहुत व्यापक विषय है, और आप अधिक जानकारी के लिए संदर्भों की जांच कर सकते हैं।

रंग में लीना छवि

हाइपर-स्पेक्ट्रल छवियां:

हमने चैनलों पर चर्चा करने के बाद, हाइपर-स्पेक्ट्रल छवियों के बारे में बात करना आसान है। इन छवियों में सैकड़ों चैनल हो सकते हैं और आमतौर पर माइक्रोस्कोपी, उपग्रह इमेजिंग आदि में उपयोग किया जाता है।

रीडिंग

  1. सिग्नल का नमूना: https://en.wikipedia.org/wiki/Sampling_(signal_processing)

  2. डिजिटल इमेज प्रोसेसिंग की बाइबिल: आरसी गोंजालेज, आरई वुड्स: डिजिटल इमेज प्रोसेसिंग। तीसरा संस्करण, पियर्सन अप्रेंटिस हॉल, ऊपरी सैडल नदी, 2008।

  3. कंप्यूटर विज़न रिव्यू (डीप लर्निंग तक): आर। सेज़िस्की: कंप्यूटर विज़न: एल्गोरिथम और एप्लिकेशन। स्प्रिंगर, न्यूयॉर्क, 2010।

  4. बाइनरी, ग्रेस्केल, रंग चित्रों की समझ पाने के लिए: https://en.wikipedia.org/wiki/Grayscale

उदाहरण

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

कृपया रिपॉजिटरी को क्लोन करें यदि आपने पहले से ऐसा नहीं किया है, या आप इसे जीथब के माध्यम से यहां डाउनलोड कर सकते हैं:

git clone https://github.com/Skorkmaz88/compvis101
 

ऐसी दो फाइलें हैं जिनका आप उपयोग कर सकते हैं, उनमें से एक है tutorial0.py और अन्य readImages.ipynb है, दूसरा एक ipython नोटबुक है यदि आप उपयोग करना पसंद करते हैं तो आप ऐसा कर सकते हैं। लेकिन दो फाइलें एक ही काम कर रही हैं।

कोड में टिप्पणियों में स्पष्टीकरण है, मैं हूं


 # libs
import png

# We create a greyscale image as described in our text.
# To do that simply, we create a 2D array in python. 
# x and y, x being horizontal and y being vertical directions.

x  = []
y = []
# Play around with these pixels values to get different grayscale images, they shoud be 
# in range of 0 - 255. 
white = 255
gray = 128
black = 0
width  = 100
height = 300

# Add 100 x 100 rectangle as just white(255) valued pixels
for i in range(0, 100):
    for j in range(0,100):
        y.append(white); # Pixel (i,j) is being set to a value, rest is coding trick to nest two lists 
    x.append(y)
    y = []
    
# Add 100 x 100 rectangle as just mid-gray(128) valued pixels
for i in range(0, 100):
    for j in range(0,100):
        y.append(gray);
    x.append(y)
    y = []

# Add 100 x 100 rectangle as just black(0) valued pixels
for i in range(0, 100):
    for j in range(0,100):
        y.append(black);
    x.append(y)
    y = []

# output image file 
f = open('out.png', 'wb')
w = png.Writer(width, height , greyscale=True, bitdepth=8)
w.write(f, x)
f.close()
# If everything went well, you should have 3 vertically aligned rectangles white, gray and black 
# Check your working folder

# PART 2
# Read a grayscale image and convert it to binary

# This time we will binarize a grayscale image, to do that we will read pixels and according to threshold we set
# we will decide if that pixel should be white or black 

# This file is originally 8 bit png image, can be found in github repository, you should use only this type of
# images if you want to change the image.
f = open('./img/lenaG.png', 'r')

r=png.Reader(file=f)
# You will the details about the image, for now pay attention to size and bitdepth only.
img = r.read()

width = img[0]
height = img[1]
# Threshold value for binarizing images, 
threshold = 128
print "Input image size is: "+ str(width)+ " pixels as  width, " + str(height) + " pixels as height"

f_out = open('lenaBinary.png', 'wb')
w = png.Writer(width, height , greyscale=True, bitdepth=1)

pixels = img[2]
 
x = []
y = []

# Let's traverse the Lena image 
for row in pixels:
    for pixel in row:
        p_value =  pixel
        # Now here we binarize image in pixel level
        if p_value > threshold:
            p_value = 1
        else:
            p_value = 0
            
        y.append(p_value);
    x.append(y)
    y = []

w.write(f_out, x)
f_out.close()

अगर सब कुछ अच्छा काम किया, बधाई! आपने खरोंच से एक छवि बनाई है और मौजूदा छवि पर पहला पिक्सेल स्तर परिवर्तन किया है। नई छवियों को देखने के लिए अपने कार्यशील फ़ोल्डर की जाँच करें

स्थापना या सेटअप

कंप्यूटर-दृष्टि को स्थापित करने या स्थापित करने पर विस्तृत निर्देश।

कंप्यूटर दृष्टि की इस और निम्नलिखित श्रृंखला के लिए, मैं पायथन 2 को एक प्रोग्रामिंग भाषा के रूप में उपयोग करूंगा। पायथन वैज्ञानिक समुदाय के लिए एक आम पसंद है, यह मुफ़्त है, इसमें मुफ़्त और ओपन-सोर्स के लिए बहुत सारे पुस्तकालय हैं, और यदि आप प्रोग्रामिंग सीखने और शुरू करने के लिए इसके सबसे सरल प्रोग्रामिंग में से एक हैं।

अब सेट-अप, यदि आप लिनक्स का उपयोग करते हैं तो आपके पास शायद पहले से ही अजगर है, बस टर्मिनल खोलें और यह जांचने के लिए कि क्या सब कुछ पहले से ही काम कर रहा है, टाइप करें। अन्य, इस लिंक की जांच कर सकते हैं और अजगर 2.7 डाउनलोड कर सकते हैं।

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

अब, हम अपनी ज़रूरत की लाइब्रेरी, PyPNG को स्थापित करने के लिए तैयार हैं। यदि आप पाइप का उपयोग कर रहे हैं तो आपको बस इतना करना होगा

पाइप स्थापित करें PyPNG

टर्मिनल में यदि आप लिनक्स / मैक का उपयोग कर रहे हैं, तो कमांड लाइन में यदि आप विंडोज का उपयोग कर रहे हैं।

इसके अलावा, इस अभ्यास के लिए, आपको उन चित्रों को प्राप्त करने की आवश्यकता है जो स्रोत कोड और ipythen नोटबुक के साथ github लिंक में पाए जा सकते हैं।

https://github.com/Skorkmaz88/compvis101

अब, हमें व्यायाम के लिए जाना चाहिए