Διαχείριση και επεξεργασία εικόνας στην γλώσσα προγραμματισμού Python

Στο wiki αυτό θα μάθουμε να διαχειριζόμαστε και γενικότερα επεξεργαζόμαστε πολυκάναλες εικόνες με τηνγλώσσα προγραμματισμού Python. Θα ξεκινήσουμε από απλές λειτουργίες όπως ανάγνωση εικόνας και μετατροπές της σε διάφορες τυποποιήσεις (format) και θα προχωρήσουμε σε πιο σύνθετα θέματα (φίλτρα, μορφολογικοί τελεστές, κατάτμηση) :-)

Εισαγωγή

Ελεύθερα βιβλία για τηγλώσσα προγραμματισμού Python στο διαδίκτυο:
i. A Bite of Python:http://www.swaroopch.com/notes/Python
ii. Dive into Python:http://www.diveintopython.net/
iii. Ελληνική κοινότητα Python:http://python.org.gr/

Αρχικά να σημειωθεί (όπως μάλλον είναι γνωστό :-)), ότι μια εικόνα είναι ένα πλέγμα (πίνακας) με τιμές φωτεινότητας.
Στην python υπάρχουν πολλοί τρόποι για να “ανοίξουμε” μια εικόνα (ή αλλιώς έναν πίνακα). Προς το παρόν, θα ασχοληθούμε μόνο με εικόνες χωρίς γεωαναφορά.

Βιβλιοθήκες Numpy και Scipy

numpy: συλλογή συναρτήσεων και τύπων που αποσκοπεί στην επίλυση μαθηματικών προβλημάτων.

  • Διαθέτει ένα βασικό τύπο δεδομένων, τον πολυδιάστατο πίνακα(multi-dimensional array, ndarray).
  • Για τoν ndarray, υπάρχουν έτοιμες ρουτίνες για αριθμητική ανάλυση, γραμμική άλγεβρα, μιγαδικούς αριθμούς, ανάλυση Fourier κλπ.

scipy: είναι συμπληρωματική της numpy και παρέχει ρουτίνες και αλγορίθμους για πιο σύνθετες επιστημονικές διαδικασίες όπως:
* Γραμμική παλινδρόμηση
* Φίλτρα
* Ανάλυση σήματος
* Μαθηματική Μορφολογία
* Ανάλυση εικόνας
* Στατιστική, και πολλά άλλα.
*Εδώ είναι το εγχειρίδιο αναφοράς

Παράδειγμα πράξεων πινάκων
#Αrray operations with numpy
import numpy as np
a = np.array([20,30,40,50])
b = np.array([0,1,2,3])
# array subtraction
c = a-b
c
array([20,29,38,47])

Εισαγωγή και απεικόνιση εικόνων

  1. Στην python, μια εικόνα μπορεί να φορτωθεί σε τύπο δεδομένων array και εφόσον φορτωθεί μπορόυν να πραγματοποιηθούν διάφορες μαθηματικές πράξεις με τα δεδομένα των εικόνων, για όλα τα κανάλια και για όλα τα εικονοστοιχεία.
  2. Εναλλακτικά, υπάρχει μια πιο εξειδικευμένη βιβλιοθήκη επεξεργασίας εικόνας που ονομάζεται PIL(Python Image Library), η οποία υποστηρίζει περισσότερα πρότυπα (format) εικόνων και διαθέτει επιπλέον αλγορίθμους επεξεργασίας εικόνας. Η βιβλιοθήκη αυτή δεν λειτουργεί με τύπους array, αλλά διαθέτει έναν πιο ειδικό (και πιο γρήγορο) τύπο Image.http://www.pythonware.com/library/pil/handbook/
  3. Προσοχή: Οι βιβλιοθήκες scipy και PIL δεν μπορούν να εισάγουν πολυφασματικά δεδομένα ή εικόνες που έχουν γεωαναγορά.
  4. Ωστόσο, μπορούμε να διαβάσουμε τηλεπισκοπικές εικόνες με PIL ή scipy που έχουν 3 ή 1 φασματικά κανάλια, αν η εικόνα δεν έχει γεωαναφορά. (Η πλέον κατάλληλη βιβλιοθήκη για ανάγνωση και εγγραφή τηλεπισκοπικών εικόνων είναι η GDAL.)
  5. Η βιβλιοθήκη matplotlib είναι μια από τις πιο ευέλικτες και εύχρηστες βιβλιοθήκες για απεικόνιση γραφημάτων (όπως πχ. ιστογραμμάτων) αλλά και εικόνων.

Διάβασμα εικόνας με τη scipy:

import scipy as sp
file = 'test.jpg'
img = sp.misc.imread(file)

Διάβασμα εικόνας με την PIL και στροφή εικόνας:

from PIL import Image
img = Image.open('test.jpg')
# στροφή και απεικόνιση εικόνας (45 μοίρες στροφή)
img.rotate(45).show() 

Διαστάσεις εικόνας:

# Get image dimensions
img.shape

Απεικόνιση εικόνας με την matplotlib:

# Show the image
import matplotlib.pyplot as plt
plt.imshow(img)
plt.show()

Αποθήκευση εικόνας σε format της επιλογής μας:

# Save the image in a format of our choice
import scipy as sp
sp.misc.imsave('test.tif',img)
 
python_image_processing.txt · Τελευταία τροποποίηση: 2015/07/25 17:56 από evi