blaoulis Δημοσ. 21 Μαρτίου 2008 Δημοσ. 21 Μαρτίου 2008 Καλησπέρα σας, Υπάρχουν έτοιμες μεθοδοι-κλάσεις στην java για επεξεργασια εικονας??? Απλων πραγματων οπως να μπορει να διαβαζει καποιες τιμες ανα pixel , να εκτελει καποιες συναρτησεις τυπου matlab κτλπ.. Εχει ασχοληθει κανενας?? η ακομα καλύτερα υπάρχουν tutorials?? Εψαξα χωρις μεγαλη επιτυχια .. Ευχαριστω!
kalliopi Δημοσ. 25 Μαρτίου 2008 Δημοσ. 25 Μαρτίου 2008 Κάποιο συγκεκριμένο tutorial δεν έχω να σου προτείνω ωστόσο αν γίνεις πιο σαφής ως προς το τι χρειάζεσαι ίσως μπορώ να σε βοηθήσω. Αναφέρεις πχ. να διαβάζεις κάποια pixel, αυτό είναι εύκολο ακόμα και μόνος σου να το κάνεις, αν πάλι θέλεις ας πούμε ιστόγραμμα της εικόνας τότε μεταξύ άλλων μπορείς να χρησιμοποιήσεις και το "jai" (βιβλιοθήκη της java), για να μην κάνεις μόνος σου κάτι από την αρχή. Πες μου λοιπόν τι χρειάζεσαι να σου πω περισσότερα ή και να σου δώσω και δικό μου κώδικα.
Lupus Δημοσ. 25 Μαρτίου 2008 Δημοσ. 25 Μαρτίου 2008 Java 2D Java 3D Java Advanced Imaging Java Image I/O Java Media Framework Δες τα παραπανω API. Documentation θα βρεις μπολικο στην Sun.
blaoulis Δημοσ. 26 Μαρτίου 2008 Μέλος Δημοσ. 26 Μαρτίου 2008 Κάποιο συγκεκριμένο tutorial δεν έχω να σου προτείνω ωστόσο αν γίνεις πιο σαφής ως προς το τι χρειάζεσαι ίσως μπορώ να σε βοηθήσω. Αναφέρεις πχ. να διαβάζεις κάποια pixel, αυτό είναι εύκολο ακόμα και μόνος σου να το κάνεις, αν πάλι θέλεις ας πούμε ιστόγραμμα της εικόνας τότε μεταξύ άλλων μπορείς να χρησιμοποιήσεις και το "jai" (βιβλιοθήκη της java), για να μην κάνεις μόνος σου κάτι από την αρχή. Πες μου λοιπόν τι χρειάζεσαι να σου πω περισσότερα ή και να σου δώσω και δικό μου κώδικα. Θέλω να φορτώνω 2 εικόνες να υπολόγιζω το ιστόγραμμα τους ( με βάση τα χρώματα ) και να τα συγρκινώ ποσοστιαια. Μαρκοπροθέσμα θα ήθελα να υποβαλω τις εικονές και σε edge detector για να δω ποσο μοιαζουνε.
Nisok Δημοσ. 26 Μαρτίου 2008 Δημοσ. 26 Μαρτίου 2008 Για το edge detector δεν μπορώ να σε βοηθήσω ... μάλλον κάποιο φίλτρο Laplace θα χρειάζεσε Αλλά για το ιστόγραμμα απλά γράψε αυτό: > for (i=0;i<eikona.length;i++){ for (j=0;j<eikona[i].length;j++){ hist(eikona[i][j])++; } }
kalliopi Δημοσ. 27 Μαρτίου 2008 Δημοσ. 27 Μαρτίου 2008 Όταν λες "φορτώνω" φαντάζομαι από κάποια βάση. τώρα για ιστόγραμμα πχ. με το jai που σου είπα δημιουργείται πανεύκολα το ιστόγραμμα μιας εικόνας, τυπικός κώδικας πχ. είναι αυτός παρακάτω, εννοείται το κάνεις για όσα bin θέλεις (όσο λιγότερα τόση ακρίβεια θα χάνεις βέβαια..). ----------------------------------------------------------------------------------- // Create one histogram with 256 bins. ParameterBlock p = new ParameterBlock(); p.addSource(image); p.add(null); // The ROI p.add(1); pb1.add(1); // Sampling p.add(new int[]{256}); // Bins p.add(new double[]{0}); pb1.add(new double[]{256}); // Range for inclusion PlanarImage dummyImage = JAI.create("histogram", p) // Gets the histogram. javax.media.jai.Histogram histo = (javax.media.jai.Histogram)dummyImage.getProperty("histogram"); --------------------------------------------------------------------------------------------- τέλος, η σύγκριση εικόνων ως προς το χρώμα είναι ένα μεγάλο θέμα.. κάνε πρώτα τα ιστογράμμα και μετά για τη σύγκριση εδώ είμαστε.. @Nisok κοιτούσα τον κώδικα σου και δεν κατάλαβα τι ακριβώς παίρνεις.. το ιστόγραμμα είναι συνιστώσα τριών παραμέτρων (R, G και Β), τα δύο που χρησιμοποιείς τι είναι; στην πραγματικότητα αυτές οι τρείς συνιστώσες είναι που κάνουν το θέμα της σύγκρισης εξαιρετικά συζητήσιμο
blaoulis Δημοσ. 27 Μαρτίου 2008 Μέλος Δημοσ. 27 Μαρτίου 2008 το υλοποιησα αλλα θελω καποιες διευκρινησεις. >public class test { public static void main(String[] args) { PlanarImage image = JAI.create("fileload", args[0]); ParameterBlock pb1 = new ParameterBlock(); pb1.addSource(image); pb1.add(null); // The ROI pb1.add(1); pb1.add(1); // Sampling pb1.add(new int[]{256}); // Bins pb1.add(new double[]{0}); pb1.add(new double[]{256}); // Range for inclusion PlanarImage dummyImage1 = JAI.create("histogram", pb1); // Gets the histogram. javax.media.jai.Histogram histo1 = (javax.media.jai.Histogram)dummyImage1.getProperty("histogram"); // get histogram contents int[] local_array = new int[histo1.getNumBins(0)]; for ( int i = 0; i < histo1.getNumBins(0); i++ ) { //local_array[i] = histo1.getBinSize(0, i); //System.out.println(":: "+i+" :: No Of Bins:- "+local_array[i]) ; System.out.println(histo1.getBinSize(0, i) + " " + histo1.getBinSize(1, i) + " "+histo1.getBinSize(2, i) + " " ); } } } Μου τυπώνει 3 στήλες απο το 0 εως το 255. Αντιλαμβανομαι οτι ο Ιστογραμμα ειναι ενα στατιστικό μεσο που δείχνει τον καταμερισμό των τιμών , αλλά τώρα ετσι όπως τα τυπώνει την έχασα λίγο την μπάλα. 0 : x y z .... .... 255: x y z Μας δείχνει πόσες φόρες το χ ήταν 0 , πόσες το y και πόσες το z?? Τέλος έχει νόημα να συγκρίνεις 2 εικόνες με βάση το ιστόγραμμα?? Ευχαριστώ.
Nisok Δημοσ. 27 Μαρτίου 2008 Δημοσ. 27 Μαρτίου 2008 Είναι κώδικας που βρίσκεται κάτω απο τις εντολές που χρησιμοποιείς. Σκανάρω την εικόνα. Και την τιμή του pixel (εγώ συνήθως δουλεύω σε 8bit ) την κάνω index ενώς πίνακα hist.
kalliopi Δημοσ. 28 Μαρτίου 2008 Δημοσ. 28 Μαρτίου 2008 Λοιπόν, σου βγάζει για κάθε Pixel τι τιμές έχει το R, το G και το Β. Γι'αυτό σου φαίνονται τόσα πολλά (μπορείς πάντα να μειώσεις τον αριθμό των bin). Φυσικά έχει νόημα να συγκρίνεις εικόνες με βάση το ιστόγραμμα γιατί έτσι θα βρείς πχ κατά πόσο κοντά είναι χρωματικά 2 εικόνες (αυτό φυσικά γενικεύεται και σε περισσότερες..) Βέβαια, να θυμάσαι οτι συγκρίνοντας δυο εικόνες προς το χρώμα δεν σημαίνει οτι τις συγκρίνεις και ως προς την υφή ή το σχήμα.. δηλαδή θα πάρεις μεν σχετικά όμοιες χρωματικά εικόνες αλλά μπορεί να έχουν εντελώς διαφορετικό θέμα. Τώρα για την σύγκριση με τα ιστογράμματα, εξαρτάται από τη μέθοδο που θες να χρησιμοποιήσεις.. Υπάρχουν μέθοδοι που χρειάζονται και τις τρεις τιμές (R.G. και αλλές που χειρίζονται μόνο μια ενιαία. Στην δεύτερη περίπτωση πρέπει να βρεις μια αντιπροσωπευτική τιμή για κάθε pixel (απέφευγε το μέσο όρο). Φυσικά το να αποθηκεύεις τις τιμές των ιστογραμμάτων σε πίνακες είναι βολικό, έτσι θα κάνεις εύκολα και τις συγκρίσεις.
blaoulis Δημοσ. 29 Μαρτίου 2008 Μέλος Δημοσ. 29 Μαρτίου 2008 Αναφορικά με τις συγκρισεις και τα σχετικά μια χαρα.. αλλα δεν ειμαι απολυτα σιγουρος για το πρωτο σκελος. Εννοω οτι τα pixel της εικόνας δεν ειναι 256 μονό συνεπώς δεν νομιζώ να μου έχει τις τιμες του RGB και δευτερον ποιες ειναι τα όρια τιμών για RGB ?? Γιατί αυτα που μου βγάζει δεν μου φαίνονται πολυ λογικά , παραθέτω ενα δειγμα 0 0 126 0 0 60 1 0 83 4 3 117 3 10 142 6 11 178 21 23 249 22 37 305 31 81 404 49 143 577 84 228 806 120 400 974 192 691 1236 203 947 1507 244 1372 1917 309 2045 2535 361 2766 2809 395 3588 3221 392 4448 3726 468 5236 4156 516 5612 4460 499 5792 4672 539 5970 5239 .... .... Βασικά εχω μπερδευτεί και στον κωδικα που παραθετω. Για την ακριβεια με το τι τα bins αντιπροσωπευουν > pb1.addSource(image); // Edw fortwnei tin eikona , wraia. pb1.add(null); // The ROI // Edw pera leei oti tha xrisimopoihsei oli tin eikona pb1.add(1); pb1.add(1); // Sampling // auto simvolizun kai ayta, oti dld tha // xrisimopoieithei oli h eikona // Twra edw ti ginete? // giati me ta bins exw xasei tin bala. pb1.add(new int[]{256}); // Bins pb1.add(new double[]{0}); pb1.add(new double[]{256}); // Range for inclusion Τέλος για την getBinSize(χ, i) , i --> είναι το bin που με ενδοιαφερεί. το χ τωρα ειναι 0 -> κοκκινο 1 -> πρασινο 2 -> μπλε 3 -> ολα k -> γκρι ??? Συγνώμη για το μακρυσκελες μήνυμα αλλά πιστεύω πως μια απαντηση θα ξεκαθαρίσει παρα πολλά πραγματα
georgemarios Δημοσ. 31 Μαρτίου 2008 Δημοσ. 31 Μαρτίου 2008 δεν εκατσα να διαβασω ολα τα ποστς (σορυ) αλλα οταν εκανα στο πανεπιστημιο εργασια για image processing σε java, τα εμαθα ολα απο αυτο το βιβλιο Καλυπτει σχεδον τα παντα (φιλτρα, ιστογραμματα κτλ)
kalliopi Δημοσ. 2 Απριλίου 2008 Δημοσ. 2 Απριλίου 2008 πχ. για 16 bin -> τα χρώματα που έχεις είναι 16x16x16=4096, ανάλογα παεί για 256. τα Bin δεν είναι pixel. θα σου εξηγήσω τι είναι όλα αυτά με την πρώτη ευκαιρία. (sorry αλλά δεν έχω χρόνο να σου πω τώρα, θα σου απαντήσω σύντομα..) καλή δουλειά!
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.