Announcement

Collapse
No announcement yet.

Pic stück vergleich

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Pic stück vergleich

    Hi ich such seit einigerzeit nach einerlösung für mein Problem:

    1.Ich möchte das meine Anwendung einen Screenshotmacht
    2.Dann soll auf dem Screenshot ein Bild z.B.: aus der picbox1 auf dem Screenshot gesucht werden.
    3.Die Maus soll zum Anfang des gefunden Bildes Gehen oder zur mitte.

    Danke für Hilfe

    gruß MC

  • #2
    Hallo,

    1.Ich möchte das meine Anwendung einen Screenshotmacht
    Das ist noch der einfachste Teil:
    [highlight=vbnet]
    Dim screenWidth As Integer = Screen.GetBounds(New Point(0, 0)).Width
    Dim screenHeight As Integer = Screen.GetBounds(New Point(0, 0)).Height
    Dim bmpScreenShot As New Bitmap(screenWidth, screenHeight)
    Dim gfx As Graphics = Graphics.FromImage(DirectCast(bmpScreenShot, Image))
    gfx.CopyFromScreen(0, 0, 0, 0, New Size(screenWidth, screenHeight))
    bmpScreenShot.Save("test.jpg", ImageFormat.Jpeg)
    [/highlight]

    2.Dann soll auf dem Screenshot ein Bild z.B.: aus der picbox1 auf dem Screenshot gesucht werden.
    Das ist der schwierigste Teil, aber mit ein wenig (oder mehr) Mathematik lässt sich auch das lösen. Grundsätzlich ist folgende Vorgehensweise anzuwenden:
    1. Das Referenzbild (picBox1) als Fenster über den Screenshot gleiten lassen.
    2. Dabei für jeden Fensterbereich einen Vergleichswert berechnen
    3. Der Bereich mit dem höchsten Vergleichswert liefert den Treffer.

    Die Wahl der Funktion zur Berechnung des Vergleichswertes ist entscheident über die Geschwindigkeit und Speicherverbrauch. Spontan fallen mir folgende Möglichkeiten ein:
    • Kreuzkorrelation
    • Wavelet-Transformation
    • Histogramm der Farbwerte
    • Modifizierung des Levenshtein-Algorithmus um diesen für Bilder anzuwenden (sofern es dies nicht schon gibt - weiß ich nicht)
    • Subtraktion der Bild-Teile innerhalb des Fenters
    • ...

    Da ich kein Experte in der Bildverarbeitung bin weiß ich nicht welche Variante am effizientesten ist. Sollten das Bild aus picBox1 mit hoher Wahrscheinlichkeit im Screenshot enhalten sein kann ich mir vorstellen dass die Subtraktion das einfachste Verfahren sein wird - idente Größe des Bildes mit dem zu findenden Bild im Screenshot vorausgesetzt. Ist dies nicht der Fall würde ich die Kreuzkorrelation verwenden.
    Wavelet und Histogramm bilden eine Art "Fingerabdruck" des Fensters und dieser kann gecached werden um für einen späteren Vergleich vorhanden zu sein.
    Also die Auwahl ist dir überlassen - da ich auch nicht weiß was ideal ist.
    Fertigen Code kann ich dir keinen liefern da ich das wenn schon in C# programmiere und meine Anwendungsfälle sich auf eine Linearkombination Tensoren 1. Stufe reduzieren lassen. Ich hab alson keinen Code für Tensoren 2. Stufe wie für die Bildverarbeitung benötigt parat. Es sollte aber nicht das Große Problem darstellen. Alle Algorithmen zu den genannten Möglichkeiten sind sehr gut mathematisch beschrieben oder du suchst entsprechen nach einem Code-Snippet oder verwenest eine numerische Bibliothek (wie zB ILNumerics).

    Die Verwendung von künstlichen neuronalen Netzen für diesen Anwendungsfall kann ich mir nicht vorstellen (auch wenn ich ein "Fan" von KNN bin).


    3.Die Maus soll zum Anfang des gefunden Bildes Gehen oder zur mitte.
    Im 2. Punkte kannst du die Position des Fensters merken an dem die Beste Übereinstimmung der Vergleichswerte bzw mit minimaler Differenz war. Aus dem rechteckigen Fenster ist es kein Problem die Koordinaten für Anfang (wo immer der auch sein soll) oder Mitte zu ermitteln. Mit den Methoden Point.ToClient und Point.ToScreen können Koordinaten auf das jeweilige Koordinatensystem umgerechnet werden.
    Zum Setzen der Maus-Koordinaten gibt es AFAIk die Eigenschaft Cursor.Position.


    Hoffe es hilft - auf das Ergebnis bin ich gespannt

    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Thx

      THX für die schnelle Hilfe werde es gleich mal umsetzen.

      gruß Mc

      Comment


      • #4
        werde es gleich mal umsetzen.
        Korrekt formuliert: Werde es mal umsetzen Das gleich glaube ich nicht so ganz

        Welche Variante wirst du verfolgen?

        mfG Gü
        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

        Comment


        • #5
          AW

          Ich mache die mit dem rüber gleiten die finde ich am besten.
          Ahja bin erst 13 und Rechtschreibung,Gramatik isbei mir nit so...

          Noch ma danke ne..

          grüß mc

          Comment


          • #6
            Originally posted by MC_VB View Post
            Ich mache die mit dem rüber gleiten die finde ich am besten.
            Das ist keine Variante sondern wesentlicher Bestandteil aller Varianten.

            Ahja bin erst 13
            Aufgrund dessen und der Tatsache dass du wahrscheinlich nichts aus meiner Antwort verstanden hast (sonst hättest du da rüber gleiten nicht als Variante erwähnt) kann ich dir nur raten: Vergiss dieses Problem.

            Die Komplexität deines Problem ist durchwegs so hoch dass daraus eine Forschungsprojekt entstehen kann.
            Ohne dir jetzt persönlich nahetreten zu wollen oder gar beleidigend zu wirken: Aber du bist nicht soweit. Es werden fundamentale Mathematische Zusammenhänge nötig sein. Und die beherrscht kein 13-jähriger (auser ein Superhirn vielleicht - aber siehe oben).

            Vorschlag:
            Lerne mal die Grundlagen. Beschäftige dich danach mit numerischer Mathematik und Numerik im allgemeinen. Dann kannst du das Problem lösen.

            Solltest du diese Voraussetzung allerdings erfüllen vergiss was ich geschrieben habe und beginne gleich mit der Umsetzung


            mfG Gü
            "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

            Comment

            Working...
            X