Skip to content

GeorgeDimos/CE325-Image-Processing

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Image Processing

Στην παρούσα εργασία καλείστε να γράψετε ένα πρόγραμμα επεξεργασίας εικόνας. Μπορείτε να φανταστείτε μία εικόνα σαν ένα διδιάστατο πίνακα από εικονοστοιχεία (pixels), μεγέθους όσο και το μέγεθος της εικόνας. Για παράδειγμα, μία εικόνα 712x512 pixels αντιστοιχεί σε ένα διδιάστατο πίνακα από pixels 712 στηλών και 512 γραμμών (συνηθίζουμε να αναφέρουμε πρώτα το πλάτος και μετά το ύψος της εικόνας).

Η εικόνα τύπου RGB

Στον τύπο εικόνας RGB, κάθε εικονοστοιχείο απεικονίζει τις τιμές φωτεινότητας για τα τρία βασικά χρώματα κόκκινο, πράσινο και μπλε (γνωστά και ως RGB από τα αρχικά τωνλέξεων red, green, blue). Θεωρούμε ότι οι τιμές της φωτεινότητας είναι φυσικοί αριθμοίαπό 0 έως και MAX_ COLOR (συνήθως η τιμή του MAX_ COLOR είναι 255).

Παραδείγματα RGB τιμών είναι τα εξής:

  • Ένα κόκκινο pixel έχει RGB τιμές 255, 0, 0 (μέγιστη τιμή φωτεινότητας για τοκόκκινο και μηδέν για τα υπόλοιπα).
  • Ένα κίτρινο pixel προκύπτει από τις RGB τιμές 255, 255, 0 (το κίτρινο προκύπτειαπό τη μίξη του κόκκινου με το πράσινο χρώμα)
  • Ένα άσπρο pixel προκύπτει από τις RGB τιμές 255, 255, 255 (μέγιστη φωτεινότηταγια όλα τα χρώματα)
  • Ένα μαύρο pixel προκύπτει από τις RGB τιμές 0, 0, 0 (ελάχιστη φωτεινότητα γιαόλα τα χρώματα)

Η κλάση RGBPixel

Η κλάση RGBPixel περιγράφει ένα pixel που περιέχει την πληροφορία φωτεινότητας για τατρία βασικά χρώματα κόκκινο , πράσινο και μπλε. Η πληροφορία των τριών χρωμάτων αποθηκεύεται σε ένα private πεδίο τύπου int.

Η κλάση RGBImage

Η κλάση RGBImage υλοποιεί το interfaceImage. Τα εικονοστοιχεία της εικόναςαποτελούνται από αντικείμενα της κλάσης RGBPixel.

Μετατροπή της εικόνας σε ασπρόμαυρη (μέθοδος grayscale)

Μια ασπρόμαυρη (grayscale) εικόνα είναι μία εικόνα της οποίας οι τρείς RGB τιμές κάθεεικονοστοιχείου έχουν την ίδια τιμή. Για παράδειγμα οι RGB τιμές 0 0 0 αντιπροσωπεύουντο μαύρο χρώμα, οι τιμές 255 255 255 το λευκό και οι τιμές 128 128 128 τη συγκεκριμένη απόχρωση του γκρι. Η μέθοδος μετατρέπει τα pixels της εικόνας σε grayscale με βάση την παρακάτω φόρμουλα

Gray = Red * 0.3 + Green * 0.59 + Blue * 0.11

Διπλασιασμός του μεγέθους της εικόνας (μέθοδος doublesize)

Η μέθοδος διπλασιάζει το μέγεθος της εικόνας. Για τον διπλασιασμό τηςεικόνας απαιτείται η φωτεινότητα του εικονοστοιχείου στη τυχαία θέση row, col να αντιγράφεται στις θέσεις

  • 2*row, 2*col
  • 2*row+1, 2*col
  • 2*row, 2*col+1
  • 2*row+1, 2*col+1
Υποδιπλασιασμός του μεγέθους της εικόνας (μέθοδος halfsize)

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

  • 2*row, 2*col
  • 2*row+1, 2*col
  • 2*row, 2*col+1
  • 2*row+1, 2*col+1
Περιστροφή δεξιόστροφα κατά 90° (μέθοδος rotateClockwise)

Η μέθοδος περιστρέφει την εικόνα κατά 90° δεξιόστροφα.

To format PPM για εικόνες τύπου RGB

Στην παρούσα εργασία θα χρησιμοποιήσετε για διάβασμα από αρχείο και αποθήκευση σεαρχείο έγχρωμες εικόνες που είναι αποθηκευμένες σε μορφή κειμένου και έχουν κατάληξη .PPM (PPM format). Η μορφή ενός αρχείου PPM έχει ως εξής:

  1. Ξεκινάει με το αλφαριθμητικό P3.
  2. Ακολουθεί ένας ακέραιος που αντιστοιχεί στο πλάτος της εικόνας (σεεικονοστοιχεία).
  3. Ακολουθεί ένας ακέραιος που αντιστοιχεί στο ύψος της εικόνας (σε εικονοστοιχεία).
  4. Ακολουθεί ένας ακέραιος που αντιστοιχεί στη μέγιστη τιμή φωτεινότητας τηςεικόνας.

Τα σημεία 1-4 αποτελούν την κεφαλίδα του αρχείου.

  1. Στη συνέχεια για κάθε εικονοστοιχείο εμφανίζονται 3 ακέραιοι για τα τρία RGB χρώματα κόκκινο, πράσινο και μπλε με τη σειρά. Το αρχείο ξεκινά με την πληροφορία του επάνω αριστερού εικονοστοιχείου (θεωρούμε ως πρώτη σειρά εικονοστοιχείων, την κορυφαία σειρά), έπεται το αμέσως δεξιότερο εικονοστοιχείο, μέχρι να φτάσουμε στο δεξιότερο στοιχείο της κορυφαίας σειράς. Στη συνέχεια το αρχείο συνεχίζει από τον αριστερότερο στοιχείο της επόμενης σειράς κ.ο.κ.

Για παράδειγμα, εάν έχουμε μία εικόνα μεγέθους 25x25 εικονοστοιχείων στο αρχείο θα έχουμε αποθηκευμένους 25x25x3 ακεραίους που αντιστοιχούν στην πληροφορία των εικονοστοιχείων της εικόνας. Είναι προφανές ότι η τιμή κάθε ακεραίου δεν πρέπει να υπερβαίνει τη μέγιστη τιμή φωτεινότητας που ορίστηκε στην αρχή του αρχείου (στο σημείο 4).

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

Η κλάση UnsupportedFileFormatException

Η κλάση UnsupportedFileFormatException είναι απόγονος της κλάσης java.lang.Exception . Ένα exception αυτού του τύπου δημιουργείται όταν επιχειρούμε να διαβάσουμε ένα αρχείο εικόνας το οποίο είναι διαφορετικού τύπου από αυτό που θέλουμε.

Η κλάση PPMImage

H κλάση PPMImage κληρονομεί την κλάση RGBImage.

Η διαδικασία photo stacking

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

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

Επεξήγηση: Υποθέτοντας ότι ο θόρυβος ακολουθεί κανονική κατανομή , εάν πάρουμε ένααρκετά μεγάλο δείγμα εικόνων ο θόρυβος τείνει να εξαφανιστεί, καθώς η μέση τιμή τουείναι 0.

Η εικόνα YUV

Μία εικόνα YUV είναι μία εικόνα της οποίας κάθε pixel περιγράφεται από τις τρεις τιμές ακέραιες τιμές Y, U και V.

Μετατροπή μεταξύ RGB σε YUV και αντίστροφα

Υπάρχει η δυνατότητα μετατροπής ενός pixel από RGB σε YUV και αντίστροφα. Οι συναρτήσεις μετατροπής ενός RGB pixel σε YUV δίνονται παρακάτω:

  • Y = ( ( 66 * R + 129 * G + 25 * B + 128) >> 8) + 16
  • U = ( ( -38 * R - 74 * G + 112 * B + 128) >> 8) + 128
  • V = ( ( 112 * R - 94 * G - 18 * B + 128) >> 8) + 128

Αντίστοιχα, οι συναρτήσεις μετατροπής ενός YUV pixel σε RGB είναι οι εξής:

  • C = Y - 16
  • D = U - 128
  • E = V - 128
  • R = clip(( 298 * C + 409 * E + 128) >> 8)
  • G = clip(( 298 * C - 100 * D - 208 * E + 128) >> 8)
  • B = clip(( 298 * C + 516 * D + 128) >> 8)

Η συνάρτηση clip κάνει το εξής: εάν η τιμή εισόδου της είναι αρνητική την κάνει 0, ενώ εάν είναι μεγαλύτερη από 255 την κάνει 255.

Σημείωση: Κατά την μετατροπή YUV σε RGB μπορείτε να υποθέτετε με ασφάλεια ότι η μέγιστη τιμή φωτεινότητας της RGB εικόνας είναι 255.

Το format αρχείου YUV

Τα αρχεία YUV έχουν κατάληξη .yuv. Η μορφή ενός αρχείου YUV έχει ως εξής:

  1. Ξεκινάει με το αλφαριθμητικό YUV3.
  2. Ακολουθεί ένα αλφαριθμητικό που αντιπροσωπεύει ένα ακέραιο που αντιστοιχεί στοπλάτος της εικόνας (σε εικονοστοιχεία).
  3. Ακολουθεί ένα αλφαριθμητικό που αντιπροσωπεύει ένα ακέραιο που αντιστοιχεί στούψος της εικόνας (σε εικονοστοιχεία).

Τα σημεία 1-3 αποτελούν την κεφαλίδα του αρχείου.

  1. Στη συνέχεια για κάθε εικονοστοιχείο εμφανίζονται 3 αλφαριθμητικά (ακέραιοι) γιατις τρεις Y, U, V τιμές του εικονοστοιχείου. Το αρχείο ξεκινά με την πληροφορία του επάνω αριστερού εικονοστοιχείου (θεωρούμε ως πρώτη σειρά εικονοστοιχείων, την κορυφαία σειρά), έπεται το αμέσως δεξιότερο εικονοστοιχείο, μέχρι να φτάσουμεστο δεξιότερο στοιχείο της κορυφαίας σειράς. Στη συνέχεια το αρχείο συνεχίζει από τον αριστερότερο στοιχείο της επόμενης σειράς κ.ο.κ.
Το format YUV ορίζεται στο πλαίσιο της εργασίας και δεν μπορείτε να το δείτε με τηβοήθεια κάποιου προγράμματος προβολής εικόνων.

Η κλάση YUVPixel

Η κλάση YUVPixel αντιπροσωπεύει τις τιμές ενός pixel στο σύστημα YUV.

Η κλάση YUVImage

Η κλάση YUVImage αντιπροσωπεύει μία εικόνα στο σύστημα YUV. Τα εικονοστοιχεία της εικόνας αποτελούνται από αντικείμενα της κλάσης YUVPixel.

Εξισορρόπηση ιστογράμματος

Τι είναι το ιστόγραμμα μιας εικόνας

Για να κατανοήσετε την έννοια του ιστογράμματος υποθέστε ότι έχετε μία ασπρόμαυρη εικόνα, δηλαδή μία εικόνα που οι τιμές RGB για κάθε pixel είναι ίδιες. Το ιστόγραμμα δημιουργείται εάν σε ένα πίνακα εύρους 256 (από 0 έως MAX_COLOR → 255),τοποθετήσουμε στη θέση f τον αριθμό των εικονοστοιχείων της εικόνας με τιμή φωτεινότητας f . Το ιστόγραμμα αποτελεί την κατανομή της φωτεινότητας των εικονοστοιχείων της εικόνας.

Ιστόγραμμα έγχρωμων εικόνων

Σε εικόνες τύπου RGB το ιστόγραμμα είναι δύσκολο να οριστεί, καθώς και οι τρεις τιμές RGB συμβάλλουν στην φωτεινότητα. Για τον λόγο αυτό προτιμάμε την μετατροπή τηςεικόνας σε YUV και τον υπολογισμό του ιστογράμματος πάνω στην παράμετρο Y που αποτελεί τον μέτρο της φωτεινότητας της εικόνας.

Εξισορρόπησης ιστογράμματος

Συχνά μία εικόνα εμφανίζεται σκοτεινή και συγκεκριμένα τμήματα της είναι δυσδιάκριτα. Η ευκρίνεια της εικόνας μπορεί να βελτιωθεί σημαντικά εάν το ιστόγραμμα διευρυνθεί ώστενα “απλώσει”.

Η διαδικασία της εξισορρόπησης του ιστογράμματος έχει ως εξής:

  1. Με βάση το ιστόγραμμα, υπολογίζουμε την κατανομή πιθανότητας της φωτεινότητας των εικονοστοιχείων της εικόνας.
  2. Με βάση το βήμα 1 υπολογίζουμε την αθροιστική κατανομή πιθανότητας, δηλαδή την πιθανότητα ένα pixel να έχει τιμή φωτεινότητας μικρότερη ή ίση της τιμής Χ. Η τιμή αποθηκεύεται στη θέση Χ του πίνακα αθροιστικής πιθανότητας.
  3. Επιλέγουμε τη μέγιστη τιμή φωτεινότητας την οποία θέλουμε να έχει η νέα εικόνα. Στο σύστημα YUV, η μέγιστη τιμή φωτεινότητας είναι 235 (δοκιμάστε στο λογιστικό φύλλο να βάλετε τιμές RGB 255, 255, 255 και δείτε ποια είναι η τιμή της παραμέτρου Υ). Επιλέξτε ως μέγιστη τιμή φωτεινότητας την τιμή 235.
  4. Πολλαπλασιάζουμε τον πίνακα που προκύπτει από το βήμα 2 (αθροιστική κατανομήπιθανότητας) με τη μέγιστη τιμή φωτεινότητας του βήματος 3 και αποθηκεύουμε την τιμή σε έναν πίνακα ακεραίων αποκόπτοντας έτσι το δεκαδικό μέρος του αριθμού που προκύπτει από το γινόμενο.
  5. Από τον βήμα 4 προκύπτει η προτεινόμενη μεταβολής της φωτεινότητας. Ας υποθέσουμε ότι στη θέση Χ του πίνακα ακεραίων που προκύπτει στο βήμα 4 είναι αποθηκευμένη η τιμή Υ. Με βάση το παραπάνω, όλα τα εικονοστοιχεία με φωτεινότητα X θα πρέπει να μετατραπούν σε εικονοστοιχεία με φωτεινότητα Υ. Μετασχηματίζοντας τη φωτεινότητα για όλα τα εικονοστοιχεία της εικόνας λαμβάνουμε την τελική YUV εικόνα η οποία είναι εξισορροπημένη ως προς το ιστόγραμμα της.

Παρατήρηση: Η εξισορρόπηση ιστογράμματος δεν μεταβάλλει τη χρώματα της εικόνας,παρά μόνο τη φωτεινότητα τους.

Αναλυτικά παραδείγματα για την εξισορρόπηση ιστογράμματος μπορείτε να δείτε εδώ και εδώ.

H κλάση Histogram

Η κλάση Histogram δημιουργεί το ιστόγραμμα μιας εικόνας YUV και διαθέτει τις κατάλληλες μεθόδους για την εξισορρόπηση του ιστογράμματος αυτού.

H μέθοδος equalize της κλάσης YUVImage

Η μέθοδος equalize της κλάσης YUVImage δημιουργεί μία νέα εξισορροποιημένη εικόνα σεσχέση με την αρχική εικόνα που περιείχε το αντικείμενο της κλάσης. Η αρχική εικόνα τουαντικειμένου αντικαθίσταται από την νέα.

About

Αντικειμενοστραφής Προγραμματισμός

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages