Advertisement
  1. Code
  2. Python
Code

Επεξεργασία Εικόνας με τη Χρήση Python

by
Length:ShortLanguages:

Greek (ελληνικά) translation by Iris Diakoumi (you can also view the original English article)

Σε ένα άρθρο εφημερίδας του 1911 που πραγματεύοταν τη δημοσιογραφία και τη δημοσιότητα, και αναφερόμενο στην συντάκτη της εφημερίδας Tess Flanders, η παρακάτω έκφραση εμφανίστηκε:

Χρησιμοποιήστε μια εικόνα. Αξίζει χίλιες λέξεις.

Μια παρόμοια φράση εμφανίστηκε σε μια διαφήμιση σε εφημερίδα του 1913 για το Piqua Auto Supply House:

Ένα βλέμμα αξίζει χίλιες λέξεις.

Δε θα εμβαθύνω πολύ σε ιστορικά θέματα. Αυτή η εισαγωγή ήταν απλά για να το κάνει πιο διασκεδαστικό και να δείξει πώς οι φράσεις μας δείχνουν πόσο σημαντικές είναι οι εικόνες και πώς μπορούν να εμπεριέχουν τόση πληροφορία μέσα τους. Σίγουρα οι περισσότεροι από εμάς το συνειδητοποιούν αυτό, ειδικά όταν βλέπουμε πόσο περισσότερο μένει στο μυαλό μας μια εικόνα σε σχέση με το απλό κείμενο.

Δεν υπάρχει λοιπόν καμία αμφιβολία ότι οι εικόνες παίζουν σημαντικό ρόλο στις επικοινωνίες μας- όχι γενικές εικόνες αλλά και φωτογραφίες ειδικού σκοπού, όπως ιατρικές απεικονίσεις (π.χ. Μαγνητική Τομογραφία, Υπέρηχος κλπ.).

Μπορούμε να αποκτήσουμε φωτογραφίες μέσα από διάφορες συσκευές λήψεως. Για παράδειγμα, εικόνες μελανώματος (καρκίνος δέρματος) αποκτούνται με τη χρήση δερματοσκοπίου. Τραβάμε φωτογραφίες δικές μας ή των φίλων μας χρησιμοποιώντας μια ψηφική φωτογραφική μηχανή ή ένα smartphone. Μερικές φορές ωστόσο, παρατηρούμε μερικά προβλήματα στις εικόνες, όπως για παραδειγμα μια θολούρα, η οποία μπορεία να οφείλεται στη συσκευή λήψης που χρησιμοποιήθηκε.

Αλλά τί μπορούμε να κάνουμε σε αυτήν την περίπτωση;  Λάβατε μερικές ιατρικές απεικονίσεις για να αναλύσετε, και δεν υπάρχει η επιλογή να επαναληφθεί η λήψη αυτών τον εικόνων. Ακόμα και αν ξανατραβούσατε την εικόνα, η ανάλυση που βλέπετε δε θα αλλάξει, ούτε τα διάφορα θεματα που αντιμετωπίζετε. Σε αυτές τις περιπτώσεις υπεισέρχεται η επεξεργασία εικόνας.

Μου άρεσε το πώς ο όρος επεξεργασία εικόνας ορίστηκε στα Λεξικά Oxford:

Η ανάλυση και ο χειρισμός μιας ψηφιοποιημένης εικόνας, ειδικά με σκοπό να βελτιωθεί η ποιότητά της.

Ο όρος "Ψηφιοποιημένη εικόνα" εδώ αναφέρεται στο γεγονός ότι η εικόνα θεωρείται ψηφιακή, ότι δηλαδή επεξεργάζεται από έναν υπολογιστή.

Το να βάλουμε τον υπολογιστή στο παιχνίδι σημαίνει να χρησιμοποιήσουμε μια γλώσσα προγραμματισμού. Σε αυτό το tutorial θα σας δείξω πώς μπορούμε να χρησιμοποιήσουμε τη γλώσσα προγραμματισμού Python για να υλοποιήσουμε εργασίες επεξεργασίας εικόνας σε μια εικόνα.

scikit-image

Η βιβλιοθήκη που θα χρησιμοποιήσουμε έτσι ώστε να εκτελέσουμε τις εργασίες επεξεργασίας εικόνας είναι η scikit-image. Σύμφωνα με την εργασία scikit-image: image processing in Python:

Η scikit-image είναι μια βιβλιοθήκη επεξεργασίας εικόνας που υλοποιεί αλγορίθμους και εργαλεία για χρήση σε εφαρμογές της έρευνας, εκπαίδευσης και βιομηχανίας. Διατίθεται κάτω από την Modified BSD άδεια ανοικτού λογισμικού, παρέχει ένα καλά τεκμηριωμένο API στη γλώσσα προγραμματισμού Python, και αναπτύσσεται απο μια ενεργή, διεθνή ομάδα συνεργατών.

Το πρώτο πράγμα που πρέπει να κανουμε είναι να εγκαταστήσουμε την scikit-image. Οδηγίες για την εγκατάσταση της βιβλιοθήκης μπορείτε να βρείτε στη σελίδα κατεβάσματος, και σε αυτό το tutorial θα σας δείξω πώς να εγκαταστήσετε τη βιβλιοθήκη σε μηχάνημα Mac OS X, μιας πού αυτό χρησιμοποιώ αυτή τη στιγμή για να γράψω τo tutorial.

Μιας που η scikit-image είναι εξωτερική βιβλιοθήκη, το πρώτο πράγμα που πρέπει να κάνουμε είναι να εγκαταστήσουμε τη βιβλιοθήκη. Για αυτό, θα χρησιμοποιήσω το pip, που είναι (σύμφωνα με τη Wikipedia):

Ένα σύστημα διαχείρισης πακέτων που χρησιμοποιείται για να εγκαθιστούμε και να διαχειριζομαστε πακέτα λογισμικού γραμμένα σε Python. Πολλά πακέτα μπορούν να βρεθούν στο Python Package Index (PyPI).

Μπορείτε να ακολουθήσετε τα βήματα που αναφέρονται στο Python Packaging User Guide για να εγκαταστήσετε το pip, αλλά αν διαθέτετε Python 2.7.9 και πάνω, ή Python 3.4 και πάνω, τότε έχετε ήδη εγκατεστημένο το pip!

H scikit-image τώρα μπορεί απλά να εγκατασταθεί πληκτρολογώντας την παρακάτω εντολή (στο τερματικό του Mac OS X):

pip install -U scikit-image

Έχουμε τώρα εγκατεστημένη τη βιβλιοθήκη και είμαστε έτοιμοι να διασκεδάσουμε με την επεξεργασία εικόνας!

Η δοκιμαστική εικόνα που θα χρησιμοποιήσουμε σε αυτό το tutorial είναι η baboon.png. Κατεβάστε την, ή απλά χρησιμοποιήστε την εικόνα της αρεσκείας σας. Η εικόνα είναι ως εξής:

Baboon

Διαστάσεις μιας Εικόνας

Κάποιες φορές χρειάζεται να γνωρίζουμε τις διαστάσεις μιας εικόνας (περισσότερα για αυτό στην ενότητα του φιλτραρίσματος). Για να μπορέσουμε να ελέγξουμε της διαστάσεις της εικόνας μας, μπορούμε να χρησιμοποιήσουμε τη μέθοδο guess_spatial_dimensions(), ως εξής:

Η έξοδος του παραπάνω script είναι 3, το οποιο σημαίνει ότι έχουμε μια εικόνα που αποτελείται απο τρεις χωρικές διαστάσεις.

Χρώμα σε Αποχρώσεις του Γκρι

Από την παραπάνω ενότητα, παρατηρήσαμε ότι η εικόνα μας είναι μια τρισδιάστατη διανυσματική εικόνα (σε φορμά RBGA με τη μορφή (.., .., 4)). Πώς ήξερα ότι είναι σε φορμά RBGA; Μπορείτε απλά να κάνετε το παρακάτω:

Σε αυτήν την περίπτωση, θα παίρνατε την έξοδο: (512, 512, 4).

Σε αυτήν την ενότητα, θα θέλαμε να μετατρέψουμε την αρχική χρωματιστή εικόνα baboon.png σε μια δισδιάστατη εικόνα με αποχρώσεις του γκρι(άσπρο και μαύρο) Αυτό μπορεί να γίνει εύκολα χρησιμοποιώντας τον παρακάτω κώδικα:

Ας σώσουμε την νέα εικόνα (ασπρόμαυρη) σε ένα αρχείο. Αυτό μπορεί να γίνει χρησιμοποιώντας τη συνάρτηση imsave(), ως εξής (παρατηρήστε ότι η νέα εικόνα είναι στο αρχείο baboon-gs.png):

io.imsave('baboon-gs.png',img_grayscale)

Για να ελεγξουμε τις διαστάσεις της εικόνας, μπορούμε να χρησιμοποιήσουμε τον κώδικα της προηγούμενης ενότητας, στην οποία περίπτωση θα μας επέστρεφε 2. Ή μπορείτε να χρησιμοποιήσετε την img_grayscale.shape, που μας δίνει αποτέλεσμα 512x512. Έτσι, τώρα έχουμε μια δισδιάστατη εικόνα.

Για να δειξουμε τη νέα ασπρόμαυρη εικόνα, προσθέστε τα παρακάτω στο τέλος του κώδικα:

Το αποτέλεσμα θα είναι έτσι:

Baboon image in grayscale

Εφαρμόζοντας ένα Φίλτρο σε μια Εικόνα

Στην επεξεργασία εικόνα, το φιλτράρισμα πραγματοποιείται για να κάνουμε κάποια βελτιώσεις στην εικόνα. Γενικά, το φιλτράρισμα εμπεριέχει τις παρακάτω λειτουργίες: βελτιστοποίηση άκρων, sharpening και λείανση.

Σε αυτήν την ενότητα, θα σας δείξω πώς μπορείτε να εφαρμόσετε το φίλτρο Sobel στην εικόνα μας, και να δείτε ποιό είναι το αποτέλεσμα μιας τέτοιας διαδικασίας. Θα χρησιμοποιήσω το παράδειγμα που φαίνεται στην αρχική σελίδα της ιστοσελίδας της scikit-image, αλλά εφαρμοσμένο στην εικόνα μας.

Ο κώδικας για να εφαρμόσουμε το φίλτρο Sobel στην εικόνα μας είναι ο εξής:

Αν τρέξετε το script, παρατηρείτε κάποιο πρόβλημα; Ναι, δεν μπορέσαμε να εφαρμόσουμε τη διαδικασία αφού η εικόνα θα πρέπει να είναι δισδιάστατη εικόνα. Έτσι, αντί να χρησιμοποιήσουμε την baboon.png, πρέπει να χρησιμοποιήσουμε τη δισδιάστατη εικόνα μας, baboon-gs.png. Το αποτέλεσμα αυτής της διαδικασίας είναι ως εξής:

Baboon image with Sobel filter applied

Συμπέρασμα

Υπάρχουν πολλές διαδικασίες επεξεργασίας εικόνας, και η βιβλιοθήκη scikit-image μας παρέχει πολλές ενδιαφέρουσες διαδικασίες για να εφαρμόσουμε στις εικόνες μας. Μπορείτε να δείτε περισσότερες λειτουργίες επεξεργασίας εικόνας χρησιμοποιώντας αυτήν τη βιβλιοθήκη στην ιστοσελίδα της scikit-image.

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.