Προγραμματισμός Υπολογιστών με C++

Σχετικά έγγραφα
ΣΕΤ ΑΣΚΗΣΕΩΝ 3. Προθεσµία: 18/12/12, 22:00

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

Προγραμματισμός ΙI (Θ)

ΣΕΤ ΑΣΚΗΣΕΩΝ 3. Προθεσµία: 7/1/2014, 22:00

ΣΕΤ ΑΣΚΗΣΕΩΝ 4. Προθεσμία: 17/1/14, 22:00

Συνοπτικό εγχειρίδιο χρήσης του Microsoft Visual Studio 2010

1. Δεν μπορεί να γίνει κλήση μίας διαδικασίας μέσα από μία συνάρτηση.

Εισαγωγή στη γλώσσα προγραμματισμού C++

ΤΕΛΟΣ 1ΗΣ ΑΠΟ 5 ΣΕΛΙΔΕΣ

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr

21. ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ 4 - ΔΗΜΙΟΥΡΓΩΝΤΑΣ ΜΕ ΤΟ BYOB BYOB. Αλγόριθμος Διαδικασία Παράμετροι

ΣΕΤ ΑΣΚΗΣΕΩΝ 2. Προθεσµία: 25/11/12, 22:00

ΣΕΤ ΑΣΚΗΣΕΩΝ 4. Προθεσµία: 13/1/13, 22:00

Διάλεξη 2η: Αλγόριθμοι και Προγράμματα

Κεφάλαιο 1: Κίνηση και γεωμετρικά σχήματα

ΣΕΤ ΑΣΚΗΣΕΩΝ 4. Προθεσµία: 8/1/12, 22:00

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

Γραφικά υπολογιστών Εργαστήριο 10 Εισαγωγή στα Sprites

ΟΜΟΣΠΟΝΔΙΑ ΕΚΠΑΙΔΕΥΤΙΚΩΝ ΦΡΟΝΤΙΣΤΩΝ ΕΛΛΑΔΟΣ (Ο.Ε.Φ.Ε.) ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ 2019 Β ΦΑΣΗ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΔΙΑΓΩΝΙΣΜΑ ΠΡΟΣΟΜΟΙΩΣΗΣ 23/04/2012. Α. Να απαντήσετε με Σ ή Λ στις παρακάτω προτάσεις:

ΕΡΓΑΣΙΕΣ ΟΝΤΟΚΕΝΤΡΙΚΟΥ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Αναφορά (1/2) Μπορούμε να ορίσουμε μια άλλη, ισοδύναμη αλλά ίσως πιο σύντομη, ονομασία για ποσότητα (μεταβλητή, σταθερή, συνάρτηση, κλπ.

4 ο Εργαστήριο Τυχαίοι Αριθμοί, Μεταβλητές Συστήματος

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον

ΑΣΚΗΣΗ. Δημιουργία Ευρετηρίων Συλλογής Κειμένων

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

ΤΕΛΟΣ 1ΗΣ ΑΠΟ 5 ΣΕΛΙ ΕΣ

ΑΣΚΗΣΗ. Συγκομιδή και δεικτοδότηση ιστοσελίδων

Προγραμματιστικό Περιβάλλον

ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ Γ ΗΜΕΡΗΣΙΩΝ

β. Ποια είναι η «τιμή φρουρός» στο παρακάτω τμήμα αλγορίθμου γραμμένο σε «ψευδογλώσσα»; Διάβασε όνομα Όσο όνομα < > ΤΕΛΟΣ επανάλαβε Εμφάνισε όνομα

Ακρότατα πίνακα, χωρίς min, max, μόνο με pos

Πληροφορική & Τηλεπικοινωνίες. K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Εαρινό Εξάμηνο

Προγραμματισμός Ι. Προχωρημένα Θέματα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ΣΕΤ ΑΣΚΗΣΕΩΝ 2. Προθεσµία: 15/11/09, 23:59

ÁÎÉÁ ÅÊÐÁÉÄÅÕÔÉÊÏÓ ÏÌÉËÏÓ

ΟΜΟΣΠΟΝΔΙΑ ΕΚΠΑΙΔΕΥΤΙΚΩΝ ΦΡΟΝΤΙΣΤΩΝ ΕΛΛΑΔΟΣ (Ο.Ε.Φ.Ε.) ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ 2019 Β ΦΑΣΗ Γ ΓΕΝΙΚΟΥ ΛΥΚΕΙΟΥ

Προγραμματισμός Η/Υ (ΤΛ2007 )

ΣΕΤ ΑΣΚΗΣΕΩΝ 3. Προθεσµία: Πέµπτη 17/12/2015, 22:00

3 ο Εργαστήριο Μεταβλητές, Τελεστές

1 ο Εργαστήριο Συντεταγμένες, Χρώματα, Σχήματα

Πως θα αποθηκεύσει τη λίστα με τα ψώνια του και θα την ανακτήσει στο Σ/Μ; και πως θα προσθέσει στη λίστα του επιπλέον προϊόντα;

1. Δεν μπορεί να γίνει κλήση μίας διαδικασίας μέσα από μία συνάρτηση.

Εισαγωγή στο περιβάλλον Code::Blocks

Δομή Προγράμματος C++, Χειρισμός Μεταβλητών και Συναρτήσεις Εισόδου - Εξόδου

ΑΡΧΗ 1ης ΣΕΛΙΔΑΣ ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ : ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΤΑΞΗ / ΤΜΗΜΑ : Γ ΛΥΚΕΙΟΥ ΔΙΑΓΩΝΙΣΜΑ ΠΕΡΙΟΔΟΥ : ΜΑΪΟΣ 2018 ΣΥΝΟΛΟ ΣΕΛΙΔΩΝ : 7 (ΕΠΤΑ)

ΘΕΜΑ Α. Α2. Να αναφέρετε από τι εξαρτάται η επιλογή του καλύτερου αλγορίθμου ταξινόμησης. Μονάδες 4. Σελίδα 1 από 8

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client

ΘΕΜΑ Α ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ

Εισαγωγή στην PHP. ΕΣΔ 516 Τεχνολογίες Διαδικτύου. Περιεχόμενα. Περιεχόμενα. ΕΣ 516: Τεχνολογίες ιαδικτύου. ΕΣ 516: Τεχνολογίες ιαδικτύου

Μεταβλητές. Για περισσότερες λεπτομέρειες πάνω στις μεταβλητές θα ήταν χρήσιμο να διαβάσεις το

ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 1

ΣΕΤ ΑΣΚΗΣΕΩΝ 2. Προθεσµία: 27/11/11, 22:00

Α2. Να γράψετε στο τετράδιο σας τον αριθμό 1-4 κάθε πρότασης και δίπλα το γράμμα που δίνει τη σωστή επιλογή.

ΑΣΚΗΣΗ 2 ΒΑΣΙΚΑ ΚΑΙ ΣΥΝΘΕΤΑ ΣΗΜΑΤΑ ΔΥΟ ΔΙΑΣΤΑΣΕΩΝ - ΕΙΚΟΝΑΣ

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

Άσκηση 3 (ανακοινώθηκε στις 24 Απριλίου 2017, προθεσμία παράδοσης: 2 Ιουνίου 2017, 12 τα μεσάνυχτα).

> μεγαλύτερο <= μικρότερο ή ίσο < μικρότερο == ισότητα >= μεγαλύτερο ή ίσο!= διαφορετικό

ΘΕΜΑ Α ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ

Unity Editor #04 Κεντρικό Μενού: Edit, Unity Preferences

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 11 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

Διαδικασιακός Προγραμματισμός

ΑΡΧΗ 1ης ΣΕΛΙΔΑΣ. ii) Πόσες φορές θα εκτελεστεί η εντολή ΔΙΑΒΑΣΕ Α[μ,λ] στον αλγόριθμο της προηγούμενης ερώτησης; α) 35 β) 12 γ) 20

Πρόβλημα 37 / σελίδα 207

Βασικά ζητήματα μιας βάσης δεδομένων

ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΣΥΝΟΛΟ ΣΕΛΙΔΩΝ: ΕΞΙ (6)

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον

ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ Γ ΗΜΕΡΗΣΙΩΝ

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών

ΠΑΝΕΛΛΑΔΙΚΕΣ ΕΞΕΤΑΣΕΙΣ Δ' ΤΑΞΗΣ ΕΣΠΕΡΙΝΟΥ ΓΕΝΙΚΟΥ ΛΥΚΕΙΟΥ ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΠΡΟΣΑΝΑΤΟΛΙΣΜΟΥ

Μεθοδολογία Επίλυσης Προβλημάτων ============================================================================ Π. Κυράνας - Κ.

Ανάλυση εικόνων DSLR με το πρόγραμμα IRIS

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Χειμερινό Εξάμηνο M. Χατζόπουλος. Προθεσμία: 19/01/2015

ΘΕΜΑ Α. Μονάδες 10 Α2.

Μεταπτυχιακό Πρόγραμμα «Γεωχωρικές Τεχνολογίες» Ψηφιακή Επεξεργασία Εικόνας. Εισηγητής Αναστάσιος Κεσίδης

Η Απάντηση. Ενδεικτικές Απαντήσεις Φύλλου Εργασίας. Μηνύματα. 1. Πληκτρολογήστε την εντολή:

Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών: Εργαστηριακή Άσκηση

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Διαδικασιακός Προγραμματισμός

Group (JPEG) το 1992.

καθώς και το παρακάτω τμήμα αλγορίθμου γραμμένο σε «ΓΛΩΣΣΑ»:

ΘΕΜΑ Α. 1. Η δυαδική αναζήτηση χρησιμοποιείται μόνο σε ταξινομημένες συλλογές δεδομένων.

ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ Γ ΤΑΞΗΣ ΗΜΕΡΗΣΙΩΝ & Δ ΤΑΞΗΣ ΕΣΠΕΡΙΝΩΝ ΥΠΟΛΕΙΠΟΜΕΝΕΣ ΠΑΝΕΛΛΑΔΙΚΕΣ ΕΞΕΤΑΣΕΙΣ HMEΡΗΣΙΩΝ ΚΑΙ ΕΣΠΕΡΙΝΩΝ ΕΠΑΓΓΕΛΜΑΤΙΚΩΝ ΛΥΚΕΙΩΝ

Προγραμματισμός Υπολογιστών & Εφαρμογές Python. Κ.Π. Γιαλούρης

ΗΥ220: Εργαστήριο Ψηφιακών Κυκλωµάτων Τµήµα Επιστήµης Υπολογιστών Πανεπιστήµιο Κρήτης Χειµερινό Εξάµηνο

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ ΟΝΟΜΑΤΕΠΩΝΥΜΟ:

Κεφ. 2 Θέματα Θεωρητικής Επιστήμης Υπολογιστών. Κοντογιάννης Βασίλειος ΠΕ19

8 FORTRAN 77/90/95/2003

Γεώργιος Δ. Παλτεζανάκης

Οδηγός Εγκατάστασης και Χρήσης του Arebas Easy

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ ΟΝΟΜΑΤΕΠΩΝΥΜΟ:

ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ Γ ΗΜΕΡΗΣΙΩΝ

an:3 are:6 a:10

Σενάριο 18: Ραβδογράμματα Πληθυσμού

Ταξινόμηση Δεδομένων. 9 η Εργαστηριακή Άσκηση (Excel)

Εργαστήριο 10 Πίνακες. Πίνακες. Η έννοια της δόμησης δεδομένων στη PASCAL. Σκοπός

turnin Lab2.hs

Transcript:

Προγραμματισμός Υπολογιστών με C++ 3 η Εργασία Ακαδημαϊκό Έτος 206-7 Ημερομηνία Παράδοσης Εργασίας: 5 Ιανουαρίου 207. Εκφώνηση Να χρησιμοποιηθεί ο κώδικας που αναπτύξατε στις 2 προηγούμενες εργασίες για τη δημιουργία μιας νέας εφαρμογής η οποία αφού φορτώσουμε μια εικόνα ppm, θα εφαρμόζει πάνω σε αυτή μια σειρά από φίλτρα επεξεργασίας εικόνας σύμφωνα με τις προδιαγραφές που περιγράφονται στη συνέχεια. Ο τύπος, ο αριθμός και η σειρά των φίλτρων εικόνας που θα επενεργούν πάνω στην εικόνα προσδιορίζονται από τα ορίσματα της εφαρμογής. Η τροποποιημένη εικόνα θα πρέπει να αποθηκεύεται σε αρχείο ppm κι αυτή, αφού πρώτα αλλαχθεί το όνομα αρχείου παρεμβάλλοντας τη συμβολοσειρά.filtered μεταξύ της κατάληξης του αρχείου και του υπόλοιπου ονόματός του. Το πρόγραμμά σας θα πρέπει να έχει το όνομα filter.exe και η εκτέλεσή του από τη γραμμή εντολών γίνεται σύμφωνα με το παράδειγμα που ακολουθεί: > filter -f blur -f diff -f gray image0.ppm Στην παραπάνω γραμμή εντολών, μετά το όνομα του εκτελέσιμου, ακολουθούν ζεύγη ορισμάτων -f [όνομα φίλτρου], τόσα όσα τα φίλτρα που θέλουμε να εφαρμόσουμε πάνω στην εικόνα image0.ppm. Η σειρά εφαρμογής των φίλτρων είναι blur, μετά diff και τέλος gray. H εφαρμογή γράφει στο δίσκο την τελική εικόνα με όνομα image0.filtered.ppm. Γενικά, ο τρόπος εκτέλεσης του προγράμματος ακολουθεί το παρακάτω μοτίβο: filter -f [φίλτρο] -f [φιλτρο2] -f [φίλτρο k] [όνομα αρχείου εικόνας] Ο αριθμός των φίλτρων που θα εφαρμόσουμε δεν είναι καθορισμένος και ένα φίλτρο μπορεί να επαναλαμβάνεται, π.χ: > filter -f blur -f blur -f blur f gray image0.ppm Το αρχείο εικόνας εισόδου δίνεται πάντα τελευταίο. Αν δε δοθεί φίλτρο, η εφαρμογή πρέπει να τερματίζει χωρίς να κάνει τίποτα. Αν δεν προσδιοριστεί αρχείο ή δε δοθεί το όνομα κάποιου φίλτρου σωστά (ή καθόλου), η εφαρμογή πρέπει να βγάζει σχετικό μήνυμα λάθους και να τερματίζει. Τα διαθέσιμα φίλτρα είναι: gray, color, blur, diff, median. Ειδικά για το φίλτρο color, ακολουθούν 3 επιπλέον ορίσματα που προσδιορίζουν τις 3 συνιστώσες χρώματος (RGB). Επομένως, αν συμπεριλαμβάνεται ένα color φίλτρο στα ορίσματα, αυτά έχουν τη μορφή του ακόλουθου παραδείγματος: filter -f gray -f color 0.7 0.5 0.4 -f blur image02.ppm Εδώ, μετά τη λέξη color, περιμένουμε να διαβάσουμε την κόκκινη, πράσινη και μπλε συνιστώσα του χρώματος που χρειάζεται το φίλτρο για να δουλέψει. Ο κώδικάς σας θα πρέπει να συνοδεύεται από σχόλια σε μορφή Doxygen με τα οποία θα πρέπει να παράγεται αυτόματα η τεκμηρίωση του κώδικα σε μορφή HTML όταν περάσετε τον κώδικά σας μέσα από το εργαλείο DoxyWizard.

Ακολουθεί εξήγηση για το τι είναι και πως δουλεύουν τα φίλτρα που χρειαζόμαστε. 2. Φίλτρα εικόνας Για να επεξεργαστούμε μια εικόνα και να αλλάξουμε τα χρωματικά και μορφολογικά της χαρακτηριστικά, εφαρμόζουμε συχνά σε κάθε εικονοστοιχείο της (pixel) έναν τελεστή, που μετασχηματίζει τη χρωματική πληροφορία του σε μια νέα. Αυτός ο μετασχηματισμός μπορεί να είναι τοπικός, δηλαδή να παράγει μια νέα τιμή χρώματος με βάση μόνο την παλιά, ή να εξαρτάται κι από άλλα pixels, συνήθως γειτονικά. Στην εφαρμογή μας, θα δούμε 2 φίλτρα τοπικά (gray, color) και 3 φίλτρα που επηρεάζουν ένα pixel με βάση μια 3Χ3 γειτονιά με κέντρο το pixel αυτό (blur, diff, median). 2. Τοπικά Φίλτρα gray. Όταν το φίλτρο που συναντήσουμε στη γραμμή εντολών έχει όνομα gray, τότε δημιουργούμε μια νέα έκδοση της εικόνας που κάθε pixel της p (i, j) = R (i, j), G (i, j), B (i, j) γίνεται: μ = p (i, j) = (μ, μ, μ) R(i, j) + G(i, j) + B(i, j) 3 Όπου R(i, j), G(i, j), B(i, j) το αρχικό χρώμα p του pixel της εικόνας εισόδου στο φίλτρο συντεταγμένες (i, j). Ο υπολογισμός αυτός επαναλαμβάνεται για κάθε pixel της εικόνας. Παράδειγμα εφαρμογής του φίλτρου gray. color. Το δεύτερο φίλτρο που θα πρέπει να υλοποιηθεί, δημιουργείται και επενεργεί πάνω στην εικόνα όταν συναντήσουμε στα ορίσματα το όνομα φίλτρου color. Όπως ειπώθηκε, πάντα μετά το όρισμα color πρέπει να ακολουθούν 3 ακόμα παράμετροι που προσδιορίζουν το χρώμα c = (R c, G c, B c ) που θα εφαρμόσει το φίλτρο μας, πολλαπλασιαστικά πάνω στο αντίστοιχο χρώμα κάθε pixel: p (i, j) = c p(i, j) = (R c R(i, j), G c G(i, j), B c B(i, j))

Χ Παράδειγμα εφαρμογής του φίλτρου color. 2.2 Φίλτρα Γειτονιάς Για κάθε pixel (i, j) της τελικής εικόνας, τα φίλτρα γειτονιάς χρησιμοποιούν μια περιοχή NXM pixels γύρω από τη θέση (i, j) της αρχικής εικόνας για να υπολογίσουν το χρώμα. Έτσι, μπορούν να «δουν» τι συμβαίνει στην ευρύτερη γειτονιά ενός σημείου μέσα στην εικόνα και όχι απομονωμένα σε ένα pixel. Πρόκειται για μια μεγάλη κατηγορία φίλτρων επεξεργασίας εικόνας με πολλούς χρήσιμους τελεστές. Στη συνέχεια θα δούμε αναλυτικά τις 2 οικογένειες φίλτρων που θα χρησιμοποιήσουμε στην εργασία. blur. Όταν στη γραμμή εντολών συναντήσουμε ως όρισμα φίλτρου τη λέξη blur, δημιουργούμε ένα φίλτρο το οποίο με κέντρο κάθε pixel (i, j) της εικόνας προορισμού, διαβάζει μια περιοχή 3Χ3 pixels της εικόνας εισόδου του φίλτρου και θέτει ως χρώμα του pixel (i, j) το μέσο όρο των 9 χρωμάτων του 3Χ3 block. Δηλαδή, υλοποιεί τον τελεστή: p (i, j) = 9 m= p(i + m, j + n) n= Για παράδειγμα, μπορείτε να δείτε στην παρακάτω εικόνα ότι αντικαθιστώντας στην εικόνα αποτέλεσμα κάθε pixel με το μέσο όρο της γειτονιάς του, «αμβλύνεται» (θολώνεται - blur) η χρωματική πληροφορία:

Στα φίλτρα γειτονιάς, όπως το φίλτρο μέσου όρου που είδαμε, τα άκρα της εικόνας χρειάζονται ιδιαίτερο χειρισμό, καθώς οι τιμές (i + m, j + n) μπορούν να ξεπεράσουν τα όρια της εικόνας, αφού τα i, j ανήκουν στο διάστημα [0, width-], [0, height-] και τα m, n στο [-,]. Γι αυτό το λόγο, πρέπει να ελέγχουμε αν μια συντεταγμένη (i + m, j + n) είναι έγκυρη και μόνο τότε να προσμετράμε στο μέσο όρο το αντίστοιχο pixel. Αυτό σημαίνει αντίστοιχα ότι ο πληθυσμός με τον οποίο διαιρούμε το άθροισμα δεν είναι σταθερός (9), όπως στον παραπάνω απλό τύπο, αλλά ισούται με τον αριθμό των έγκυρων pixels. Έτσι, ο τελεστής του blur που πρέπει να χρησιμοποιήσετε γίνεται: p (i, j) = V(i + m, j + n) m= p(i + m, j + n)v(i + m, j + n) n= Όπου V(i + m, j + n) = όταν το pixel (i + m, j + n) είναι έγκυρο (εντός ορίων), διαφορετικά είναι 0. Παραστατικά, στην ακόλουθη εικόνα φαίνεται ποια pixels προσμετρώνται σε διαφορετικές περιπτώσεις. Σημείωση: Επειδή τα φίλτρα γειτονιάς για να υπολογίσουν την κεντρική τιμή χρησιμοποιούν τα γειτονικά pixels, πρέπει η εικόνα στην οποία γράφουμε να είναι διαφορετική από αυτή που διαβάζουμε, έστω και προσωρινό αντίγραφο. Διαφορετικά, θα επαναχρησιμοποιούμε καινούρια υπολογισμένα δεδομένα από τους γείτονες αντί για τα αρχικά. Για να θολώσουμε περισσότερο την εικόνα, μπορούμε να δηλώσουμε από τη γραμμή εντολών 2 ή περισσότερες φορές το φίλτρο blur: filter -f blur -f blur test.ppm

Παράδειγμα διαδοχικής εφαρμογής του φίλτρου blur, 2 φορές. diff και median. Και τα 2 αυτά φίλτρα είναι φίλτρα «ταξινόμησης»: Διαβάζουμε τις κόκκινες, πράσινες και μπλε συνιστώσες των χρωμάτων στην 3Χ3 γειτονιά και, χωριστά για κάθε κανάλι χρώματος, ταξινομούμε τις τιμές που διαβάσαμε. Το φίλτρο median επιλέγει ως χρωματική συνιστώσα την τιμή του μεσαίου στοιχείου της ταξινομημένης σειράς χρωματικών συνιστωσών. Το φίλτρο diff, υπολογίζει την τελική χρωματική συνιστώσα ως τη διαφορά της ελάχιστης από τη μέγιστη τιμή. Παράδειγμα. Έστω η παρακάτω 3Χ3 περιοχή με κέντρο ένα pixel: 20, 50, 5 0, 60, 7 0, 66, 6 50, 80, 3 72, 65, 4 60, 70, 7 50, 30, 2 75, 40, 9 66, 65, 5 Οι πίνακες των αταξινόμητων συνιστωσών είναι: 20, 0, 0, 50, 72, 60, 50, 75, 66 50, 60, 66, 80, 65, 70, 30, 40, 65 5, 7, 6, 3, 4, 7, 2, 9, 5 Και μετά την ταξινόμηση: 0, 0, 20, 50, 50, 60, 66, 72, 75 50, 60, 66, 30, 40, 65, 65, 70, 80 2, 3, 4, 5, 5, 6, 7, 7, 9

Οπότε, στο median φίλτρο το αποτέλεσμα είναι ένα χρώμα με το μεσαίο στοιχείο (5 ο εδώ) από κάθε ταξινομημένο πίνακα: (50, 40, 5) Αντίστοιχα, στο diff φίλτρο, το αποτέλεσμα είναι: (75-0, 80-50, 9-2) (65, 30, 7) Δεδομένου ότι όπως και στο φίλτρο blur, έτσι κι εδώ η περιοχή εφαρμογής του φίλτρου είναι μεταβλητή για να μην επιχειρήσουμε να διαβάσουμε άκυρα pixels εκτός εικόνας, η λίστα των στοιχείων που ταξινομούμε δεν έχει απαραίτητα ακριβώς 9 στοιχεία αλλά μέχρι 9 και το μεσαίο στοιχείο είναι το Ν/2 (ακέραια διαίρεση) με Ν το πλήθος των στοιχείων. Το αποτέλεσμα της εφαρμογής των 2 φίλτρων φαίνεται στο παρακάτω παράδειγμα. Το φίλτρο median βοηθάει στην απαλλαγή της εικόνας από θόρυβο, αφού κρατώντας τη μεσαία τιμή από ένα block εικόνας, ακραίες διακυμάνσεις απορρίπτονται. Αντίστοιχα, το φίλτρο diff κρατάει τις ακραίες διαφορές, αναδεικνύοντας έτσι ακμές και έντονες μεταβάσεις στην εικόνα. Φίλτρο median Φίλτρο diff

3. Οδηγίες Προγραμματισμού Είστε ελεύθεροι να χρησιμοποιήσετε όποιες έτοιμες βιβλιοθήκες κρίνετε σκόπιμο (π.χ. STL) και οποιαδήποτε κομμάτια κώδικα έχετε αναπτύξει στις προηγούμενες εργασίες. Σίγουρα θα χρειαστείτε τη λειτουργικότητα για την ανάγνωση και εγγραφή από/προς PPM και τις δομές Array και Image. Δεδομένου ότι όλα τα φίλτρα επενεργούν πάνω σε εικόνες με ενιαίο τρόπο, υλοποιήστε μια βασική abstract class Filter (σε ένα αρχείο filter.h) για να αποτελέσει κοινό κορμό για τα πιο εξειδικευμένα φίλτρα που θα κατασκευάσετε. Σχεδιάστε τις κλάσεις σας με τον πιο γενικό και επεκτάσιμο τρόπο. Μπορείτε να δημιουργήσετε sub-classes της Filter και μπορείτε - και πρέπει - να προσθέσετε πεδία και μεθόδους και στην ίδια την κλάση Filter. Για να εφαρμόσετε ένα φίλτρο πάνω σε μια εικόνα, σίγουρα θα χρειαστεί να φτιάξετε μια μέθοδο ή τελεστή (π.χ. <<) για να περνάτε στο φίλτρο μια εικόνα και να παίρνετε πίσω ένα αποτέλεσμα. Καλό είναι, η μέθοδος ή ο τελεστής που εφαρμόζει το φίλτρο πάνω στην εικόνα να επενεργεί πάνω σε μια αναφορά της εικόνας εισόδου, ανεξάρτητα από το αν εσωτερικά δημιουργείται κάποιο προσωρινό αντίγραφο της εικόνας για να δουλέψει σωστά το φίλτρο. Για τις ταξινομήσεις, μπορείτε να εκμεταλλευτείτε τις έτοιμες συναρτήσεις της STL (βλ. κεφαλίδα algorithm). Δείτε ότι η ταξινόμηση δουλεύει τόσο για απλούς πίνακες, όσο και για συλλογές. Χρησιμοποιήστε ο,τι κρίνετε καλύτερο. Δεδομένου ότι ο αριθμός των φίλτρων που εφαρμόζουμε σε μια εικόνα δεν είναι γνωστός εκ των προτέρων, αλλά καθορίζεται από τα ορίσματα που έχουμε δώσει στην εφαρμογή, πρέπει να μπορείτε να φτιάξετε στη main σας τις απαραίτητες δομές ελέγχου και συλλογές για να υλοποιείται τα κατάλληλα στιγμιότυπα φίλτρων και να τα εφαρμόζετε διαδοχικά πάνω στην εικόνα σας. Στην εργασία αυτή, πέρα από την αρτιότητα του αποτελέσματος, θα συνεκτιμηθεί και ο καλός σχεδιασμός και η πληρότητα του κώδικα. Κριτήριο Βαθμολογία Σωστός πολυμορφικός σχεδιασμός και επαναχρησιμοποίηση κώδικα (με bonus +0.3) 0.2 Υλοποίηση τοπικών φίλτρων 0.2 Υλοποίηση φίλτρων γειτονιάς 0.2 Υλοποίηση της κύριας εφαρμογής σύμφωνα με τις προδιαγραφές εκτέλεσης 0.2 Εκτέλεση του κώδικα με σωστή δέσμευση και αποδέσμευση μνήμης 0. Τεκμηρίωση του κώδικα σε μορφή HTML με την εφαρμογή Doxygen 0. 4. Τεκμηρίωση Κώδικα Να χρησιμοποιήσετε το εργαλείο Doxygen (http://www.doxygen.org/) για την αυτόματη εξαγωγή τεκμηρίωσης με βάση τα σχόλιά σας στον κώδικα. Οδηγίες σχετικά με τη σύνταξη των σχολίων ώστε να μπορούν να μεταγλωττιστούν σε τεκμηρίωση από το Doxygen μπορείτε να βρείτε στη σελίδα: http://www.doxygen.org/manual/docblocks.html

Αφού έχετε μορφοποιήσει τα σχόλιά σας σύμφωνα με τους κανόνες σύνταξης του Doxygen, κατεβάστε και τη σουίτα του Doxygen από την τοποθεσία: http://www.doxygen.org/download.html Τρέξτε την αυτοματοποιημένη εφαρμογή DoxyWizard και παραμετροποιήστε τη σύμφωνα με την τοποθεσία στο δίσκο που βρίσκεται ο κώδικάς σας, όπως περιγράφεται στις σχετικές οδηγίες: http://www.doxygen.org/manual/doxywizard_usage.html Με τις περισσότερες επιλογές δε χρειάζεται να ασχοληθείτε καθώς οι προεπιλεγμένες ρυθμίσεις είναι σε γενικές γραμμές εντάξει. Στο τέλος, απλά στο tab run πατήστε το ομώνυμο κουμπί για να επεξεργαστεί το Doxygen τον κώδικά σας και να συνθέσει την τεκμηρίωση. 5. Γενικές οδηγίες Για την υλοποίηση των προγραμμάτων, μπορείτε να χρησιμοποιήσετε όποιο περιβάλλον θέλετε αλλά ο κώδικας που θα παραδώσετε θα πρέπει να μπορεί να γίνει compile και link είτε με τον gcc σε περιβάλλον Windows, είτε με το Visual Studio 203/205, πάλι προφανώς σε περιβάλλον Windows. Παραδίδετε έτοιμο Visual Studio project ή αντίστοιχα makefile (για τον gcc) και όχι μόνο τα.cpp και.h αρχεία και έχετε επιβεβαιώσει ότι γίνονται σωστά build. Για τον έλεγχο του αποτελέσματος που βγάλατε, χρησιμοποιείστε την εφαρμογή (viewer) που σας παρέχεται. Εργάζεστε σε ομάδες των 2 ατόμων. Ειδικά για τους φοιτητές 5+ έτους, επιτρέπεται να παραδώσουν τις εργασίες και μόνοι τους αν το επιθυμούν. Προσοχή: Σε οποιαδήποτε περίπτωση διαπιστωθεί αντιγραφή κώδικα ή αδυναμία του εξεταζομένου φοιτητή να εξηγήσει την υλοποίησή του, η εργασία μηδενίζεται αυτομάτως. Επίσης, το εκτελέσιμο της εργασίας πρέπει να δουλεύει για να βαθμολογηθεί η τελευταία.