2 gescannte Bilder vergleichen

  • VB.NET

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von XGame®.

    2 gescannte Bilder vergleichen

    Hi leute,
    Ich bin neu hier im Forum, und hab schon mal gesucht obs nicht schon etwas gibt was meine frage beantwortet.
    Es war schon sowas ähnliches dabei, allerdings gings da um einen vergleich der unterschiede zeigt, oder einen bestimmten bereich ausfindig macht.
    Das ist aber leider nicht das was ich brauche, Ich möchte nämlich zwei bilder vergleichen, und erkennen ob das gleiche drauf ist.
    D.h. z.B. ich scanne was ein, und speichere es . Jetzt scann ich was anderes ein, das zwar allgemein die gleiche Form hat,
    aber nicht genauso groß breit usw. wie das erste ist, sprich nicht die gleichen maße hat. Wie bei zwei Eichenblättern oder so, Die Form ist die Gleiche, nur ist das eine halt länger etc...
    Es müsste dann mit proportionen gearbeitet werden, oder? Hat jemand sowas schonmal gemacht oder kennst sich ein bisschen damit aus?

    Ich bin für jede Hilfe dankbar :thumbsup:

    mfg XGame®
    Also nur zum Verständnis:

    - 2 Bilder
    - 2 verschiedene Formen ( 2 mal das gleiche Blatt oder 2 verschiedene Blätter mit ca. gleicher Form?
    - 2 verschiedene Größen
    - 2 Bilder mit verschiedenen Farben

    richtig?
    ok, Ich versuchs nommal verständlich,
    2 Bilder - richtig
    2 verschidene formen - fast richtig, ich meine zwei verschiedene Blätter mit ca. gleicher Form z.B. zwei Eichenblätter, aber halt verschiedene
    2 verschiedene größen - richtig, lässt sich ja nicht vermeiden^^
    2 Bilder mit verschiedenen Farben - Ja, aber es sind dann schon noch ähnliche farben, also dunkles orange und braun, nicht gelb und lila
    jetzt scann ich das erste bild ein, und verwende es als referenzbild. Nun kommt noch das zweite das ich vergleichen will. Der programmcode sollte in etwa so funktionieren:

    Vergleiche Referenzbild mit Eingescanntem Bild,
    wenn die proportionen stimmen dann gib eine nachricht aus: " Es ist ein eichenblattt "

    Was ich erreichen will, ist dass ich eine datenbank mit verschiedenen Blättern mache, und dann halt ein anderes bild einscanne, und jetzt mein programm das eingescannte bild mit denen aus der datenbank vergleicht und mir dann sagt was ich da gerade eingescannt hab...

    Ich hoffe jetzt isses verständlicher :D

    mfg XGame®
    Das dürfte verdammt komplex werden, aber möglich ist es definitiv.
    So ne Idee:

    Alle anderen Pixel außer die weißen schwarz machen.
    Und dann wie auch immer die Form vergleichen, müsste man mehrere Sachen ausprobieren.
    ja nur leider hab ich sowas noch nie gemacht...
    Das mit dem Schwarz weiß sollte relativ einfach zu machen sein...
    Ich google mal ne runde und versuch n paar möglichkeiten zu finden, werd mich dann morgen nochmal melden :)

    Und danke für den Vorschlag, war hilfreich :thumbup:

    (hoffentlich) bis morgen

    mfg XGame®
    Bildverarbeitung:
    in Grauwertbild konvertieren
    nx Medianfilter (Ausreißer eliminieren)
    disktiminieren (Bild nach schwarz-weiß konvertieren, die Schwelle geeignet legen (Erfahrung)
    mx Erosion
    mx Dilation (Brücken aufbrechen)
    Laplace-Filter (Kanten finden)
    und dann weitersehen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Also ich habe grade ein ähnliches projekt, nur dass es ganz einfach gehalten werden soll.
    Ich will, dass das Programm ein Bild mit ein Paar, in einer Datenbank gespeicherten bildern, vergleicht und mir sagt, welches es von diesen bildern ist.
    Beide Bilder Bestehen aus einem Muster aus schwarzen und weißen Punkten.

    Geht das, wenn ich jeden Einzelnen Pixel vergleiche?
    Wenn 2 von denen tatsächlich pixelidentisch sind, geht das schon, nur musst Du da direkt in den Pixelspeicher reingehen:

    VB.NET-Quellcode

    1. Dim bmpData As System.Drawing.Imaging.BitmapData
    2. bmpData = bmp.LockBits(New Rectangle(0, 0, bmp.Width, bmp.Height), System.Drawing.Imaging.ImageLockMode.ReadWrite, bmp.PixelFormat)
    3. Dim ptr As IntPtr = bmpData.Scan0
    4. Dim ofs As Integer = 0
    5. For y As Integer = 0 To bmp.Height - 1
    6. ofs = y * bmpData.Stride
    7. ' auf den Beginn einer neuen Zeile legen
    8. ' wegen der byte-to-ushort-Konvertierung kein Marshal.Copy()
    9. For x As Integer = 0 To bmp.Width - 1
    10. ' Marshal.ReadByte(ptr, ofs) ' hier etwas mit den Werten tun
    11. ofs += 1
    12. Next
    13. Next
    14. bmp.UnlockBits(bmpData)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    sry dass ich solang ned da war , war erkältet.
    @RodFromGermany
    die bilder sind ja nicht pixelgleich,(zumindest wenn ich pixelgleich richtig definiere)...
    weil Ich habe ja eine datenbank mit referenzbildern, und dann scanne ich ein Anderes bild ein, und möchte dann gesagt bekommen:
    von der form her ist auf dem gescannten bild ein eichenblatt zu sehen.
    (Also sowas wie Anubis153, nur ich hab keine muster oä., nur die form...)
    Pixelgleich heist schon jedes pixel ist gleich oder? Das kann ja nicht sein, da das neu eingescannte bild ja nicht das selbe ist wie das
    in der datenbank...

    und was meinst du mit
    nx Medianfilter (Ausreißer eliminieren)
    disktiminieren (Bild nach schwarz-weiß konvertieren, die Schwelle geeignet legen (Erfahrung)
    mx Erosion
    mx Dilation (Brücken aufbrechen)
    Laplace-Filter (Kanten finden)
    ?
    sry hab gegoogelt aber nix gefunden, wie gesagt, hab mich damit noch garnicht beschäftigt...

    vtll. n paar links zum lernen oder tutorials oder sowas in die richtung, Ich will nämlich nicht nur code c&p machen...
    Ach und sry, aber bei dem code von dir versteh ich 0 bis garnichts :(

    mfg XGame®

    XGame® schrieb:

    und was meinst du mit
    ...

    Das sind Operatoren in der Bildverarbeitung.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @SystemUnknow

    Ich meinte jetzt nicht "Ich hab null ahnung zeigt mir wies geht" (ned bös gmeint),
    Ich hab schon n paar programme geschrieben,
    z.B. ein diashowprogramm für win2k, wo man einen ordner einliest und automatisch alle bilder in dem programm angezeigt werden,
    oder ein schulprojekt, wo man per handy eine sms mit z.B. den abgefragten vokabeln
    an einen emailserver sendet, das programm automatisch alle emails abruft und mit
    einer musterlösung die auf dem pc gespeicher ist vergleicht, um danach eine email an den jeweiligen schüler zurückzuschicken, in der
    die fehler und die note stehen. Sollte dazu dienen die wartezeit bis man z.B. nen vokabeltest zurückbekommt zu verringern.
    Also ich fang im allgemeinen nicht bei 0 an, aber im bereich grafik hab ich noch nie was gemacht. Gibts dazu vtll. Tuts oder ähnliches?

    @vb-checker
    danke werds mir mal anschauen :thumbup:

    ps: bin ab heute abend mit meiner klasse auf Abschlussfahrt, bin also ne woche nicht da...
    Nicht dass ihr denkt ich hab kein bock mehr oder so...
    hoffe wir können uns in 1er woche weiter unterhalten, bis dahin ciao und viele grüße :)

    XGame®