Αρχική Σελίδα | Ομάδα Ανάπτυξης | Επικοινωνία

  




Κεντρική Σελίδα

Τεχνικά Αρθρα
   Κατά Κατηγορία
   Κατά Ημερομηνία

Πληροφορίες
Υποβολή Aρθρου
Επικοινωνία
Όροι Χρήσης
   

Αποκατάσταση Εικόνων με Χρήση Φίλτρων Μέσου Όρου και Μεσαίου


Tεχνικά Aρθρα / Ψηφιακή Επεξεργασία Εικόνας /

Θεματική Ενότητα :     Ψηφιακή Επεξεργασία Εικόνας
Τίτλος Αρθρου :     Αποκατάσταση Εικόνων με Χρήση Φίλτρων Μέσου Όρου και Μεσαίου
Ημερομηνία Δημοσίευσης :     Σάββατο, 8 Οκτωβρίου 2005
Συγγραφέας :     Μπροκαλάκης Ανδρέας
Επικοινωνία :     mprokala@ceid.upatras.gr
Σχετιζόμενα Aρθρα :     Τα Χρωματικά Μοντέλα RGB και HSV
    Εξίσωση Ιστογράμματος


Περίληψη

O κρουστικός θόρυβος είναι μια συνήθης παραμόρφωση που παρατηρείται στις ψηφιακές εικόνες. Έχει την μορφή έντονων χρωματικά κηλίδων, κατά βάση άσπρων και μαύρων και σε αυτό το φαινόμενο οφείλει και την ονομασία του ως salt and pepper θόρυβος. Η πιο συνηθισμένη αιτία εμφάνισης του είναι η ατελής λειτουργία των στοιχείων που σχετίζονται με την σύλληψη και ψηφιοποίηση μιας εικόνας.

Στο άρθρο αυτό θα παρουσιαστούν 2 ψηφιακά φίλτρα που μπορούν να εφαρμοστούν για την αποκατάσταση εικόνων που υποφέρουν από κρουστικό θόρυβο. Τα φίλτρα αυτά, είναι το φίλτρο μέσου όρου (average) και το φίλτρο μεσαίου (median). Δύο grayscale εικόνες θα χρησιμοποιηθούν για την επίδειξη των ιδιοτήτων των φίλτρων και θα παρουσιαστούν υλοποιήσεις τους σε περιβάλλον MATLAB.

Προαπαιτούμενα

Για την κατανόηση των εννοιών που σχετίζονται με το άρθρο αυτό, απαιτούνται βασικές γνώσεις επεξεργασίας εικόνας και σημάτων. Επίσης, μιας και παρουσιάζονται υλοποιήσεις των φίλτρων σε MATLAB, γνώση της scripting γλώσσας του MATLAB είναι σημαντική για την κατανόηση του κώδικα. Αν ο αναγνώστης προτίθεται να πειραματιστεί στο MATLAB, ίσως να απαιτείται η εγκατάσταση του Image Processing Toolbox. Να σημειωθεί ότι η έκδοση του MATLAB που έχει χρησιμοποιηθεί είναι η 5.3.


Εισαγωγικά

Ο κρουστικός θόρυβος σε μια εικόνα γίνεται αντιληπτός με την εμφάνιση λευκών και μαύρων κηλίδων στην εικόνα. Οι Εικόνες 1 & 2 αποτελούν παραδείγματα εικόνων που έχουν παραμορφωθεί από κρουστικό θόρυβο. Ο θόρυβος είναι πολύ έντονος οπτικά και αυτό οφείλεται στο ότι η εμφάνιση του έχει ως αποτέλεσμα pixels των εικόνων να παίρνουν τις ακραίες τιμές του grayscale φάσματος σε τυχαία σημεία, οπότε δημιουργείται μεγάλη αντίθεση.


Εικόνα 1


Εικόνα 2

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


Φίλτρο Μέσου Όρου

Tο φίλτρο μέσου όρου (ή αλλιώς κινούμενου μέσου όρου - moving average filter) είναι το απλούστερο διδιάστατο χαμηλοπερατό FIR (Finite Impulse Response) φίλτρο. Αν οι διαστάσεις του είναι περιττοί αριθμοί Μi = 2vi + 1, i = 1,2, τότε ορίζεται ως εξής :

Η κρουστική απόκριση του φίλτρου ορίζεται ως :

Στην πράξη, για την υλόποίηση του φίλτρου θεωρούμε ένα παράθυρο μεγέθους n x m (n, m περιττοί αριθμοί) με κέντρο κάθε φορά ένα pixel της εικόνας. Ο μέσος όρος των τιμών όλων των pixels του παραθύρου υπολογίζεται και ο αριθμός που προκύπτει γίνεται η νέα τιμή του κεντρικού pixel του παραθύρου. Η διαδικασία αυτή πραγματοποιείται για όλα τα pixels της εικόνας, εκτός από εκείνα στα άκρα της εικόνας για τα οποία δεν μπορεί να σχηματιστεί το παράθυρο με κέντρο αυτά.

Η συνάρτηση που ακολουθεί υλοποιεί σε περιβάλλον MATLAB το φίλτρο μέσου όρου. Στην συγκεκριμένη υλοποίηση το παράθυρο που χρησιμοποιείται είναι διαστάσεων 3x3. Για να υπολογιστούν σε αυτήν την περίπτωση οι τιμές των pixels που βρίσκονται στα άκρα της εικόνας υπάρχουν κάποιες προσεγγίσεις από τις οποίες υιοθετείται η συμπλήρωση του περιγράμματος της εικόνας με επαρκή αριθμό μηδενικών (οπότε προστίθεται ένα περίγραμμα με μηδενικά στην εικόνα προκειμένου να γίνουν οι σχετικοί υπολογισμοί). Τέλος πρέπει να σημειωθεί ότι επειδή ο μέσος όρος που υπολογίζεται με βάση τον παραπάνω περιγραφέν τρόπο δεν είναι πάντα ακέραιος αριθμός, γίνεται κάθε φορά στρογγυλοποίηση στο κοντινότερο grey level.


function y = avgfilter2d(x)

%Συνάρτηση που υλοποιεί το φίλτρο μέσου όρου

%ΠΑΡΑΤΗΡΗΣΕΙΣ : 1. Χρησιμοποιείται παράθυρο μεγέθους 3x3
% 2. Προσθέτουμε μηδενικά (zero padding) στα άκρα της εικόναςπροκειμένου να μπορέσουμε
% να υπολογίσουμε τις τιμές των pixels στα άκρα της αρχικής εικόνας
% 3. Γίνεται στρογγυλοποίηση στο κοντινότερο grey level

n1 = size(x,1);
n2 = size(x,2);
y = zeros(n1+2,n2+2);
y(2:n1+1,2:n2+1) = x;
for i = 2:n2+1
   for j = 2:n1+1
      (i,j) = round(sum(sum(y(i-1:i+1,j-1:j+1)))/9);
   end
end
y = y(2:n1+1,2:n2+1);

Tο παραπάνω φίλτρο εφαρμόζεται στις Εικόνες 1 και 2. Tα αποτελέσματα που προκύπτουν παρουσιάζονται ακολούθως (Εικόνες 3 και 4 αντίστοιχα). Όπως μπορεί να παρατηρηθεί, τα αποτελέσματα δεν είναι και τόσο ικανοποιητικά. Σίγουρα η ποιότητα των εικόνων έχει βελτιωθεί, αλλά ο θόρυβος που στις αρχικές εικόνες είναι πολύ έντονος δεν έχει εξαληφθεί, απλά έχει μειωθεί κάπως η αντίθεση του σε σχέση με το περιεχόμενο της εικόνας. Αυτό που παρατηρείται στις εικόνες που έχουν προκύψει μετά το φιλτράρισμα είναι ότι πλέον οι κουκίδες του θορύβου (στίγματα) που υπήρχαν στις αρχικές εικόνες δεν έχουν εξαληφθεί, απλά το χρώμα τους είναι πλέον πιο κοντά στα χρώματα των γειτονικών pixels δημιουργώντας έτσι μικρότερη αντίθεση στο οπτικό αποτέλεσμα.


Εικόνα 3. Η Εικόνα 1 μετά από επεξεργασία με το φίλτρο μέσου όρου.


Εικόνα 4. H Εικόνα 2 μετά από επεξεργασία με το φίλτρο μέσου όρου.


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


Φίλτρο Μεσαίου

Πέρα από το φίλτρο μέσου όρου, για την αποκατάσταση των εικόνων μπορεί να χρησιμοποιηθεί και κάποιο μη γραμμικό χαμηλοπερατό φίλτρο, το φίλτρο μεσαίου (median), με στόχο την εξάλειψη του θορύβου αλλά παράλληλα την διατήρηση των λεπτομερειών και των περιγραμμάτων των εικόνων. Το φίλτρο μεσαίου βασίζεται στην διάταξη των δεδομένων. Αν έχουμε n παρατηρήσεις (n περιττός) και τις διατάξουμε σε αύξουσα σειρά από το μικρότερο στο μεγαλύτερο, τότε ως μεσαίος ορίζεται η παρατήρηση εκείνη που βρίσκεται στο μέσο της διάταξης, όχι η μεσαία τιμή ή ο μέσος όρος. Για παράδειγμα αν έχουμε τους αριθμούς 0,0,0,0,0,6,8,12,14 (είναι ήδη διαταγμένοι) τότε ο μεσαίος είναι το 0.

Πιο φορμαλιστικά, αν θεωρήσουμε n στοιχεία xi, i = 1,...,n (n περιττός) διατεταγμένα από το μικρότερο στο μεγαλύτερο, τότε το στοιχείο που βρίσκεται στην μεσαία θέση της διάταξης ονομάζεται μεσαίος (συμβολίζεται με med(xi)) και είναι το στοιχείο εκείνο που ελαχιστοποιεί την L1 νόρμα :

Από την παραπάνω σχέση, ο μεσαίος είναι ο εκτιμητής της μέγιστης πιθανοφάνειας (maximum likelihood) της θέσης, αν τα δεδομένα ακολουθούν κάποια κατανομή όπως η Laplace. Ένα διδιάστατο φίλτρο μεσαίου έχει τον ακόλουθο ορισμό :

όπου με Z2 = Z x Z δηλώνεται το επίπεδο της εικόνας και το Α (υποσύνολο του Z2) είναι το παράθυρο του φίλτρου που χρησιμοποιείται.

Για την υλοποίηση του φίλτρου μεσαίου, θεωρείται όπως και στην προηγούμενη περίπτωση ένα παράθυρο μεγέθους n x m (n, m περιττοί αριθμοί) με κέντρο κάθε φορά ένα pixel της εικόνας. Υπολογίζεται ο μεσαίος των τιμών όλων των pixels του παραθύρου και ο μεσαίος που προκύπτει είναι η νέα τιμή του κεντρικού pixel του παραθύρου. Η διαδικασία αυτή πραγματοποιείται για όλα τα pixels της εικόνας, εκτός από εκείνα στα άκρα της εικόνας για τα οποία δεν μπορεί να σχηματιστεί το παράθυρο με κέντρο αυτά.

Προφανώς η σχέση που παρουσιάστηκε παραπάνω, δεν μπορεί να ισχύσει για τα ακραία pixels της εικόνας. Για να εφαρμοστεί το φίλτρο σε αυτά τα pixels υπάρχουν δυο προσεγγίσεις. Η μία είναι να αποκοπεί κατάλληλα το παράθυρο Α του φίλτρου και η άλλη είναι να συμπληρωθεί η εικόνα με επαρκή αριθμό νέων δειγμάτων (pixels στα άκρα της εικόνας) ώστε να μπορεί να εφαρμοστεί το παράθυρο Α.

Η προσέγγιση που έχει ακολουθηθεί στην υλοποίηση που παρουσιάζεται παρακάτω είναι η δεύτερη. Το περίγραμμα της εικόνας συμπληρώνεται με επαρκή αριθμό μηδενικών (μαύρα pixels) ώστε να μπορεί να εφαρμοστεί το φίλτρο. Εφόσον έχει επιλεγεί ένα παράθυρο 3x3 αρκεί να προστεθούν μόνο μια σειρά από τέτοια pixels σε κάθε άκρο της εικόνας. Μια τελευταία παρατήρηση σχετικά με την υλοποίηση. Όπως αναφέρθηκε, το φίλτρο στηρίζεται στην διάταξη των στοιχείων. Άρα για την υλοποίηση του χρειάζεται ένας αλγόριθμος διάταξης (sorting) των στοιχείων του εκάστοτε παραθύρου. Προφανώς οποιοσδήποτε τέτοιος αλγόριθμος μπορεί να χρησιμοποιηθεί (π.χ. Heapsort, Quicksort, Mergesort, Bubblesort κτλ). Για λόγους απλότητας, στην συγκεκριμένη περίπτωση δε έχει υλοποιηθεί κάποιος τέτοιος αλγόριθμος αλλά γίνεται χρήση της ενσωματωμένης συνάρτησης του MATLAB, sort().


function y = medianfilter2d(x)

%Συνάρτηση που υλοποιεί το φίλτρο μεσαίου
%ΠΑΡΑΤΗΡΗΣΕΙΣ : 1. Χρησιμοποιείται παράθυρο μεγέθους 3x3
% 2. Προσθέτουμε μηδενικά (zero padding) στα άκρα της εικόνας προκειμένου να μπορέσουμε να υπολογίσουμε
% τις τιμές των pixels στα άκρα της αρχικής εικόνας


n1 = size(x,1);
n2 = size(x,2);
y = zeros(n1+2,n2+2);
y(2:n1+1,2:n2+1) = x;

for i = 2:n2+1
   for j = 2:n1+1
      winvec(1,1:3) = y(i-1,j-1:j+1);
      winvec(1,4:6) = y(i,j-1:j+1);
      winvec(1,7:9) = y(i+1,j-1:j+1);
      %το διάνυσμα winvec περιέχει τις τιμές όλων των pixels του παραθύρου
      %οπότε ο median θα είναι το μεσαίο στοιχείο του διανύσματος

      sortvec = sort(winvec);
   end
end

y = y(2:n1+1,2:n2+1);

H εφαρμογή του παραπάνω φίλτρου στις Εικόνες 1 και 2 δίνει τα ακόλουθα αποτελέσματα :


Εικόνα 5. Η Εικόνα 1 μετά από επεξεργασία με το φίλτρο μεσαίου.


Εικόνα 6. H Εικόνα 2 μετά από επεξεργασία με το φίλτρο μεσαίου.


Όπως μπορεί να παρατηρηθεί το αποτέλεσμα είναι πάρα πολύ ικανοποιητικό, ειδικά σε σύγκριση με το προηγούμενο φίλτρο. Τούτο συμβαίνει γιατί τα φίλτρα μεσαίου έχουν ορισμένες ενδιαφέρουσες ιδιότητες. Όπως έχει αναφερθεί είναι χαμηλοπερατά φίλτρα άρα έχουν την ιδιότητα να αφαιρούν το θόρυβο που εμφανίζεται κυρίως στις υψηλές συχνότητες. Επίσης επειδή ο μεσαίος είναι ένας ανθεκτικός εκτιμητής, ένα απλό σφάλμα (όπως π.χ. ένας μοναδιαίος παλμός) δεν επηρεάζει την επίδοση του φίλτρου, ακόμα και αν το μέγεθος του είναι πολύ μεγάλο ή πολύ μικρό. Αυτές οι ιδιότητες ανθεκτικότητας καθιστούν το φίλτρο μεσαίου κατάλληλο για την αφαίρεση κρουστικού θορύβου, πράγμα που αποδεικνύεται από την επιτυχία του φίλτρου στις παραμορφωμένες από κρουστικό θόρυβο Εικόνες 1 και 2. Επιπλέον άλλο ένα χαρακτηριστικό του φίλτρου αυτού είναι ότι έχει την τάση να διατηρεί τα περιγράμματα στην εικόνα. Το γεγονός αυτό έχει ως αποτέλεσμα να εμφανίζεται η εικόνα καλύτερη στο μάτι σε σχέση με το φίλτρο μέσου όρου που τείνει να εξομαλύνει τα περιγράμματα.

          ΣΥΝΟΔΕΥΤΙΚΑ ΑΡΧΕΙΑ.

1. Μπορείτε να κατεβάσετε τον κώδικα της συνάρτησης avgfilter2d από εδώ.
2. Μπορείτε να κατεβάσετε τον κώδικα της συνάρτησης medianfilter2d από εδώ.
3. Τα αρχεία των εικόνων 1 και 2 σε μορφή .mat είναι επίσης διαθέσιμα : nlenna.mat , nflowers.mat.

          ΠΗΓΕΣ.

1. Digital Image Processing, Second Edition - Rafael C. Gonzalez, Richard E. Woods
2. Ψηφιακή Επεξεργασία Εικόνας, Ιωάννης Πίττας









Αρχική Σελίδα | Αναζήτηση | Ομάδα Ανάπτυξης | Επικοινωνία | Όροι Χρήσης
TechArticles.GR @2005 | Some rights reserved