Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Προσπαθώ να φτιάξω ένα πρόγραμμα που να αναγνωρίζει και να ομαδοποιεί χρώματα σε μια φωτογραφία. Όντας άσχετος με χρώμα διαπιστώνω ότι η ομαδοποίηση χρωμάτων από RGB είναι πρακτικά αδύνατη. Από όσο έχω ψάξει μέχρι στιγμής πρέπει να γίνει μετατροπή από RGB σε LAB κι από εκεί να εφαρμόσω κάποιον αλγόριθμο για color distance ώστε να έχω κάποια τρόπον τινά ομαδοποίηση των χρωμάτων. Το πρόβλημα είναι ότι με κάτι εκατομμύρια pixels σε κάθε φωτογραφία για να βρω το κοντινότερο χρώμα για το καθένα θα χρειαστεί πάρα πολύς χρόνος. Υπάρχει τρόπος να συντομεύσω τη διαδικασία; Έχει ασχοληθεί κανείς με το αντικείμενο να δώσει τα φώτα του;

  • Απαντ. 34
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Δημοφιλείς Ημέρες

Συχνή συμμετοχή στο θέμα

Δημοσ.

νομίζω ότι το HLS θα σε σώσει! Και αυτό γιατί το χρώμα είναι στο Hue (το L είναι η φωτεινότητα και το S ο κορεσμός).

Έχω φτιάξει εφέ που γυαλίζει επιδερμίδες και εκεί χρειάστηκα να βάλω περιορισμούς για τα pixels...και μάλιστα να αποφεύγω όπου υπάρχει αλλαγή στην αντίθεση. Δhλαδή έφτιαξα ένα επιλεκτικό blur, βάση περιοχής χρωμάτων και αντίθεσης!

 

Αν μπορείς να φτιάξεις ένα πρόγραμμα που να βγάζει ιστόγραμμα σε RGB θα σου πω και άλλα!

Δημοσ.

Το 'χω δοκιμάσει με HLS και δεν δουλεύει γιατί χάνεις χρώματα όπως το ροζ. Για παράδειγμα έχω δώσει τις εξής τιμές και βλέπω ότι σε πολλές περιπτώσεις πέφτει έξω (κώδικας σε C#)

 

        private static string Classify(Color c) {
            float hue = c.GetHue();
            float sat = c.GetSaturation();
            float lgt = c.GetBrightness();

            if (lgt < 0.1) return "Black";
            if (lgt > 0.9) return "White";

            if (sat < 0.25) return "Gray";
            
            if (hue < 18) return "Orange";
            if (hue < 48) return "Brown";
            if (hue < 64) return "Yellow";
            if (hue < 160) return "Green";
            if (hue < 210) return "Cyan";
            if (hue < 270) return "Blue";
            if (hue < 340) return "Magenta";
            return "Red";
        }

 

Αντιθέτως, ξέρω ότι δουλεύει με LAB και color distance βάσει προτύπου CIE 2000 αλλά δεν ξέρω πως μπορείς να συντομεύσεις τη διαδικασία για να μη συγκρίνεις κάθε pixel με όλα τα γνωστά χρώματα.

 

Αυτό που έχεις κάνει είναι τελειώς διαφορετικό. Είναι παρόμοιο με αυτό που κάνουν οι μηχανές αναζήτησης για να καταλάβουν πότε μια φωτογραφία είναι πορνό. Μετράνε τι ποσοστό pixels με συγκεκριμένο χρωματικό εύρος που αφορά το δέρμα του χρώματος υπάρχουν ως ποσοστό του συνόλου, στήνουν κι ένα machine learning μηχανισμό να κάνει συγκρίσεις και στο τέλος βγάζουν έναν μπούσουλα. Δεν λέω ότι είναι πιο εύκολο ή πιο δύσκολο απλά είναι κάτι διαφορετικό.

Δημοσ.

Το λάθος σου είναι στη σκέψη του classify όπως την δείχνεις. Αυτό που δείχνεις ΔΕΝ σου κάνει και το έχεις καταλάβει! Τι σου κάνει όμως; Πρέπει να αποφασίσεις βάσει μιας περιοχής τιμών! Δηλαδή όλα σου τα IF πρέπει να έχουν διπλό έλεγχο από έως..

 

Το ίδιο γίνεται και όταν σαρώνουμε ένα πίνακα με RGB τιμές. Βάζουμε ένα If με έξι συνθήκες, δυο ανά χρώμα. Σε προγράμματα ζωγραφικής λέγεται tolerance. Αλλά εκεί δουλεύει αλλιώς, δηλαδή έχουμε ένα χρώμα συγκεκριμένο και ψάχνουμε όλα τα pixels με χρώμα με + - τιμές που αναφέρεται στο tolerance. Αυτό που ζητάς ως classify θέλει τόσα if όσα και τα χρώματα που θες και στο καθένα οι σταθερές τιμές θα είναι οι τρεις τιμές RGB του χρώματος που θες να πεις ότι είναι, καθώς και τα + και - οι ανοχές στο καθένα!

Δημοσ.

Μου ‘χεις απαντήσει δύο φορές για κάτι διαφορετικό από αυτό που ρώτησα. Τη μία μου λες να πάω με HLS. Σου απαντώ ότι αυτό δεν δουλεύει και παραθέτω και τις τιμές που έχω χρησιμοποιήσει. Και επιβεβαιώνεις ότι δεν δουλεύει. Χαίρω πολύ. Τι τιμές να βάλω μπορείς να μου πεις;

 

Μετά μου λες για το tolerance το οποίο δεν έχει καμία σχέση με αυτό που θέλω να κάνω.

 

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

 

Δεν μπορείς να κάνεις ομαδοποίηση χρώματος με βάση τις RGB τιμές. Πρέπει να πας με το LAB και μετά να υπολογίσεις το color distance κάθε χρώματος από κάποιο χρώμα αναφορά. Αλλά δεν ξέρω έναν γρήγορο τρόπο να κάνω αυτή τη σύγκριση και γι αυτό ρωτάω.

Δημοσ.

Αν εχεις ενα πινακα με κατι εκατομμύρια αριθμους τους ταξινομείς και μετά θα παίρνεις ομαδες με κοντινούς μεταξύ τους. Αυτο δεν ειναι τοσο χρονοβόρο (nlog(n)).

Δημοσ.

Εγώ κατάλαβα πως θες color partitioning όπως στα gif να βγάλεις μια παλέτα. Δεν είναι τόσο απλο αλλά υπάρχουν αλ(ο)γόριθμοι για αυτό το θέμα.

Δημοσ.

Εγώ κατάλαβα πως θες color partitioning όπως στα gif να βγάλεις μια παλέτα. Δεν είναι τόσο απλο αλλά υπάρχουν αλ(ο)γόριθμοι για αυτό το θέμα.

 

Ξέρεις κάποιον;

Δημοσ.

@elorant

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

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

Συνοψίζοντας: Δεν σου δούλεψε το HLS διότι αφενός χρησιμοποίησες το HSV https://en.wikipedia.org/wiki/HSL_and_HSV

και αφετέρου έκανες μια σαλάτα στην διάρθρωση των If.

Συνέχισε όμως..μην τα παρατάς.

Άλλες συμβουλές θα προσπαθήσω...να μη σου δώσω, μέχρι να μάθεις να είσαι ευγενής!

Δημοσ.

@elorant

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

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

Συνοψίζοντας: Δεν σου δούλεψε το HLS διότι αφενός χρησιμοποίησες το HSV https://en.wikipedia.org/wiki/HSL_and_HSV

και αφετέρου έκανες μια σαλάτα στην διάρθρωση των If.

Συνέχισε όμως..μην τα παρατάς.

Άλλες συμβουλές θα προσπαθήσω...να μη σου δώσω, μέχρι να μάθεις να είσαι ευγενής!

 

Για να καταλάβω θα πρέπει να μου πεις κάτι συγκεκριμένο. Για να μου πεις κάτι συγκεκριμένο πρέπει να έχεις κάνει αυτό που ζητάω ή έστω κάτι συναφές. Προφανώς ΔΕΝ το έχεις κάνει. Μου λες ότι έχω κάνει σαλάτα τα if αλλά δεν μου προτείνεις το σωστό. Άρα τι συζητάμε; Ποιος την έχει μεγαλύτερη; ΟΚ, εσύ την έχεις.

Αυτό θέλεις να κάνεις; Να βγάλεις μια παλέτα;

 

Θέλω να βγάλω μια ομαδοποίηση χρωμάτων. Να μου λέει δηλαδή ότι έχει 5% κόκκινο, 10% μαύρο, 3% πράσινο, 20% μπλε κ.ο.κ. Και συνολικά να έχει το πολύ 20, 30 χρώματα. Δεν ξέρω αν λέμε το ίδιο πράγμα.

Δημοσ.

Ρε φίλε θες ανάλυση χρωμάτων σε δικά σου primary χρώματα! Αυτό ζητάς. Κάτι τέτοιο δεν χρειάστηκε να κάνω! Αν θες κάνε ένα διδακτορικό σε αυτό!

 

 

http://zsolt-kovacs.unibs.it/colormixingtools/cmt-color2drop

 

 

 

http://sensuallogic.com/paintmaker/OnlinePaintMixer/index.html

Δημοσ.

Θέλω να βγάλω μια ομαδοποίηση χρωμάτων. Να μου λέει δηλαδή ότι έχει 5% κόκκινο, 10% μαύρο, 3% πράσινο, 20% μπλε κ.ο.κ. Και συνολικά να έχει το πολύ 20, 30 χρώματα. Δεν ξέρω αν λέμε το ίδιο πράγμα.

 

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

 

Άρα λοιπόν αυτό που θες είναι αλγόριθμο για να βρίσκεις πόσα και ποιά είναι αυτά τα χρώματα, μετά η ποσόστωση είναι trivial. Από τη στιγμή που το πόσα και ποιά είναι αλληλοεξαρτώμενα όμως, δεν πρέπει να δώσεις και μια ιδέα για το πώς σκέφτεσαι τις παραμέτρους της λύσης; Πράγματα όπως αυτό το 20-30 που είπες. Όπως το αν έχεις μια εικόνα που αποτελείται μόνο από 20 χρώματα πολύ όμοια, τι θα ήθελες να κάνει ο αλγόριθμος;

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα

  • Δημιουργία νέου...