PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mustererkennung



Felix G
09.05.2007, 20:21
Hallo Leute,

ich wollte mal etwas probieren...
und zwar wollte ich zwei Bilder so überlagern, daß ich beide wieder aus dem resultierenden Bild rekonstruieren kann.

Momentan benutze ich dafür diese Maske:
(der rote Bereich periodisch wiederholt)
http://www.mad-clan.de/maske.png

dabei soll für jeden schwarzen Pixel der Maske "Bild A" und für jeden weißen Pixel "Bild B" angezeigt werden. (natürlich gehen dabei von beiden Bildern Informationen verloren, aber das ist nicht so schlimm)

meine Überlegung ist folgende:
wenn man sich die Maske mal genau betrachtet stellt man fest daß sie quasi aus liegenden(weißen) und stehenden(schwarzen) 'I' förmigen Symbolen zusammengesetzt ist. Wenn man genug davon findet, sollte es ja möglich sein die Maske zu rekonstruieren, und damit die Bilder wieder voneinander zu trennen.

Jetzt stellt sich mir nur die Frage, wie ich diese Symbole im Bild finden kann. (erstmal unter Idealbedingungen, und wenn das klappt ist der nächste Schritt die Erkennung der Symbole auf einem abfotografierten Bild)


Naja, ich bin mal auf Eure Vorschläge gespannt.
(vielleicht ist das Muster an sich ja schon ungeeignet, und es gibt andere die sich besser erkennen lassen?)

plusminus
09.05.2007, 22:58
jo, du wirst exakt 50% der Informationen verlieren...

gehst du davon aus, dass die Maske bekannt ist, also immer die selbe...?
Handelt es sich um eine Kombination von 2Fotos, oder um relativ eindeutige Zeichnungen?

Dann sind das vllt 10 zeilen code.

Was du machen könntest wäre die 2-3 niederwertigen Bits des gerade falschen Maskenanteils zu benutzen um darin Farb-Infos des Bildes zu speichern. Dann hast du etwas weniger Lücken, die du dann nicht mehr zwingend interpolieren müsstest, bzw besser interpolieren könntest.
Das läfut schon in Richtung Steganographie, damit kann man sehr lustige Sachen machen :-b

Was willst du damit am Ende überhaupt bezwecken :?:

Benute doch solch ein Muster:


XXXOOO
XXXOOO
XXXOOO
OOOXXX
OOOXXX
OOOXXX

Dann kannst du nen Kanten-Filter drüberlaufne lassen. die meisten kanten werden wohl an den übergängen zwischen den masken auftreten.

/mfg plusminus

Felix G
09.05.2007, 23:35
jo, du wirst exakt 50% der Informationen verlieren...

gehst du davon aus, dass die Maske bekannt ist, also immer die selbe...?
Handelt es sich um eine Kombination von 2Fotos, oder um relativ eindeutige Zeichnungen?Also das können grundsätzlich mal 2 beliebige Bilder sein, was natürlich bedeutet daß das Muster auf dem resultierenden Bild an manchen Stellen wesentlich schlechter sichtbar sein wird als an anderen.



Was du machen könntest wäre die 2-3 niederwertigen Bits des gerade falschen Maskenanteils zu benutzen um darin Farb-Infos des Bildes zu speichern. Dann hast du etwas weniger Lücken, die du dann nicht mehr zwingend interpolieren müsstest, bzw besser interpolieren könntest.
Das läfut schon in Richtung Steganographie, damit kann man sehr lustige Sachen machen :-b Ne, also in den niederwertigen Bitstellen kann ich keine zusätzlichen Informationen codieren, da die Geschichte auch dann noch funktionieren soll wenn das resultierende Bild z.B. ausgedruckt und dann abfotografiert wird.



Benute doch solch ein Muster:


XXXOOO
XXXOOO
XXXOOO
OOOXXX
OOOXXX
OOOXXX

Dann kannst du nen Kanten-Filter drüberlaufne lassen. die meisten kanten werden wohl an den übergängen zwischen den masken auftreten.Ein einfaches Schachbrettmuster war auch mein erster Gedanke, aber da kann ich dann später nicht mehr feststellen welches der extrahierten Bilder das erste und welches das zweite ist. (diese Information könnte aber evtl. sinnvoll sein)


Was willst du damit am Ende überhaupt bezwecken :?:Also prinzipiell geht es mir hier erstmal um die Mustererkennung an sich. Diese konkrete Aufgabenstellung war eher eine spontane Idee, und ich weiss noch nicht ganz genau wie ich das dann tatsächlich einsetzen kann. (aber wenns funktioniert werde ich bestimmt irgendeine mehr oder weniger sinnvolle Verwendungsmöglichkeit dafür finden)

plusminus
10.05.2007, 00:14
Benute doch solch ein Muster:


XXXOOO
XXXOOO
XXXOOO
OOOXXX
OOOXXX
OOOXXX

Dann kannst du nen Kanten-Filter drüberlaufne lassen. die meisten kanten werden wohl an den übergängen zwischen den masken auftreten.Ein einfaches Schachbrettmuster war auch mein erster Gedanke, aber da kann ich dann später nicht mehr feststellen welches der extrahierten Bilder das erste und welches das zweite ist. (diese Information könnte aber evtl. sinnvoll sein)

hm, bei deinem Bild weißt du das auch nicht genau ;) wenns z.B. um 90° verdreht photographiert wird, dann geht das bei deinem Muster auch nicht.

Also ich würde mal mit dem Schachbrett anfangen...

Felix G
12.05.2007, 19:20
Also ich habe inzwischen noch so einiges probiert, aber das Muster wird einfach nicht erkannt (egal wie das Muster aussieht). Bei dem auszuwertenden Bild ist ja leider erstmal nicht bekannt wie groß das Muster tatsächlich ist, und falls das Bild von der Seite aufgenommen wurde kann die Größe sogar je nach Position unterschiedlich sein.

Was ich also wissen muss ist, wie ich ein beliebiges Muster auf einem Bild erkennen kann, obwohl dessen Größe und Ausrichtung unbekannt ist.


Ach und ich habe noch eine Frage zu Matlab, falls sich damit wer auskennt:
Angenommen ich habe tatsächlich eine Maske mit der ich die Bilder trennen kann, dann sind ja in beiden Bildern Lücken vorhanden (wobei die Position der Lücken natürlich bekannt ist). Wie kann ich jetzt unter Matlab diese Lücken weg interpolieren?

nomad
13.05.2007, 10:13
hi
versuchs mal mit Neuralen Netzen
Adaline-Net zum beispiel
als attachement ein kleines beispiel
da funzzt es mit zahlen.....
gruss
nomad

plusminus
13.05.2007, 11:35
Also ich habe inzwischen noch so einiges probiert, aber das Muster wird einfach nicht erkannt (egal wie das Muster aussieht). Bei dem auszuwertenden Bild ist ja leider erstmal nicht bekannt wie groß das Muster tatsächlich ist, und falls das Bild von der Seite aufgenommen wurde kann die Größe sogar je nach Position unterschiedlich sein.

Was ich also wissen muss ist, wie ich ein beliebiges Muster auf einem Bild erkennen kann, obwohl dessen Größe und Ausrichtung unbekannt ist.


Ach und ich habe noch eine Frage zu Matlab, falls sich damit wer auskennt:
Angenommen ich habe tatsächlich eine Maske mit der ich die Bilder trennen kann, dann sind ja in beiden Bildern Lücken vorhanden (wobei die Position der Lücken natürlich bekannt ist). Wie kann ich jetzt unter Matlab diese Lücken weg interpolieren?

Hm, also ich denk du kommst nicht drum rum die Perspektive rauszurechnen... (Dazu musst du auch erstmal erkennen, wo sich das Bild im Bild überhaupt versteckt...)

Zum Interpolieren, zur Not schreibst du dir einfach selber ne Funktion, die jeden Fehlenden Pixel aus seinen verfügbaren Nachbarn berechnet...
Da gibts sicher was in Matlab...

Felix G
13.05.2007, 19:20
Hm, also ich denk du kommst nicht drum rum die Perspektive rauszurechnen... (Dazu musst du auch erstmal erkennen, wo sich das Bild im Bild überhaupt versteckt...)Ja, ich muss das Bild finden, und erkennen wie es verzerrt ist. Dazu könnte ich ja das Muster nutzen, aber das geht natürlich auch wieder nur wenn ich es zumindest an einigen wenigen Stellen zuverlässig erkennen kann.

Damit stehe ich wieder am Anfang, nämlich vor der Aufgabe dieses Muster irgendwo in einem Bild zu finden.



versuchs mal mit Neuralen Netzen
Adaline-Net zum beispielIch hatte gehofft es ginge auch ohne NN, aber ich versuchs mal.

-chris-
25.09.2007, 23:25
jetzt einfach mal ein schuss ins blaue: mach doch mit beiden bildern ne fouriertransformation und kodier das eine bild in hohen frequenzen, das andere in niedrigen. dann überlagern und zurücktransformieren. du wirst zwar wie schon angemerkt natürlich trotzdem informationen verlieren, aber zumindest sollte der verlust nicht so offensichtlich sein, ähnlich jpeg kompression halt...