Advances in Digital Imaging and Computer Vision Lecture and Lab XXX Introduction to Python Κώστας Μαριάς Αναπληρωτής Καθηγητής Επεξεργασίας Εικόνας 21/2/2017 1
Image Processing and Computer Vision with Pythin Resources http://programmingcomputervision.com/ Programming Computer Vision with Python, by Jan Erik Solem. 2
Python και NumPy Python είναι η γλώσσα προγραμματισμού που χρησιμοποιείται στα παραδείγματα κώδικα. Η Python είναι μια πλήρης και περιεκτική γλώσσα με καλή υποστήριξη για την είσοδο / έξοδο, αριθμών,εικόνων και για σχεδίαση. Τα παραδείγματα που θα ασχοληθούμε απαιτούν Python 2.6 ή νεότερη έκδοση, καθώς τα περισσότερα πακέτα είναι διαθέσιμα μόνο για αυτές τις εκδόσεις. Η έκδοση Python 3.x έχει πολλές διαφορές και ενδέχεται να μην είναι συμβατή με την Python 2.x ή συμβατές με το οικοσύστημα των πακέτων που χρειαζόμαστε (ακόμη). 3
Για τους αρχάριους στην Python, Python και NumPy Το βιβλίο Mark Lutz. Learning Python. O Reilly Media Inc., 2009. και το http://www.python.org/ είναι καλά σημεία εκκίνησης. 4
Python και NumPy Για να δουλέψουμε σε επεξεργασία εικόνας και υπολογιστική όραση, χρειαζόμαστε αναπαραστάσεις των διανυσμάτων και πινάκων και τις πράξεις τους. Αυτό γίνεται από module NumPy της Python, όπου και τα διανύσματα και οι πίνακες που αντιπροσωπεύεται από τον τύπο array. Αυτή είναι και η αναπαράσταση που θα χρησιμοποιούμε για τις εικόνες. Μια καλή αναφορά για την NumPy είναι ο ελεύθερος Οδηγός-βιβλίο του Travis Oliphant (Travis Oliphant s free book Guide to NumPy) Η τεκμηρίωση σε http://numpy.scipy.org/ είναι επίσης ένα καλό σημείο εκκίνησης Για την οπτικοποίηση αποτελεσμάτων, θα χρησιμοποιήσουμε τη μονάδα Matplotlib, καθώς και για πιο προηγμένα μαθηματικά, θα χρησιμοποιήσουμε SciPy. 5
6
7
8
9
Python Imaging Library (PIL) Το Βιβλιοθήκη Python Imaging Library (PIL) παρέχει γενικά εργαλεία για τον χειρισμό εικόνων και πολλές χρήσιμες βασικές λειτουργίες εικόνας, όπως η αλλαγή μεγέθους, περικοπή, περιστροφή, μετατροπή χρωμάτων και πολλά περισσότερα. Η PIL είναι δωρεάν και είναι διαθέσιμη από http://www.pythonware.com/products/pil/ To read an image, use: from PIL import Image pil_im = Image.open('empire.jpg') The return value, pil_im, is a PIL image object. http://effbot.org/imagingbook/image.htm Στη διεύθυνση αυτή επεξηγεί το Image module της Python 10
First Python Programme in Image Processing # -*- coding: utf-8 -*- """ Created on Sun Mar 12 16:27:33 2017 @author: kmarias """ from PIL import Image from pylab import * # read image to array firstimage = array(image.open('empire.jpg')) # plot the image imshow(firstimage) # show title title('plotting: "empire.jpg"') 11
12
First Python Programme in Image Processing from PIL import Image from pylab import * # read image to array firstimage = array(image.open('empire.jpg')) # plot the image imshow(firstimage) # show title title('plotting: "empire.jpg"') secondimage=firstimage figure() title('image Histogram') hist(secondimage.flatten(),128) show() 13
14
SciPy for Image Processing and CV Το open-source πακέτο SciPy (http://scipy.org/) προσφέρει μαθηματικές δυνατότητες χτίζοντας πάνω στο NumPy για μια σειρά από αποτελεσματικές ρουτίνες για χειρισμούς αριθμών όπως ολοκλήρωση, βελτιστοποίηση, στατιστική, επεξεργασία σήματος, και επεξεργασία εικόνας. Το SciPy είναι δωρεάν και μπορεί να το κατεβάσει κανείς στο http://scipy.org/download. 15
Θόλωμα εικόνας με Gaussian φίλτρο Ένα πολύ χαρακτηριστικό παράδειγμα συνέλιξης εικόνας είναι η συνέλιξη με Gaussian φίλτρο οδηγώντας σε θόλωση την αρχική εικόνα I: Ι σ = Ι G σ όπου συμβολιζει την συνελιξη και G σ είναι μια 2Δ μάσκα με απόκλιση σ η οποία δίνεται απο την σχέση: G σ = 1 +y 2 )/2σ 2 2πσ e (x2 Η θόλωση με Gaussian μάσκα χρησιμοποιείσαι για ορίσει ένα επίπεδο πληροφορίας εικόνας (βλέπε scale-space analysis), για interpolation, υπολογισμό σημείων ενδιαφέροντος, κλπ. 16
Θόλωμα εικόνας με Gaussian φίλτρο from PIL import Image from pylab import * from numpy import * from scipy.ndimage import filters im = array(image.open('empire.jpg').convert('l')) im2 = filters.gaussian_filter(im,5) figure() gray() imshow(im) figure() gray() imshow(im2) 17
Παράγωγοι εικόνας Η παράγωγος εικόνας είναι ένα διάνυσμα Ι =[I x,i y ] T Με μέτρο Ι = I 2 2 x + I y Και κλίση α = arctan2(iy, Ix) που υποδεικνύει την κατεύθυνση της μεγαλύτερης αλλαγής έντασης σε κάθε σημείο (pixel) της εικόνας. Η συνάρτηση arctan2 NumPy () επιστρέφει τη γωνία σε ακτίνια, στο διάστημα -π... π. 18
Παράγωγοι εικόνας Μπορούμε να υπολογίσουμε παραγώγους εικόνας χρησιμοποιώντας διακριτές προσεγγίσες που μπορούν έυκολα να υλοποιηθούν με συνέλιξη: Ix= I Dx και Iy= I Dy Δύο γνωστές υλοποιήσεις για τα Dx, Dy είναι τα φίλτρα Prewitt και τα φίλτρα Sobel 19
Υπολογισμός x και y παραγώγου με Sobel filters from PIL import Image from pylab import * from numpy import * from scipy.ndimage import filters im = array(image.open('empire.jpg').convert('l')) # Sobel derivative filters imx = zeros(im.shape) filters.sobel(im,1,imx) imy = zeros(im.shape) filters.sobel(im,0,imy) magnitude = sqrt(imx**2+imy**2) figure() gray() imshow(magnitude) # show title title('plotting: "Magnitude of Sobel derivative of empire.jpg"') 20