Εκπαιδευτικό πρόγραμμα: μέθοδοι αλλαγής μεγέθους εικόνας. Προγράμματα για την αύξηση του μεγέθους των ψηφιακών εικόνων

Η απλή απάντηση στην ερώτησή σας είναι: «Ναι, υπάρχουν αλγόριθμοι, αλλά κανένας από αυτούς δεν είναι πολύ καλός». Όπως αναφέρατε στην ερώτηση, ο περιοριστικός παράγοντας είναι η ανάγκη επανεφεύρεσης pixel για αύξηση της ανάλυσης κατά ένα μικρό ποσοστό. (Αυτός είναι ο λόγος που δεν μπορείτε να διαβάσετε έναν αριθμό πινακίδας κυκλοφορίας από την αντανάκλαση στα γυαλιά κάποιου από μια φωτογραφία κάμερας ασφαλείας, όπως συμβαίνει στο CSI: Miami.)

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

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

Πρέπει να παραδεχτείτε ότι μια φωτογραφία τραβηγμένη με περισσότερα υψηλής ανάλυσης, θα περιέχει περισσότερες πληροφορίεςσχετικά με την εικόνα (δηλαδή λεπτομέρεια) από μια εικόνα της ίδιας σκηνής που λαμβάνεται σε χαμηλότερη ανάλυση. Είναι αδύνατο να προσθέσετε αυτές τις πληροφορίες από τον αέρα. Οι αλγόριθμοι κλιμάκωσης συνθέτουν ορισμένες πληροφορίες με βάση την υπόθεση της συνέχειας μεταξύ των στοιχείων ενός διακριτού bitmap. Αυτή η "νέα" πληροφορία δεν είναι στην πραγματικότητα νέα, αλλά προέρχεται από προϋπάρχουσες πληροφορίες σχετικά με την εικόνα, επομένως δεν μπορεί να θεωρηθεί ότι έχει 100% πιθανότητα να ταιριάζει με την αρχική σκηνή. Οι πιο αποτελεσματικοί αλγόριθμοι μπορεί να παράγουν καλύτερες πιθανότητες, αλλά τα αποτελέσματά τους θα έχουν πάντα πιθανότητα να ταιριάζουν λιγότερο από 1.

Ένας τρόπος για να αυξήσετε την ανάλυση είναι να τραβήξετε πολλές φωτογραφίες, να τις μεγεθύνετε σε περιοχές 4x (2x γραμμικές και στις δύο κατευθύνσεις) και να τις χρησιμοποιήσετε λογισμικόστοίβαξη για συνδυασμό εικόνων. Η τελική εικόνα θα είναι καλύτερη από οποιαδήποτε από τις πρωτότυπες.

Η μεγέθυνση των εικόνων είναι επικίνδυνη. Πέρα από ένα ορισμένο σημείο, η μεγέθυνση των εικόνων είναι μια τρελή υπόθεση. Δεν μπορείτε να συνθέσετε ως δια μαγείας έναν άπειρο αριθμό νέων pixel από τον αέρα. Και τα παρεμβαλλόμενα pixel δεν είναι ποτέ τόσο καλά όσο τα πραγματικά pixel. Γι' αυτό είναι κάτι παραπάνω από τεχνητό να μεγεθύνετε την εικόνα Lena 512x512 κατά 500%. Θα ήταν πιο λογικό να βρείτε μια πιο διευρυμένη σάρωση ή εικόνα αυτού που χρειάζεστε* παρά να το μεγεθύνετε σε λογισμικό.

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

Μπορείτε να ανιχνεύσετε την εικόνα χρησιμοποιώντας εργαλεία όπως autotrace ή potrace και να τη χρησιμοποιήσετε σε οποιαδήποτε ανάλυση. Αλλά είναι υπολογιστικά ακριβό, οπότε καταλήγετε σε μια εικόνα με λίγα χρώματα/χαρακτηριστικά και ακόμη λιγότερα, αν χρειαστεί να την επεξεργαστείτε γρήγορα.

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

Η εργασία είναι να μεγεθύνετε μια εικόνα 100x100 με τέσσερα κανάλια (κόκκινο, πράσινο, μπλε, κανάλι άλφα, περιέχει ένα πολύ θολό σημείο), σε μέγεθος 2500x2500 και να την εμφανίσετε σε ένα προηγουμένως προετοιμασμένο γραφικό περιβάλλον της συσκευής. Στην πραγματικότητα, ένα πινέλο, όπως τα πινέλα μέσα γραφικός επεξεργαστής Adobe Photoshop. Το πρόβλημα είναι ακριβώς η αύξηση (αλλαγή μεγέθους). Εδώ είναι η αρχική εικόνα (ή πινέλο, δείχνω μόνο το κανάλι άλφα, τα υπόλοιπα δεν είναι σημαντικά):

Ζωγραφισμένο με ένα τυπικό πινέλο Photoshop.
Και να τι συμβαίνει αφού το αυξήσω με τον αλγόριθμό μου (για άλλη μια φορά: μην προσέχετε το χρώμα: ρυθμίζεται τυχαία). Χρησιμοποίησα γραμμική παρεμβολή.
Βλέπεις κι εσύ αυτές τις τραχιές; Άρα: όλο το πρόβλημα βρίσκεται σε αυτούς. Αυτές οι τραχιές είναι στο κανάλι άλφα, γιατί Το χρώμα ολόκληρου του πινέλου είναι ομοιόμορφο. Εξαιτίας αυτών, όταν σχεδιάζετε μια γραμμή με μια βούρτσα, σχηματίζεται τρομερή βρωμιά. Για να κατανοήσω τη φύση αυτών των ανωμαλιών, αποφάσισα να σχεδιάσω μια λωρίδα πλάτους 1 pixel στο Photoshop, η οποία είναι μια ομαλή κλίση από λευκό σε μπλε και, στη συνέχεια, αύξησα το πλάτος κάθε λωρίδας, πρώτα με τη δική μου αλγόριθμος, στη συνέχεια στο Photoshop: εναλλακτικό κείμενο http://plasmon.rghost.ru/38526229/image.png
εναλλακτικό κείμενο http://rghost.ru/38526272/image.png
Στην πρώτη εικόνα μπορείτε να δείτε ξανά τις παρατυπίες. Αυτός είναι ο λόγος που, κατά τη γνώμη μου, προκύπτουν παρατυπίες: alt text http://rghost.ru/38526320/image.png
Εδώ ο άξονας x είναι ο αριθμός pixel, το y είναι το χρώμα. Μπλε κουκκίδες- πρωτότυπο, κόκκινο - προσεγγίζεται με γραμμική παρεμβολή. Το μπλε γράφημα δείχνει την ιδανική παρεμβολή spline, αλλά χρειάζεται πολύς χρόνος για να εκτελεστεί στον υπολογιστή. Λοιπόν, βλέπετε το σπασμένο μαύρο γράφημα της γραμμικής παρεμβολής; Μου φαίνεται ότι αυτές ακριβώς οι γωνίες της διακεκομμένης γραμμής σχηματίζουν τέτοια τραχύτητα.

Στο Photoshop οι ρυθμίσεις παρεμβολής έχουν οριστεί σε "Bicubic (best for smooth gradients)", αλλά το "Linear" και το "Bicubic" στο Photoshop δίνουν το ίδιο αποτέλεσμα με τον αλγόριθμό μου. Μπορούμε λοιπόν να υποθέσουμε ότι το "Bicubic (το καλύτερο για ομαλές διαβαθμίσεις)" στο Photoshop, η εικόνα πρώτα μεγεθύνεται με γραμμική παρεμβολή και στη συνέχεια εφαρμόζεται ένα κοινό φίλτρο θολώματος.

Ετσι. Όλα τα φίλτρα θολώματος που βρήκα στο Διαδίκτυο λειτουργούν εξαιρετικά αργά (συμπεριλαμβανομένου του δικού μου). Το πιο πιθανό είναι να χρησιμοποιεί το Photoshop επιταχυντής γραφικών. Είναι όμως δυνατόν να υλοποιήσω με κάποιο τρόπο την εργασία μου χρησιμοποιώντας μόνο την CPU; Και έτσι ώστε να λειτουργεί το πολύ για ένα δευτερόλεπτο. Περιμένω τις προτάσεις σας.

//οριζόντια παρεμβολή μεταξύ εικονοστοιχείων πηγής για y:=1 έως setbrush.h_orig do για x:= 1 σε setbrush.w_orig-1 αρχίζει x_0:=round(x*k); x_x:=x_0+1; x_1:=round((x+1)*k); y_y:=round(y*k); ενώ (x_x<>x_1) ξεκινήστε cl:=round((temp.r-temp.r)/(x_1-x_0))+temp.r; temp.r:=cl; cl:=round((temp.g-temp.g)/(x_1-x_0))+temp.g; temp.g:=cl; cl:=round((temp.b-temp.b)/(x_1-x_0))+temp.b; temp.b:=cl; cl:=round((temp.a-temp.a)/(x_1-x_0))+temp.a; temp.a:=cl; Inc(x_0); inc(x_x); τέλος;

τέλος;

Εδώ το x_0 είναι το τελευταίο γνωστό αριστερό pixel, αντίστοιχα το x_1 είναι το δεξί. x_x - υπολογισμένο pixel, y_y - τρέχουσα γραμμή. Τύπος που βασίζεται στην ομοιότητα των ορθογωνίων τριγώνων.

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

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

Μπορείτε να απεικονίσετε την «απλή» κλιμάκωση στο Photoshop. Μεγεθύνοντας την εικόνα έξι φορές, μειώνουμε την ανάλυσή της κατά έξι φορές. Το μέγεθος εκτύπωσης είναι οι φυσικές διαστάσεις της εικόνας κατά την εκτύπωση:

Ταυτόχρονα, η ποιότητα της εικόνας επιδεινώνεται: μικρά κομμάτια, τα εικονοστοιχεία μεγαλώνουν σε μεγάλους κόκκους και υπάρχουν λιγότεροι ανά ίντσα:

Η «απλή» μείωση της εικόνας οδηγεί στο αντίθετο αποτέλεσμα. Για παράδειγμα, πενταπλάσια αναλογική μείωση φυσικές διαστάσειςαυξάνει την ανάλυση πέντε φορές:

Φαίνεται ότι η εικόνα πρέπει να βελτιωθεί ακόμη περισσότερο. Ωστόσο, η εικόνα γίνεται λιγότερο καθαρή, οι γραμμές αντίθεσης είναι θολές. Τα εικονοστοιχεία φαίνεται να επικαλύπτονται μεταξύ τους:

Ως εκ τούτου, οι αλγόριθμοι κλιμάκωσης χρησιμοποιούνται για την εξομάλυνση του ψευδώνυμου και άλλων ανεπιθύμητων επιπτώσεων. ράστερ γραφικά. Υπάρχουν δύο τυπικοί αλγόριθμοι που βελτιώνουν την ποιότητα της εικόνας κατά την αλλαγή μεγέθους: η διγραμμική και η δικυβική παρεμβολή. Επιστρέφοντας στο Photoshop, συνδέουμε αυτές τις λειτουργίες με το κουμπί «Interpolation»:

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

Μεγεθύνουμε την ίδια εικόνα (μέγεθος 147,2K) έξι φορές. Σε αυτή την περίπτωση, το πρόγραμμα εκτελεί επαναδειγματοληψία - επαναδειγματοληψία, επαναδειγματοληψία δεδομένων. Νέα pixel προστίθενται στην εικόνα. Επομένως, η ανάλυση παραμένει ίδια και το μέγεθος του αρχείου αυξάνεται. Και ο αλγόριθμος παρεμβολής καθορίζει με ποια μέθοδο προστίθενται τα εικονοστοιχεία:

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

Προφανώς, τα προβλήματα με την κλιμάκωση προκαλούνται από την ίδια τη δομή των γραφικών ράστερ.

Ωστόσο, οι αλγόριθμοι παρεμβολής βελτιώνονται και εμφανίζονται νέοι προηγμένοι επεξεργαστές γραφικών.

Σε αυτό το μάθημα θα ήθελα να επιστήσω την προσοχή σας σε ένα από τα προγράμματα του AKVIS. Το ανακάλυψα ψάχνοντας αποτελεσματικό εργαλείογια κλιμάκωση γραφικών ράστερ.

Ας πάμε στη σελίδα της επίσημης ιστοσελίδας της εταιρείας Μεγεθυντικός φακός AKVIS, επιλέξτε την κατάλληλη έκδοση και πραγματοποιήστε λήψη δοκιμαστική έκδοσηΕφαρμογή Akvis Magnifier και πρόσθετο για μια δοκιμαστική περίοδο δέκα ημερών:


Ο παρακάτω σύνδεσμος θα κατεβάσει πλήρες λογισμικό για λειτουργικό σύστημα Windows 64-bit. Σε Windows 32-bit μέγιστη μεγέθυνσηοι πλευρές της εικόνας περιορίζονται στα 30.000 pixel - Μεγεθυντικός φακός v.9.1 Windows 32-bit:


Μετά την εγκατάσταση, εμφανίζεται μια ωραία συντόμευση στην επιφάνεια εργασίας αυτόνομη εφαρμογή(αυτόνομο) με τη μορφή του λογότυπου του:

Το κύριο πλεονέκτημα του Akvis Magnifier έναντι των αναλόγων είναι η υψηλής ποιότητας πολλαπλή μεγέθυνση εικόνας. Το πρόγραμμα επιλέγει βέλτιστους αλγόριθμους ανάλογα με το βαθμό κλιμάκωσης. Οι προγραμματιστές εγγυώνται η καλύτερη ποιότητακατά τη μεγέθυνση της πλευράς της εικόνας στα 300.000 pixel (για Windows 64-bit).

Διαισθητικό και εύκολο στην εκμάθηση πρόγραμμα. Λεπτομερής περιγραφήρυθμίσεις και βήμα προς βήμα οδηγίεςΗ εργασία με την εικόνα δίνεται στην ενότητα "Εκμάθηση" του ιστότοπου. Όσον αφορά την τιμή, αυτό το προϊόν έχει σχεδιαστεί για σοβαρούς χρήστες. Ένα είδος μπόνους είναι η δυνατότητα εγγραφής και χρήσης τόσο της εφαρμογής όσο και του πρόσθετου σε δύο υπολογιστές με μία άδεια. Δηλαδή, μπορείτε να αγοράσετε μία άδεια χρήσης λογισμικού μαζί.

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

Για να αυξήσει ή να μειώσει το μέγεθος μιας εικόνας, το Photoshop χρησιμοποιεί τη μέθοδο Interpolation. Έτσι, για παράδειγμα, όταν μεγεθύνετε μια εικόνα, το Photoshop δημιουργεί επιπλέον pixel με βάση τις τιμές γειτονικών. Σε γενικές γραμμές, εάν το ένα pixel είναι μαύρο και το άλλο είναι λευκό, τότε το Photoshop θα υπολογίσει τον μέσο όρο και θα δημιουργήσει ένα νέο pixel γκρί. Μερικοί τύποι παρεμβολής είναι γρήγοροι και κακής ποιότητας, άλλοι είναι πιο περίπλοκοι, αλλά επιτυγχάνουν καλά αποτελέσματα.

Αρχικά, ας πάμε στο κύριο μενού Εικόνα - Μέγεθος εικόναςή Alt+Ctrl+I.

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

  • Αυτόματο. Εφαρμογή Photoshopεπιλέγει μια μέθοδο επαναδειγματοληψίας με βάση τον τύπο του εγγράφου και την αναβάθμιση ή τη μείωση της κλίμακας.
  • Διατήρηση λεπτομερειών (μεγέθυνση). Όταν επιλέγεται αυτή η μέθοδος, το ρυθμιστικό μείωσης θορύβου γίνεται διαθέσιμο για την εξομάλυνση του θορύβου όταν η εικόνα κλιμακώνεται.
  • Διατήρηση λεπτομερειών 2.0. Αυτός ο αλγόριθμος δίνει πολύ ενδιαφέρον αποτέλεσμαμεγεθύνετε την εικόνα. Φυσικά, η λεπτομέρεια δεν γίνεται πιο λεπτομερής, αλλά αυτό που υπάρχει αυξάνεται αρκετά σημαντικά χωρίς να χάνει τη σαφήνεια.
  • . Καλή μέθοδοςγια μεγέθυνση εικόνας βάσει δικυβικής παρεμβολής, σχεδιασμένη ειδικά για πιο ομαλά αποτελέσματα.
  • Bicubic Sharper (μείωση). Μια καλή μέθοδος για τη μείωση του μεγέθους της εικόνας με βάση τη δικυβική παρεμβολή με αυξημένη ευκρίνεια. Αυτή η μέθοδος σάς επιτρέπει να διατηρήσετε τις λεπτομέρειες της επαναδειγματοληψίας εικόνας. Εάν η παρεμβολή Bicubic Down κάνει ορισμένες περιοχές της εικόνας πολύ ευκρινείς, δοκιμάστε να χρησιμοποιήσετε την Bicubic interpolation.
  • Bicubic (ομαλές κλίσεις). Μια πιο αργή αλλά πιο ακριβής μέθοδος που βασίζεται στην ανάλυση των τιμών χρώματος των γύρω εικονοστοιχείων. Χρησιμοποιώντας πιο σύνθετους υπολογισμούς, η δικυβική παρεμβολή παράγει πιο ομαλές χρωματικές μεταβάσεις από την παρεμβολή γειτονικών pixel ή bi-pixel. γραμμική παρεμβολή.
  • Πλησιέστερος γείτονας (σκληρές άκρες). Μια γρήγορη αλλά λιγότερο ακριβής μέθοδος που ακολουθεί τα pixel μιας εικόνας. Αυτή η μέθοδος διατηρεί τις αιχμηρές άκρες και δημιουργεί ένα μειωμένο μέγεθος αρχείου σε έργα τέχνης που περιέχει μη λειασμένες άκρες. Ωστόσο, αυτή η μέθοδος μπορεί να δημιουργήσει οδοντωτές άκρες που γίνονται αισθητές όταν παραμορφώνετε ή κλιμακώνετε την εικόνα ή εκτελείτε πολλές λειτουργίες επιλογής.
  • Διγραμμικό. Αυτή η μέθοδος προσθέτει νέα pixel υπολογίζοντας τη μέση τιμή χρώματος των γύρω εικονοστοιχείων. Παράγει αποτελέσματα μέσης ποιότητας.

Παράδειγμα χρήσης Bicubic Smoother (μεγέθυνση):

Υπάρχει φωτογραφία, διαστάσεων 600 x 450 pixels, ανάλυση 72 dpi

Πρέπει να το αυξήσουμε. Ανοίγει ένα παράθυρο Μέγεθος εικόναςκαι επιλέξτε Bicubic Smoother (μεγέθυνση), οι μονάδες μέτρησης είναι ποσοστά.

Οι διαστάσεις του εγγράφου θα οριστούν αμέσως στο 100%. Στη συνέχεια, θα μεγεθύνουμε σταδιακά την εικόνα. Αλλάξτε την τιμή από 100% σε 110%. Όταν αλλάξετε το πλάτος, το ύψος θα προσαρμοστεί αυτόματα.

Τώρα οι διαστάσεις του είναι ήδη 660 x 495 pixel. Επαναλαμβάνοντας αυτά τα βήματα μπορείτε να επιτύχετε καλά αποτελέσματα. Φυσικά, θα είναι αρκετά δύσκολο για εμάς να πετύχουμε ιδανική ευκρίνεια, αφού η φωτογραφία ήταν μικρή και χαμηλής ανάλυσης. Δείτε όμως τις αλλαγές που έχουν γίνει στα pixel.

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

Τα λέμε στο επόμενο μάθημα!

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

Γενικά, αυτό ήταν μια εισαγωγή σε ένα άλλο άρθρο, αλλά άργησε και κατέληξε σε ένα ξεχωριστό άρθρο.

Αυτός ο άντρας κάθεται ανάμεσα στις μαργαρίτες για να σου επιστήσει την προσοχή στο άρθρο.

Για μια οπτική σύγκριση, θα χρησιμοποιήσω εικόνες της ίδιας ανάλυσης 1920x1280 (η μία, η άλλη), τις οποίες θα μειώσω σε μεγέθη 330x220, 1067x667 και 4800x3200. Κάτω από τις εικόνες θα γραφεί πόσα χιλιοστά του δευτερολέπτου χρειάστηκαν για να αλλάξει το μέγεθος σε μια συγκεκριμένη ανάλυση. Οι αριθμοί δίνονται μόνο για να κατανοήσουμε την πολυπλοκότητα του αλγορίθμου, επομένως το συγκεκριμένο υλικό ή λογισμικό στο οποίο λαμβάνονται δεν είναι τόσο σημαντικό.

Πλησιέστερος γείτονας

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

Γενικά, η ποιότητα και η απόδοση οποιασδήποτε μεθόδου μείωσης μπορεί να εκτιμηθεί από την αναλογία του αριθμού των εικονοστοιχείων που εμπλέκονται στο σχηματισμό της τελικής εικόνας προς τον αριθμό των εικονοστοιχείων στην αρχική εικόνα. Όσο μεγαλύτερη είναι αυτή η αναλογία, τόσο πιο πιθανό είναι ο αλγόριθμος να είναι καλύτερος και πιο αργός. Η αναλογία ενός σημαίνει ότι τουλάχιστον κάθε pixel πρωτότυπη εικόναέκανε τη συμβολή του μέχρι τέλους. Αλλά για προηγμένες μεθόδους μπορεί να είναι περισσότερες από μία. Έτσι, αν, για παράδειγμα, μειώσουμε την εικόνα χρησιμοποιώντας τη μέθοδο του πλησιέστερου γείτονα κατά 3 φορές σε κάθε πλευρά, τότε αυτή η αναλογία είναι ίση με 1/9. Εκείνοι. Τα περισσότερα από τα αρχικά pixel δεν λαμβάνονται υπόψη με κανέναν τρόπο.




1920×1280 → 330×220 = 0,12 ms
1920×1280 → 1067×667 = 1,86 ms

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

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

Μετασχηματισμοί συγγενών

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

Η αρχή λειτουργίας είναι ότι για κάθε σημείο της τελικής εικόνας, ένα σταθερό σύνολο σημείων στην εικόνα πηγής λαμβάνεται και παρεμβάλλεται σύμφωνα με τη σχετική τους θέση και το επιλεγμένο φίλτρο. Ο αριθμός των σημείων εξαρτάται επίσης από το φίλτρο. Για τη διγραμμική παρεμβολή λαμβάνονται 2x2 pixel πηγής, για τη δικυβική παρεμβολή 4x4. Αυτή η μέθοδος παράγει μια ομαλή εικόνα όταν γίνεται μεγέθυνση, αλλά όταν γίνεται σμίκρυνση το αποτέλεσμα μοιάζει πολύ με τον πλησιέστερο γείτονά της. Δείτε μόνοι σας: θεωρητικά, με ένα δικυβικό φίλτρο και 3 φορές μείωση, η αναλογία των επεξεργασμένων pixel προς τα αρχικά είναι 4² / 3² = 1,78. Στην πράξη, το αποτέλεσμα είναι πολύ χειρότερο γιατί Σε υπάρχουσες υλοποιήσεις, το παράθυρο φίλτρου και η συνάρτηση παρεμβολής δεν κλιμακώνονται σύμφωνα με την κλίμακα εικόνας και τα pixel πιο κοντά στην άκρη του παραθύρου λαμβάνονται με αρνητικούς συντελεστές (σύμφωνα με τη συνάρτηση), π.χ. δεν συνεισφέρουν χρήσιμα στην τελική εικόνα. Ως αποτέλεσμα, μια εικόνα που μειώνεται με ένα δικυβικό φίλτρο διαφέρει από μια εικόνα που έχει μειωθεί με ένα διγραμμικό φίλτρο μόνο στο ότι είναι ακόμη πιο ευκρινής. Λοιπόν, για ένα διγραμμικό φίλτρο και τριπλάσια μείωση, η αναλογία των επεξεργασμένων εικονοστοιχείων προς τα αρχικά είναι 2² / 3² = 0,44, κάτι που δεν διαφέρει θεμελιωδώς από τον πλησιέστερο γείτονα. Στην πραγματικότητα, οι συγγενικοί μετασχηματισμοί δεν μπορούν να χρησιμοποιηθούν για μείωση κατά περισσότερο από έναν παράγοντα 2. Και ακόμη και όταν μειώνονται σε δύο φορές, δίνουν αξιοσημείωτα εφέ σκάλας για τις γραμμές.

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




1920×1280 → 330×220 = 6,13 ms
1920×1280 → 1067×667 = 17,7 ms
1920×1280 → 4800×3200 = 869 ms

Ο χρόνος εκτέλεσης είναι αισθητά μεγαλύτερος από τον πλησιέστερο γείτονά του και εξαρτάται από το μέγεθος της τελικής εικόνας και το μέγεθος του παραθύρου του επιλεγμένου φίλτρου. Πρακτικά δεν εξαρτάται από τις αστοχίες της προσωρινής μνήμης, γιατί Τα αρχικά pixel χρησιμοποιούνται τουλάχιστον δύο τη φορά.

Η ταπεινή μου γνώμη είναι ότι η χρήση αυτής της μεθόδου για αυθαίρετη μείωση των εικόνων είναι απλή είναι ένα σφάλμα, γιατί το αποτέλεσμα είναι πολύ κακό και παρόμοιο με τον πλησιέστερο γείτονά του και αυτή η μέθοδος απαιτεί πολύ περισσότερους πόρους. Ωστόσο, αυτή η μέθοδος έχει βρει ευρεία εφαρμογή σε προγράμματα και βιβλιοθήκες. Το πιο εκπληκτικό είναι ότι αυτή η μέθοδος χρησιμοποιείται σε όλα τα προγράμματα περιήγησης για τη μέθοδο καμβά drawImage() (επεξηγηματικό παράδειγμα), αν και χρησιμοποιούνται πιο ακριβείς μέθοδοι για την απλή εμφάνιση εικόνων σε ένα στοιχείο (εκτός από το IE, χρησιμοποιεί μετασχηματισμούς συγγενών και για τις δύο περιπτώσεις ). Επιπλέον, αυτή η μέθοδος χρησιμοποιείται στο OpenCV, τρέχουσα έκδοση Python Library Pillow (ελπίζω να γράψω για αυτό ξεχωριστά), στο Paint.NET.

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

Υπερδειγματοληψία

Χρησιμοποιώντας αυτή τη μέθοδο, δημιουργούνται τα ίδια επίπεδα mip, με τη βοήθεια των οποίων (για να απλοποιηθούν σημαντικά) η πλήρης οθόνη anti-aliasing λειτουργεί σε παιχνίδια. Η ουσία του είναι να χωρίσει την αρχική εικόνα σε ένα πλέγμα τελικών pixel και να προσθέσει όλα τα αρχικά pixel ανά κάθε pixel της τελικής εικόνας σύμφωνα με την περιοχή που καλύπτεται από το τελικό pixel. Όταν χρησιμοποιείτε αυτήν τη μέθοδο για μεγέθυνση, για κάθε pixel στην τελική εικόνα υπάρχει ακριβώς ένα pixel στο πρωτότυπο. Επομένως το αποτέλεσμα για την αύξηση είναι ίσο με τον πλησιέστερο γείτονα.

Υπάρχουν δύο υποτύποι αυτής της μεθόδου: με στρογγυλοποίηση των ορίων pixel στον πλησιέστερο ακέραιο αριθμό pixel και χωρίς. Στην πρώτη περίπτωση, ο αλγόριθμος καθίσταται ακατάλληλος για κλιμάκωση λιγότερο από 3 φορές, επειδή οποιοδήποτε τελικό pixel μπορεί να έχει ένα αρχικό και το γειτονικό μπορεί να έχει τέσσερα (2x2), γεγονός που οδηγεί σε δυσαναλογίες σε τοπικό επίπεδο. Ταυτόχρονα, ο αλγόριθμος στρογγυλοποίησης μπορεί προφανώς να χρησιμοποιηθεί σε περιπτώσεις όπου το μέγεθος της αρχικής εικόνας είναι πολλαπλάσιο του μεγέθους της τελικής εικόνας ή η κλίμακα μείωσης είναι αρκετά μικρή (εκδόσεις με ανάλυση 330x220 είναι σχεδόν ίδιες ). Η αναλογία των επεξεργασμένων εικονοστοιχείων προς τα αρχικά κατά τη στρογγυλοποίηση των ορίων είναι πάντα ίση με ένα.




1920×1280 → 330×220 = 7 ms
1920×1280 → 1067×667 = 15 ms
1920×1280 → 4800×3200 = 22,5 ms

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




1920×1280 → 330×220 = 19 ms
1920×1280 → 1067×667 = 45 ms
1920×1280 → 4800×3200 = 112 ms

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

Αυτή η μέθοδος χρησιμοποιείται στη συνάρτηση gdImageCopyResampled() της βιβλιοθήκης GD, η οποία είναι μέρος της PHP, που βρίσκεται στο OpenCV (σημαία INTER_AREA), Intel IPP, AMD Framewave. Το Libjpeg λειτουργεί με την ίδια περίπου αρχή, όταν ανοίγει εικόνες μειωμένες πολλές φορές. Το τελευταίο επιτρέπει το άνοιγμα πολλών εφαρμογών Εικόνες JPEGπρο-μεγέθους πολλές φορές χωρίς πολύ επιβάρυνση (στην πράξη, το libjpeg ανοίγει μικρότερες εικόνες ακόμα και λίγο πιο γρήγορα από τις πλήρους μεγέθους) και στη συνέχεια χρησιμοποιήστε άλλες μεθόδους για να αλλάξετε το μέγεθος σε ακριβείς διαστάσεις. Για παράδειγμα, εάν πρέπει να αλλάξετε το μέγεθος ενός JPEG με ανάλυση 1920x1280 σε ανάλυση 330x220, μπορείτε να ανοίξετε πρωτότυπη εικόνασε ανάλυση 480x320 και στη συνέχεια μειώστε την στην επιθυμητή ανάλυση 330x220.

Περιελιγμός

Αυτή η μέθοδος είναι παρόμοια με τους συγγενικούς μετασχηματισμούς στο ότι χρησιμοποιεί φίλτρα, αλλά αντί να έχει ένα σταθερό παράθυρο, έχει ένα παράθυρο ανάλογο με την κλίμακα. Για παράδειγμα, εάν το μέγεθος του παραθύρου φίλτρου είναι 6 και το μέγεθος της εικόνας μειωθεί κατά 2,5 φορές, τότε (2,5 * 6)² = 225 εικονοστοιχεία συμμετέχουν στο σχηματισμό κάθε εικονοστοιχείου της τελικής εικόνας, που είναι πολύ περισσότερο από την περίπτωση της υπερδειγματοληψίας (από 9 έως 16). Ευτυχώς, οι συνελίξεις μπορούν να μετρηθούν σε 2 περάσματα, πρώτα προς τη μία κατεύθυνση και μετά προς την άλλη, επομένως η αλγοριθμική πολυπλοκότητα του υπολογισμού κάθε εικονοστοιχείου δεν είναι 225, αλλά μόνο (2,5 * 6) * 2 = 30. Η συμβολή κάθε αρχικού εικονοστοιχείου μέχρι την τελική έχει ως εξής: χρόνοι που καθορίζονται από το φίλτρο. Η αναλογία των επεξεργασμένων εικονοστοιχείων προς τα αρχικά καθορίζεται εξ ολοκλήρου από το μέγεθος του παραθύρου του φίλτρου και είναι ίση με το τετράγωνό του. Εκείνοι. για ένα διγραμμικό φίλτρο αυτή η αναλογία θα είναι 4, για ένα δικυβικό φίλτρο 16, για το Lanczos 36. Ο αλγόριθμος λειτουργεί εξαιρετικά τόσο για μείωση όσο και για αύξηση.




1920×1280 → 330×220 = 76 ms
1920×1280 → 1067×667 = 160 ms
1920×1280 → 4800×3200 = 1540 ms

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

Είναι αυτή η μέθοδος που εφαρμόζεται στο ImageMagick, στο GIMP και στην τρέχουσα έκδοση του Pillow με τη σημαία ANTIALIAS.

Ένα από τα πλεονεκτήματα αυτής της μεθόδου είναι ότι τα φίλτρα μπορούν να καθοριστούν ως ξεχωριστή συνάρτηση που σε καμία περίπτωση δεν συνδέεται με την υλοποίηση της μεθόδου. Ωστόσο, η λειτουργία του ίδιου του φίλτρου μπορεί να είναι αρκετά περίπλοκη χωρίς μεγάλη απώλεια απόδοσης, επειδή οι συντελεστές για όλα τα pixel σε μια στήλη και για όλα τα pixel σε μια σειρά υπολογίζονται μόνο μία φορά. Εκείνοι. Η ίδια η συνάρτηση φίλτρου καλείται μόνο (m + n) * w φορές, όπου m και n είναι οι διαστάσεις της τελικής εικόνας και w είναι το μέγεθος του παραθύρου φίλτρου. Και μπορείτε να προσαρμόσετε πολλές από αυτές τις συναρτήσεις, αν υπήρχε μόνο μια μαθηματική αιτιολόγηση. Στο ImageMagick, για παράδειγμα, υπάρχουν 15 από αυτά: Δείτε πώς μοιάζουν τα πιο δημοφιλή.

Διγραμμικό φίλτρο (διγραμμικό ή τρίγωνο στο ImageMagick)


Δικυβικό φίλτρο (δικυβικό, catrom στο ImageMagick)


Φίλτρο Lanczos

Είναι αξιοσημείωτο ότι ορισμένα φίλτρα έχουν ζώνες αρνητικών συντελεστών (όπως το δικυβικό φίλτρο ή το φίλτρο Lanczos). Αυτό είναι απαραίτητο για να δώσει στις μεταβάσεις στην τελική εικόνα την ευκρίνεια που ήταν στην αρχική.