Handschrifterkennung



  • Zum Thema Rotation fällt mir nur Stichwort FFT ein. Hab leider keine Ahnung, wie man im FFT - Raum eine Mustererkennung durchführt. Ich weiß nur, das es im FFT - Raum egal ist, wo und wie sich dort ein Objekt befindet -> hauptsache die auftretetenden Frequenzen sind signifikant genug.



  • Ich bin mir nicht so sicher, ob FFT da was bringen würde.

    Zu den Rotationen: Schon klar, daß man Rotationen durch Matrizen ausdrücken kann. Leider sind unsere Vektoren aber diskret, sodaß wir riesige Fehler beim rotieren rausbekommen. Zudem wissen wir auch nicht so genau in welche Richtung wir denn rotieren sollen...
    Ich denke das zentrieren bringt was, von der Rotation erhoffe ich mir nicht allzuviel.

    Bin leider noch nicht dazu gekommen am Source zu schrauben, vielleicht heute abend. Rechnet nicht vor morgen mit dem Zeug.

    MfG Jester



  • TheBigW schrieb:

    Zum Thema Rotation fällt mir nur Stichwort FFT ein. Hab leider keine Ahnung, wie man im FFT - Raum eine Mustererkennung durchführt. Ich weiß nur, das es im FFT - Raum egal ist, wo und wie sich dort ein Objekt befindet -> hauptsache die auftretetenden Frequenzen sind signifikant genug.

    Eine Mustererkennung im Ortsbereich funktioniert genauso wie eine Erkennung im Originalbereich, schließlich liegen weiterhin "gesetzte Pixel" vor, die man mit einem Original in Deckung bringen will.

    Also sollte man die gleichen Algorithmen einsetzen können wie zuvor auch.

    ABER ich bin mir nicht so ganz über den Sinn sicher. Falls einer mal Bilder transformieren will, ich kann dazu mein Diplomarbeitsprogramm zur Verfügung stellen, da könnt Ihr ein bißchen FFT machen und Euch die Bilder im Ortsbereich ansehen.

    Denn eine Sache ist klar, ein gedrehtes Bild ergibt auch ein anderes transformiertes Bild [Identität, Linearität der Abbildung, bla], ich bin mir nur jetzt nicht sicher, wie die Drehung im Bildbereich aussehen wird, welche Frequenzen anders sind.

    Evtl. kann man dann die Bilderkennung auf die Amplitude des transformierten Vektors begrenzen und vernachlässigt die Phaseninformation... das könnte sein. Aber der komplexe transformierte FFT-Vektor ist für gedrehte Bilder anders.

    Hugh!



  • Ich vermute auch mal, daß die Amplitude gleich bleibt und sich nur die Phase ändert. Das blöde dabei ist: Die Hauptinformation von Bildern ist in der Phase kodiert.

    Kann man leicht nachprüfen, indem man mal ein Bild transformiert und dann bei der Rücktransformation eine der beiden Informationen wegläßt. Wenn man nur die Phase benutzt kann man danach noch einiges erkennen. Verwendet man nur die Amplitude bleibt kaum was übrig.

    MfG Jester



  • kingruedi schrieb:

    Jester schrieb:

    kingruedi würde gern z.b. sowas wie wxwindows dafür sehn, damit er das ganze projekt bei sich laufen lassen kann, hab ich recht?

    jo, wär ein bisschen Schade, wenn das Projekt eh Plattformunabhängig ist, dass es dann an der GUI scheitert 🙂

    Es gibt bei jedem Projekt eine wichtige Regel: "first things first!".

    Anbetracht der vielfältigen zu lösenden Probleme im mathematischen Background führt diese Forderung vom Weg ab. Projekte scheitern dann, wenn die Ziele zu weiträumig gesteckt sind und zu wenig Zwischenziele vorhanden sind. Diskussionen über GUIs zum jetzigen Zeitpunkt führen IMO vom Weg ab und legen den Grundstein für das Scheitern, da die Komplexität der Anforderungen rascher erhöht wird als die Bearbeitung erfolgen kann.



  • Jester schrieb:

    Ich vermute auch mal, daß die Amplitude gleich bleibt und sich nur die Phase ändert. Das blöde dabei ist: Die Hauptinformation von Bildern ist in der Phase kodiert.

    Naja, ist ja auch kein Wunder, schließlich lässt man damit dann ja "die Hälfte" von Re und Im weg... das bleibt nicht spurlos. 😉

    Trotzdem wäre es interessant ob aber die in der Amplitude vorhandene Information nicht ausreicht für die Mustererkennung, da hat TheBigW schon recht.

    Denn bei einem eindimensionalen Vektor kann ich viele Systemidentifikationen auch auf der Amplitude ausführen, da die Phase nur Verschiebungen enthält, die nichts mit der Charakteristik zu tun haben.

    Grundsätzlich finde ich daher die Idee zumindest der Überprüfung wert. Für diesen Test kann ich gerne was zur Verfügung stellen, man braucht dann zwar die Bilder als Bitmap/TIFF/bla, aber damit lässt sich schnell ein Unterschied zwischen a und a sehen... das Programm kann Re/Im/Ampl/Phase-Bilder getrennt darstellen.



  • Okay, das ist wohl auf jeden Fall einen Versuch wert. Würde ich aber für den Moment auch erstmal noch etwas weiter hinten anstellen, da ich andere Dinge momentan für vielversprechender halte.
    Heute abend werde ich hoffentlich dazu kommen den Code zu überarbeiten. Dann schauen wir mal weiter.

    Nochmal was zur GUI:
    Eigentlich entwickeln wir eine Bibliothekt, die Handschrifterkennung von Einzelbuchstaben realisiert. Das hat mit ner GUI erstmal garnichts zu tun. Um unsere Lib zu testen und auch vorführen zu können brauchen wir aber ne kleine Demoapplikation, und weil's einfach und schnell ging haben wir die halt mit MFC gemacht. Aber ich verstehe diese GUI nicht als Bestandteil der Lib.



  • weg



  • 2dimensionale fft. ich such mal in meinem buch, wo das erklärt ist 🙂



  • Das ist einfach einmal FFT in X-Richtung und danach in Y-Richtung (oder umgekehrt). Formel hab ich... Aber ich weiß verspreche mir momentan nicht zuviel davon...



  • wie habt ihr eigentlich bisher definiert wie welcher buchstabe aussehen soll?

    was man villeicht auch versuchen kann ist massenweise verschieden schriftproben von buchstaben (wenn am besten erstmal von einer person) über ein neuronales netz zu jagen... wenn das dann genug gelernt hat kann man veruschen ob das netzt schlau genug ist sowas zu erkennen...



  • Wir habens zwar nicht mit neuralen Netzen gemacht, aber wir haben in der Tat viele, viele Samples erstellt.



  • Wir habens zwar nicht mit neuralen Netzen gemacht, aber wir haben in der Tat viele, viele Samples erstellt.

    und was habt ihr dann mit den samples gemacht?

    nen mittelwert genommen? das hätte bestimmt nicht gut funktioniert... oder vergleicht ihr einen buchstaben immer mit z.b. 10 soll-a's

    wie genau habt ihr denn nun einen bestimmten buchstaben definiert und wie läuft der vergleich ab?



  • @windalf: im augenblick ist es ein ziemlich billiger next neighbour, und das sample set manuell erstellt (überwachtes lernen 😉
    die merkmalvektoren wurden über pca extrahiert

    werde demnächst für dieses projekt einen bayes klassifikator, sowie eine support vektor maschine einzubauen



  • Hallo!

    Ihr könnt einen fix und fertigen Installshield-Installer bekommen. 1 Stunde ausprobieren, danach Idee verwerfen oder verwenden.

    Keine Bücher notwendig.



  • Habt ihr mal über die Verwendung von Fourier-Deskriptoren nachgedacht?



  • Gregor schrieb:

    Habt ihr mal über die Verwendung von Fourier-Deskriptoren nachgedacht?

    mann, macht ihr viel druck in richtung Fourier und Drehen.

    das paßt aber nicht harmonisch in den rest rein.

    und wenn dir die drehinfos endlich nach wochenlanger arbeit rausgeschmnissen haben, stellen wir fest, daß x und +, 8 und inf, / und \, W und M, E und 3, 5 und S, u und n, p und d, g und 6, 7 und L nicht mehr unterscheidbar sind.

    ich bin dafür, das von vornherein sein zu lassen. es gibt genügend andere sachen zu tun.



  • jop. eher legt man die stichproben so aus, dass drehungen mitreinklassifiziert werden



  • Hallo!

    Während sich hier einige mit Buzzword-Bingo vergnügen (neuronale Netze war auf meiner Liste!) habe ich mal das Programm samt einer kleinen Anleitung online gestellt.

    Ihr findet das ganze unter www.stud.uni-karlsruhe.de/~uzgv.
    Viel Spaß beim Testen.

    Achja, und nein: Ich werde nicht die komplette Struktur des Programmes umwerfen, nur weil irgendjemand mal irgendwo gehört hat, daß man vielleicht mit neuronalen Netzen möglicherweise irgendwas erkennen könnte.

    MfG Jester



  • So, ich hab mal ne Liste gemacht mit dem, was man als nächstes ausprobieren könnte:

    Wir brauchen ein Skript, das Messungen erlaubt. Es sollte nacheinander immer ein Zeichen aus der Datei lesen, versuchen dieses zu erkennen und es danach ins Samples-Set mit aufnehmen.
    Dabei sollte wir verschiedene Messungen machen: Was passiert bei Variation von precision, iprecision, dem pow-Argument vom AddPowerkernel, was bringen andere Kerne?
    Bei jedem Hinzufügen zum Samplesset sollte die Änderung jedes Samples erfaßt werden. Die Summe all dieser Änderungen gibt in jedem schritt an, inwiefern sich noch etwas verändert. Ist die Veränderung klein genug muß nur noch im Klassifikator eingefügt werden. Das geht möglicherweise deutlich schneller.

    Um sowas auch effizient implementieren zu können müssen wir das einlesen in ein eigenes Modul reinsetzen, das unabhängig arbeitet. Wenn ich das recht verstanden habe dann arbeitet Korbinian bereits an sowas.

    Außerdem muß der Klassifikator irgendwelche Logging-Funktionen unterstützen.

    Ich habe inzwischen noch zwei neue Kerne geschrieben die man auch mal testen müßte. Aber ich denke das geht erst wenn wir das Testframework haben.

    Wie sieht's denn jetzt aus, wer hat alles Lust mitzuarbeiten?
    Ihr braucht keine speziellen Vorkenntnisse!

    MfG Jester


Anmelden zum Antworten