Μετασχηματισμός ραδονίου για Java

Μπορείτε να διαβάσετε τη θεωρία αυτού του μετασχηματισμού σε αυτόν τον σύνδεσμο της Βικιπαίδειας.

Περιγραφή

Πρώτη φορά άκουσα το όνομα αυτού του μετασχηματισμού ενώ διάβαζα το άρθρο που αγόρασα από το IEEE για να αποκτήσω ένα πλέγμα σκακιέρας για τον προγραμματισμό μιας συνάρτησης στην ChessPdfBrowser εφαρμογή.

IEEE Άρθρο .


Αυτή είναι μια βιβλιοθήκη με την υλοποίηση αυτού του μετασχηματισμού για την Java.


Ο κώδικας της βιβλιοθήκης μοιράζεται επίσης στο GitHub. Σύνδεσμος στο GitHub .

Περιγραφή κώδικα

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

Οι παράλληλοι υπολογισμοί υποστηρίζονται εύκολα για τη χρήση πολλαπλών νημάτων.


Η κλάση RadonTransformCalculator υπολογίζει τις τιμές μετασχηματισμού και τις αποθηκεύει σε μια δισδιάστατη συστοιχία.


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

Αυτοί οι δείκτες μπορούν εύκολα να μεταφραστούν σε ένα (Rho, Theta) (α, θ) στοιχείο καλώντας τη συνάρτηση στο αντικείμενο αποτελέσματος, το οποίο είναι τύπου RadonTransformResult.


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

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

Παράθυρα

Μετασχηματισμός ραδονίου για Java (2026)

Λήψη

Παραδείγματα

image
image

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

Αυτό το παράδειγμα στοχεύει στην απόκτηση των πλευρών του τετραγώνου που ορίζει τη σκακιέρα στην εικόνα-στόχο.

Η εικόνα εισόδου για τον υπολογισμό του μετασχηματισμού Radon είναι μια ανίχνευση άκρων (τύπος κάνης) της εικόνας-στόχου.


Ο μετασχηματισμός υπολογίζεται για αυτή την εικόνα τύπου Canny, και στη συνέχεια λαμβάνονται οι τέσσερις κύριες γραμμές.

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

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


Στο παράδειγμα, αυτές οι τέσσερις γραμμές που καθορίζουν τις πλευρές της σκακιέρας επιτυγχάνονται με επιτυχία με αυτά τα εργαλεία.

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

Επικαλείται επίσης ένα vertex sorter έτσι ώστε όταν οι γραμμές σχεδιάζονται διαδοχικά, το «φαινόμενο βάλτου» να μην εμφανίζεται.


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

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

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

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

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


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

Αποστολή εξετελέσθη!


image
image

Λήψεις