Mustererkennung

LordTerra

Mitglied
moin

ich hab da ein etwas größeres problem ...
ich schreibe derzeit an einem programm zur bilderkennung ...
dieses programm ist in c++ geschrieben und läuft auf einer intelligenten Kamera, d.h.
die kamera hat ihren eigenen prozessor und dort läuft das programm ... nebenher hab ich in java noch nen configurationstool geschrieben mit dem ich die kamera einstellen kann und prüfpläne auf die cam schicken kann ...

so mein problem: der prozessor der kamera kann keine gleitkomma berechnung bzw ist nicht dafür ausgelegt und ist also verdammt langsam wenn ich dort soetwas ausführen will...

so nun schreib ich wie gesagt aber eine mustererkennung ... heist ich vergleiche ein bild mit einem muster das ich vorgeb und berechne den korrelationskoeffizenten um zu bestimmen inwieweit mein bild mit dem muster übereinstimmt ...

und diesen korrelationskoeffizienten zu berechnen gibt es bestimmte formeln und diese beinhalten aber gleitkommaberechungen und genau da ist das problem ... da das die kamera eher schlecht kann dauert das ungemein lang ... kleines beispiel: muster 80x80 pixel in nem suchbereich von 200x200pixel dauern ca 25 sec um es zu finden ... das ist ma extrem zu viel ...

nun hab ich im inet geguckt und versucht rauszubekommen ob es andere möglichkeiten gibt ... aber irgendwie werd ich net fündig ...

daher jetzt hier der post und meine frage: kennt sich jemand mit der mustererkennung aus? gibt es andere möglichkeiten als über den korrelationskoeffizent die bilder zu vergleichen und wenn ja welche ?

ich brauch einfach n paar anhaltspunkte ... denn so langsam verzweifel ich ...

thx für hilfe

Kala
 

port29

deus.Server
Hi,

ich arbeite bei FGAN - FOM in der Abteilung Zielerkennung. Seit einiger Zeit schreiben wir dort auch an einer Software, um Objekte zu erkennen. Mir sind derzeit drei Ansätze bekannt. Einen Ansatz hast du bereits beschrieben. Er nennt sich Pattern Matching. Du hast ein Muster als Bild und suchst in einem zweiten Bild nach diesem Muster. Ich weiß, dass es an der Uni Münster ein Team gibt, dass sich genau mit diesem Ansatz beschäftigt. Ich habe die Paper jetzt persönlich nicht gelesen, doch einige sagen, dass dieser Ansatz "sche***" ist.

Deshalb verfolgen wir einen anderen Ansatz. Wir bauen eine Produktion auf. Wir nehmen ein Bild und wandeln es in einen Datensatz von 1-3 Pixel großen Linienstücken auf. Anschließend suchen wir innerhalb dieser Linienstücke nach möglichen Verbindungslinien, um längere Linien zu bauen. Dann werden Überschneidungen gesucht und daraus entstehende Winkel berechnet. Zum Schluss läuft alles darauf hinaus, dass du sagst: Mein gesuchtes Objekt besteht aus diesen und diesen Linien, die in dem und dem Verhältnis zueinander stehen.

Der dritte Ansatz ist meine eigene Idee, die ich bisher noch nicht komplett umgesetzt habe. Leider konnte ich die anderen Wissenschaftler nicht von meiner Idee überzeugen. Deshalb ist alles, was ich hier schreibe mit Vorsicht zu genießen. Meine Idee ist es, direkt nach primitiven Objekten zu suchen. Ich fange dabei in der Mitte des Bildes an und suche spiralförmig nach möglichen Linien. Habe ich eine gefunden, führe ich eine Breitensuche nach weiteren Verbindungen durch. (Der Windungsabstand definiert dabei die Genauigkeit der Suche und kann auch von Innen nach außen immer größer werden. Mitte = wichtig, außen = unwichtig). Dabei werden Störungen rausgefiltert. Ich habe dann ein sauberes Bild in Einsen und Nullen Form. Wenn ich fertig bin, habe ich eine Matrix bzw. ein 1Bit Bild. In dieser Matrix kann ich dann ganz einfach nach einer Muster Matrix suchen. Das ist meine Idee.

Darf ich mal fragen, wonach du genau suchst und was deine Tools sind? Da du c++ verwendest, würde ich tippen, dass du als Software OpenCV einsetzt.