Farbanteile eines Bildes

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Farbanteile eines Bildes

    In der PHP.net Manual ist nirgendwo die Rede davon, wie man den prozentualen Anteil einer Farbe am gesamten Bild herausbekommt.

    Theorethisch könnte man das ja mit imagecolorat machen, jedoch wäre das schon bei Bildern mit 500 x 500 px Größe sehr aufwendig.

    Hat jemand eine Idee ?

  • #2
    Gäbe es eine Funktion dafür, hätte sie diese Signatur:
    int imagecolorpercent ( resource image, int color )

    Man übergibt ihr also das Bild und die Farbe, deren Anteil man wissen möchte. Was würde dann aber geschehen? Die Funktion würde Pixel für Pixel durchgehen, also genau das gleiche, was man intuitiv auch von Hand coden würde.

    Wenn du eine solche Funktion brauchst, schreib sie dir:
    function imagecolorpercent($img, $color) {...}

    Prüfe dabei nicht jedes Pixel, ob es $color ist, sondern zähle die Anzahl Pixel jeder Farbe - z.B. in einem Array:
    $colors[imgcolorat($x,$y)]++

    Die Funktion ist beim 1. Aufruf linear in der Anzahl der Pixel, aber bei einem erneuten Aufruf ist sie konstant, weil es nur noch ein Lookup ist.

    Kommentar


    • #3
      Imagemagick angeguckt, wie im anderen Thread erwähnt?
      Was genau meinst Du mit Farbanteilen - den Anteil einer bestimmten Farbe (= Rot/Grün/Blau-Kombination) oder eines bestimmten Farbkanals (also Rot, Grün oder Blau)?

      Kommentar


      • #4
        Ich habe es so verstanden, dass er gern sagen könnte "42% aller Pixel dieses Bildes haben den Farbwert xy, 21% den Farbwert uv" usw.

        Damit könnte man auch sowas sagen wie "Dieses Bild ist gelbstichtig."

        Kommentar


        • #5
          Original geschrieben von onemorenerd
          Damit könnte man auch sowas sagen wie "Dieses Bild ist gelbstichtig."
          Wäre ein Bild, auf dem eine Banane den größten Teil der Bildfläche einnimmt, wirklich "gelbstichtig" ...?
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            Original geschrieben von onemorenerd
            Damit könnte man auch sowas sagen wie "Dieses Bild ist gelbstichtig."
            Hmm? Das nun nicht. Eine Großaufnahme von einer Banane kann Blaustichig sein und hat immer noch einen großen Gelbanteil

            EDIT:

            Wahsaga war schneller!

            Kommentar


            • #7
              Ihr interpretiert ... anders als ich es meinte ... gelbstichig würde ich sagen, wenn (fast) alle Pixel einen gewissen Anteil Gelb haben. Auf eine Banane vor blauem Grund würde das nicht zutreffen, allerdings kann man dann Aussagen wie "das Bild ist überwiegend blau/gelb" treffen.

              Kommentar


              • #8
                Original geschrieben von onemorenerd
                gelbstichig würde ich sagen, wenn
                Irgendwie {$farbe}-stichig würde ich ein Bild nur dann nennen, wenn die Farben offensichtlich verfälscht sind, die rote Backsteinmauer also eher einen grünlichen Touch hat, o.ä. etc. pp.
                I don't believe in rebirth. Actually, I never did in my whole lives.

                Kommentar


                • #9
                  Unser Hirn sagt uns bei einem Ziegelmuster 'das ist Backstein, das müßte eigentlich rot sein'. Für eine Maschine ist es dagegen sehr schwer, weil sie keine Vorstellung hat, wie eine Backsteinmauer normalerweise aussieht. Allerdings ist ein Bild nicht zwangsläufig grünstichig, wenn die Mauer wirklich grün ist (Moos oder was weiß ich). Ein Algorithmus würde ein solches Bild nur für grünstichig erklären, wenn jedes Pixel soundso grünwertig ist. Das muß natürlich nicht richtig sein.*
                  Die Nahaufnahme eines grünen Blattes kann man kaum algorithmisch auf Grünstich untersuchen ... selbes Problem wie mit der Mauer, der Algorithmus weiß nicht, ob es sich um ein Blatt (per se grün, kein Grünstich) oder ein Feuerwehrauto (eigentlich rot, extremer Grünstich) handelt.

                  Das oder das ist für mich farbstichig.

                  *) Deswegen ist diese Anwendung ein schlechtes Beispiel. Aber sie bewegt sich so schön am Rand des Machbaren ...

                  Kommentar


                  • #10
                    Mir geht es nicht darum zu sagen, ob etwas gelb- oder sonstwiestichig ist, sondern um Prozente:
                    Ich habe eine Art Kreisdiagramm, das eine gewisse Anzahl an Polygonen enthält. Das größte Polygon symbolisiert bei einer Gesichtsfeldmessung den Teil den ein Proband oder Patient sehen kann, die weiteren liegen in dem großen und sind quasi blinde Flecken im Sehfeld. Nun mache ich eine auf 8 Jahre angelegte Langzeit-Studie mit den Probanden und messe einam oder zweimal im Jahr ihr Gesichtsfeld. Dieses verändert sich - mitunter stakr. Man kann nun die Grafiken nebeneinander halten und sagen: aha, hier ist was dazu gekommen, hieer was weggefallen... Aber man sollte auch angeben können: im ersten jahr betrug das Sichtfeld 39 % des Normalfeldes, im zweiten Jahr 34 %, im dritten wurde es wieder besser, da waren es dann 36 % ...

                    Dafür brauche ich das. Ein solches Diagramm kann man sich hier anschauen:
                    Bild Perimetrie-Diagramm

                    Eine Funktion schreiben wäre sicherlich eine Möglichkeit. Allerdings ist das eben Speicherlastig, und ich wolllte das umgehen. Aber ich werde wohl trotzdem mal diesen Weg einschlagen. Wenn es erste Ergebnisse gibt (nach den Feiertagen), gebe ich hier im Forum mal ein Feedback, wie es gelaufen ist, und wie aufwenig (Rechenzeit) das ist.

                    Gruß,
                    Patrick

                    PS: Frohe Weihnachten.

                    Kommentar

                    Lädt...
                    X