Handschrifterkennung



  • btw. Mein bescheidener Wunsch:
    (bitte mach das System Plattform unabhängig und integrierbar (als Library). Könnte sowas gut für GOTT (GUI On Transparent Technology - Widget System) gebrauchen)



  • Die Lib an sich ist vollständig in Standard C++ geschrieben. Nur die Ein/Ausgabe ist mit MFC gemacht. Bis vor dem Forum-Treffen lief alles in der Konsole. Sollte also kein Problem sein.

    MfG Jester



  • Jester schrieb:

    Hab ich schon gescannt, liegt aber noch auf dem Rechner meines Mitbewohners. Werd ich Dir wohl morgen dann zumailen.
    Ist halt etwas umfangreicher(2-3MB), aber ich hoffe das macht nichts.

    MfG Jester

    Danke schön. Lads einfach auf den c++.de-ftp hoch, dann haben wir keine probleme bezüglich Größe.



  • Ich hoffe ich kann das auch ohne Probleme in C# benutzten 🙂 Weil das würde mich auch mal interessieren.



  • Danke schön. Lads einfach auf den c++.de-ftp hoch, dann haben wir keine probleme bezüglich Größe.

    mach doch lieber ein SourceForge Projekt daraus, dann kannst du auch gleich CVS und andere Features (wie Webspace) benutzen.

    Nur die Ein/Ausgabe ist mit MFC gemacht.

    solange man keine MFC Sachen benutzen muss und die weglassen kann (btw. warum nicht lieber was Platformunabhängiges), ist das egal.



  • kingruedi schrieb:

    Danke schön. Lads einfach auf den c++.de-ftp hoch, dann haben wir keine probleme bezüglich Größe.

    mach doch lieber ein SourceForge Projekt daraus, dann kannst du auch gleich CVS und andere Features (wie Webspace) benutzen.

    Das war auf die Sachen bezüglich Hugh bezogen ...

    kingruedi schrieb:

    Nur die Ein/Ausgabe ist mit MFC gemacht.

    solange man keine MFC Sachen benutzen muss und die weglassen kann (btw. warum nicht lieber was Platformunabhängiges), ist das egal.

    Hä? Nur die Oberfläche ist MFC, hat Jester doch geschrieben ...



  • @deus
    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?
    @king: wär vielleicht gleich was für dich, mit einzusteigen, falls du zeit und lust hast 😉

    @jester:
    zur zentrierung und rotation: das macht grad ne kollegin von mir. man kann solche sachen immer als drehung und verschiebung ansehen, und das kannst du mit einer matrix erreichen. vielleicht noch eine kleine idee dazu: man könnte einfach (nachdems nur wenig zeichen sind) das zu klassifizierende zentrieren, dann von einem guten sample "abziehen" und dann entsprechend die klasse, die den kleinsten betrag (vom vektor) hat, als referenz zum drehen hernehmen.



  • Korbinian schrieb:

    zur zentrierung und rotation: das macht grad ne kollegin von mir. man kann solche sachen immer als drehung und verschiebung ansehen, und das kannst du mit einer matrix erreichen.

    rotationen um 90, 180 oder 270 grad sind vermutlich nicht extrem sinnvoll. kleinere so um 20 grad kriegste nur mit so fetten verlusten hin, daß es unfug wäre. daher dachten wir nicht an rotationen.
    wegen der verluste sollten die verschiebungen auch nur um ganze pixelgrößen sein.

    vielleicht noch eine kleine idee dazu: man könnte einfach (nachdems nur wenig zeichen sind) das zu klassifizierende zentrieren, dann von einem guten sample "abziehen" und dann entsprechend die klasse, die den kleinsten betrag (vom vektor) hat, als referenz zum drehen hernehmen.

    aber wie danach drehen?



  • das drehen geht über matrizen, wie schon gesagt. wenn man 3 punkte im orginal und dem zu drehenden hat, dann geht das. wenn du willst frag ich meine arbeitsplatz nachbarin, wenn ich sie sehe



  • was nehmt ihr als Klassifkator?

    bye

    tt



  • 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 🙂

    @king: wär vielleicht gleich was für dich, mit einzusteigen, falls du zeit und lust hast 😉

    hab leider gerade mehrere Projekte, an denen ich mitwirke. Hautprächlich das Widget System GOTT, dass noch einiges an Arbeit brauch.



  • 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 🙂


Anmelden zum Antworten