Algorithmus für hellstes Pixel (~echtzeit?!)

Dieses Thema im Forum "Programmieren allgemein" wurde erstellt von Requiem, 09.12.2006.

  1. #1 Requiem, 09.12.2006
    Requiem

    Requiem Grünschnabel

    Dabei seit:
    09.12.2006
    Beiträge:
    3
    Zustimmungen:
    0
    Hallo an alle!

    Ich hab ein recht komplexes problem, auch wenn die frage an sich wohl einfach ist :/ :
    für ein projekt muss ich in einem bild möglichst schnell das hellste pixel finden (wenn es mehrere gibt sollte das erste mit maximalwerten reichen).
    Das bild kommt letztendlich von einer usb-webcam und hat zwar farbinformationen, dürfte aber wegen filtern an der kamera nur noch aus schwarz/grau und ein paar hellen flecken bestehen. Das bild hat eine auflösung von mindestens 800x600 und maximal 1600x1200. Da das hellste pixel nach möglichkeit in echtzeit in jedem frame (also 25x in der sekunde) gefunden werden soll, brauche ich dafür jetzt einen möglichst effektiven algorithmus.... ich erwarte/hoffe garnicht auf komplette ausarbeitungen,ich brauche lediglich ansätze wie das am schnellsten ginge, da die methode
    Code:
    for pixel in frame; do
       if [[ value > $max ]]; then max=pixel(x,y); fi
    done
    nicht sonderlich effizient ist ;) auf die programmiersprache kommts deshalb auch nicht an, pseudocode reicht vollkommen!
    Bin für alle vorschläge dankbar :)

    MFG
    Requiem
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 schorsch312, 09.12.2006
    schorsch312

    schorsch312 Routinier

    Dabei seit:
    18.07.2006
    Beiträge:
    372
    Zustimmungen:
    0
    Hi,
    Jenachdem wie genau du das ganze brauchst kannst du folgendes machen:
    Leg ein Raste über das bild.

    count x_pixel
    cont y_pixel

    for pixel in y_pixel do
    for pixel in x_pixel do
    if [[ value > $max ]]; then
    max=pixel(x,y);
    x_max=x;
    y_max=y;
    fi
    done
    done


    und such in der umgebung des hellsten pixels des Rastes
    range=10 #belibieger wert.
    y__range_pixel = y_max - range to y_max +range;
    x__range_pixel = x_max - range to x_max +range:

    for pixel in y__range_pixel do
    for pixel in x__range_pixel do
    if [[ value > $max ]]; then
    max=pixel(x,y);
    fi
    done
    done


    Du kannst hal unter umständen nicht den hellsten punkt finden, das muss dir bewusst sein, aber einen hellen Punkt findest du auf jeden fall (lokales maximum). Besonders bei einem großen helligkeits gradienten kann das auftreten.
    Ich hoffe, dass dir mein vorschlag weiterhilft.
    Gruß, Georg
     
  4. #3 cremi, 09.12.2006
    Zuletzt bearbeitet: 09.12.2006
    cremi

    cremi Dude

    Dabei seit:
    15.02.2004
    Beiträge:
    329
    Zustimmungen:
    0
    Ort:
    AUT/Ktn
    wandle das bild von rgb nach hsv um dann hast du die helligkeit jedes pixels im v-wert - umwandeln am besten mit ImageMagick.
    Ich habs mal in C implementiert - müßte aber suchen.


    alternativ: mit matlab sollts in ebenfalls in echtzeit gehen
     
  5. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Wenn man schon vom Ideal ausgeht, lok. Optimum = glob. Optimum, dann gibt es elegantere Methoden als das Abgrasen des gesamten Bereiches, um diese zu ermitteln. Einfach und schnell zu realisieren wären Tangentenmethoden (zum Beispiel von Newton).

    Gruss, Xanti
     
  6. #5 schorsch312, 09.12.2006
    schorsch312

    schorsch312 Routinier

    Dabei seit:
    18.07.2006
    Beiträge:
    372
    Zustimmungen:
    0
    Stimmt!
    Gruß, Georg
     
  7. #6 Requiem, 11.12.2006
    Zuletzt bearbeitet: 11.12.2006
    Requiem

    Requiem Grünschnabel

    Dabei seit:
    09.12.2006
    Beiträge:
    3
    Zustimmungen:
    0
    Hi!

    Erstmal vielen dank für die vielen antworten, mit der emailbenachrichtigung hat leider irgendwie nicht geklappt :/

    Das umwandeln in hsv hab ich mir auch schon überlegt, aber ich denke die umwanldung braucht zu lange und die rastermethode halte ich für wenig effektiv, könnte auch unter umständen zu viele ressourcen verbrauchen... Deshalb klingt das mit den tangenten sehr interessant (vor allem da es sich idr wirklich um ein globales maximum handeln sollte). Wo/unter welchen suchbegriffen kann ich denn mehr dazu finden?

    Nochmal vielen dank!
    Requiem

    edit: wenn damit das newton-verfahren gemeint ist hab ich grad null ahnung wie ich das darauf anwenden soll oO
     
  8. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Mal sehen, ob ich das alles noch aus meinen Erinnerungen zusammenkriege (wenns fehlerhaft ist, nicht meckern) ;)

    Da die Funktion (sagen wir f) konvex ist, gilt offensichtlich:

    Code:
    x ist minimal, falls f'(x) = 0
    
    Du musst also die Nullstelle von f' berechnen, z. B. mit dem Newtonverfahren:

    Code:
    solange |f'(x_n)| > toleranz 
    {
    1. Gradient an der Stelle x_n approximieren (damit hast Du die Suchrichtung)
    2. Schnittstelle des Gradienten mit der X-Achse berechnen -> x_n+1
    }
    
    Da Deine Funktion auf einer (zweidimensionalen) Ebene definiert ist, musst Du zur Aproximation der Ableitung 3 Stützstellen nutzen (x_n + x-Richtung + y-Richtung).

    Gruss, Xanti
     
  9. #8 schorsch312, 11.12.2006
    schorsch312

    schorsch312 Routinier

    Dabei seit:
    18.07.2006
    Beiträge:
    372
    Zustimmungen:
    0
    Hi,
    das hier dürfte dir weiterhelfen.
    http://de.wikipedia.org/wiki/Newton_Iteration

    Das Problem bei der ganzen sahe ist , dass du nicht zwingend das globale Maximum erreichst, da die Verteilung der Helligkeit nicht stetig differenzierbar ist.
    Wenn es dir darauf ankommt unter allen Umständen denn hellsten Punkt zu erwischen sind diese Verfaheren nicht geeignet.

    Gruß, Georg
     
  10. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  11. #9 Requiem, 11.12.2006
    Requiem

    Requiem Grünschnabel

    Dabei seit:
    09.12.2006
    Beiträge:
    3
    Zustimmungen:
    0
    oi :think: Ich...denke ich muss mich da ziemlich reinknien um das anwenden zu können.... :hilfe2: ^^ naja, vlt wirds ja....

    nochmal eine frage zum verständnis: prinzipiell ist das ganze dann doch sogar 3dimensional, oder? also x/y für die position und z für steigung/helligkeit?

    Zumindest hab ich jetzt was worüber ich mir die nächsten tage den kopf zerbrechen kann ^^

    Regards
    Requiem
     
  12. #10 Xanti, 11.12.2006
    Zuletzt bearbeitet: 11.12.2006
    Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Die Funktion und damit das Problem ist zweidimensional, die Darstellung mit x-y-z dreidimensional.
     
Thema:

Algorithmus für hellstes Pixel (~echtzeit?!)

Die Seite wird geladen...

Algorithmus für hellstes Pixel (~echtzeit?!) - Ähnliche Themen

  1. Google stellt neuen Kompressionsalgorithmus Brotli vor

    Google stellt neuen Kompressionsalgorithmus Brotli vor: Entwickler von Google haben den Brotli-Algorithmus, der bereits im Web-Font-Format WOFF2 zum Einsatz kommt, unter der Apache 2.0-Lizenz...
  2. Rekursiver Algorithmus mit Fibonacci Funktion (Fibo)

    Rekursiver Algorithmus mit Fibonacci Funktion (Fibo): Hallo zusammen, hat von Euch jemand eine Idee, für ein Shell Script mit einem Recrusiven Algorithmus mit einer Fibonacci Funktion? Ich will...
  3. Algorithmus von UNIX diff (An algorithm for differential file comparison)

    Algorithmus von UNIX diff (An algorithm for differential file comparison): Hallo zusammen Ich suche eine gute Beschreibung, wie das UNIX Werkzeug "diff" funktioniert. Kann mir da jemand weiterhelfen? Vielen Dank im...
  4. SAMBA für Windows10 Domäne einrichten

    SAMBA für Windows10 Domäne einrichten: Hallo, ich habe letztes Wochenende verzweifelt versucht, Samba auf meinem Server einzurichten, daher versuche ich aktuell meinen Fehler zu...
  5. Empfehlung für Server Distribution

    Empfehlung für Server Distribution: Hallo, ich habe hier zu Hause einen kleinen Heimserver, auf welchem ich ein paar Daten für den Zugriff im Haus, einen kleinen Web Service für...