-
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Gutelo,
1. Aug 2014
Das zweistufige Verfahren ist auch murks. Dann sind zwar die horizontalen und vertikalen Werte okay aber er verballhornt die anderen Richtungen. Hingegen funktioniert es gut wenn man für eine Gradientenrichtung >= verwendet und für die andere >. Ich lasse es erstmal so. Hough funktioniert auch prima :) Allerdings ist Hough naturgegeben sau lahm. Werde mir mal die optimierten Hough Algoritmen...
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Gutelo,
1. Aug 2014
Die ungenauigkeit von float werten bewirkt dass Teile der horizontalen und vertikalen Kanten die NMSüberleben. Aber Teile verschwinden.
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Gutelo,
1. Aug 2014
Aaaaargs. Naetuerlich liegt es daran dass ich vorher runde. Ich Depp. Wahrscheinlich kann dieser Fall ohne Runden nicht auftreten. Falls doch muesste man zweimal durchlaufen:
1) Lese aus Original und Schreibe in Kopie. Loesche alle Pixel die einen kleineren Wert haben als mindestens einer von beiden Nachbarpixeln in Gradientenrichtung. -> Elimination aller Pixel die garantiert kein Maximum...
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Gutelo,
31. Jul 2014
Am Atan2 liegt es nicht. Das Problem ist dass man die Aenderungen bei der NMS am Original durchführen muss. Blöder Fehler. Kann man sich auch einfach überlegen: Angenommen es liegen bei einer horizontalen linie zwei maxima senkrecht übereinander. Beide Pixel würden unterdrückt da der Wert nicht grösser ist als die nord und süd pixel. Ändert man jedoch am Original so ist der eine bereits...
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Gutelo,
31. Jul 2014
Oh das ist nicht gut. Hast du in der Uni keine Kopie hinterlassen?
Ich vermute dass der Atan2 probleme macht. Das Richtungsbild sieht etwas komisch aus um die horizontale Kante.
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Gutelo,
31. Jul 2014
Medium, bist du dir denn sicher, dass du dieses Problem nicht auch im code hast?
Bei grossen Bildern faellt es nicht besonders auf, vorallem wenn die meisten Kanten verdreht sind gegenueber der horizontalen oder vertikalen Richtung. Probier mal das Testbild im Anhand (Cross.bmp) mit deinem Code aus.
Ich habe im Internet bei einigen Implementationen einen Kommentar gefunden ala "Problem mit...
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Gutelo,
30. Jul 2014
Kein Problem, ich poste es hier auch noch mal:
// ############################################################################
// Build pixel array of gradient directions
// ############################################################################
Procedure MakeEdgeDirections(PA_Sx, PA_Sy : TPixelArray; var PA_Out : TPixelArray);
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Gutelo,
30. Jul 2014
Hallo Medium,
der Code ist in dem Zip-file des vorletzten Posts
Gutelo
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Gutelo,
30. Jul 2014
Mist gerade bei Hough gemerkt, dass etwas nicht 100% stimmt.
Erstmal muss in Canny.pas der Typ PixArray mit dem Array bei 0 beginnen und nicht bei 1. Bis zum Sobel ist alles okay.
Die NMS Berechnung und/oder Berechnung der Kantenrichtungen sind fehlerhaft. Bei exakt horizontalen Kanten verschwinden die Kanten fast komplett aus dem Bild bei der NMS Berechnung. Woran kann das liegen? An...
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Gutelo,
30. Jul 2014
Hallo,
Non-Maximum Suppression (NMS) und Hysteresis arbeiten jetzt auch. Ich haenge ein kleines Demo-Projekt fuer Lazarus an dieses Post. Laeuft alles schnell genug, kann aber auch noch reichlich optimiert werden. Soll nur als ein Grundgeruest dienen fuer Leute die Aehnliches vor haben. Ich habe den Code reichlich kommentiert. Das Binary ist leider elendig gross geworden (28mb). Lazarus...
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Gutelo,
29. Jul 2014
Mit 8 und 6/9 sollte es kein Problrm geben. 6 und 9 haben etwa gleiche Aenderungen. Hier muss man dann einen festen Startpunkt wählen, z.B. immer beim nördlichsten Punkt anfangen.
Ich muss erst noch die NMS, Hysteresis und Hough fertig machen dann kümmer ich mich um die OCR idee. Halte dich auf dem Laufenden
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Gutelo,
29. Jul 2014
Oh ich dachte eigentlich nur an ein Haufigkeitsdiagram, also Häufigkeit über Richtung. Aber deine "Liste" ist noch viel besser. Man nimmt einfach die äusserste Kante die zusammenhängend die Zahl umschliesst und läuft die Kannte Pixel fûr Pixel ab und macht ein Array mit den Gradientrichtungen. Die Sprûnge in den Richtungen und die Länge der Liste sind charakteristisch für die Zahl. Probleme mit 4...
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Gutelo,
29. Jul 2014
:) Jepp
Ich schreib ein Programm welches folgendes machen soll:
1.) Mittels Kamera ein Dokument auf einem Tisch aufnehmen (Webcam oder Handy)
2.) Perspektivische Verzerrung rausrechnen, so dass quasi eine Aufnahme "von oben" erhalten wird
3.) Einlesen von Zahlen mittels OCR
1. und 2. sind soweit fertig.
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Gutelo,
28. Jul 2014
Soderle, hab es jetzt mal umgeschrieben. Funktioniert soweit so gut -> Siehe angehaengte Bilder.
Als naechstes nehme ich NMS, Hysteresis und Hough in Angriff.
Falls jemand etwas Aehnliches machen moechte, hier mein Code bis hierhin. An einigen Stellen sicher noch etwas suboptimal und verbesserungsfaehig (z.B. dass das gesammte Array extra Durchlaufen wird um die minimalen und maximalen...
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Gutelo,
28. Jul 2014
Hallo Medium
Stimmt, ich sollte erstmal die Minuswerte beibehalten.
Was meinst du mit "würde ich dafür das FloatBitmap von (-1..1) auf (0..255) mappen, und Werte unter/über -1/1 clampen". Wenn ich nicht normiere dann varrieren die Werte von minimal -4*256 bis maximal 4*256 in den beiden "Teilbildern". Im naechsten Schritt - sqrt(Gx*Gx + Gy*Gy) - sollten aehnliche Werte rauskommen. Am Ende...
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Gutelo,
27. Jul 2014
Hallo,
Ich habe die Bilder an dieses Post gehaengt
Gutelo
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Gutelo,
27. Jul 2014
Hallo Medium,
danke fuer die Antwort. Dass man aus den x und y gradienten das endgueltige bild mittels G=sqrt(Gx*Gx + Gy*Gy) berechnet ist mir klar. Es geht mir um eine vernuenftige Darstellung der einzelnen Bilder Gx und Gy und da muessen alle Werte positiv sein.
Ich habe immer noch das Problem, dass sowohl die einzelnen Bilder als auch das endgueltige Sobel Bild keinerlei Kannten zeigen....
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Gutelo,
26. Jul 2014
Als Sobel Matrizen verwende ich:
(1 2 1)
G_Y = N_Y *(0 0 0)
(-1 -2 -1)
(1 0 -1)
G_X = N_X * (2 0 -2)
(1 0 -1)
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Gutelo,
26. Jul 2014
Hallo,
Ich implementiere gerade ein Verfahren um Kannten in Bildern zu erkennen. Ablauf: Farbbild -> Graustufenbild -> Glaetten mit Gauss Matrix Kern -> Gradienten mittels Sobel Matrizen in x und y richtung > threshold -> non maximum reduction
Ein Problem habe ich bei den Sobel Matrizen. Die Faltung mit der Pixelmatrix mit den sobel matrizen liefert neben byte konformen werten auch negative...