Image Erkennung der Position von Objekten

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Freitag 24. Oktober 2008, 18:41

Servus allerseits

ich hab mal wieder ein neues Projekt !

eine webcam liefert graubilder eines Laufbandes Taktgesteuert
Lichtschranken Überwacht.

auf dem sich dreieckige Objekte befinden eine spitze ist länger

nun gilt es die position dieser objekte zum kalibrierten mittelponkt der webcam 1024x800 pixel zu bekommen und auch den Drehwinkel der objekte

grösse der objekte ca 60x40 pixel in der webcam

was schlagt ihr vor in sachen image erkennung PIL oder direkt Image

es wäre besser zum suchen wenn es ein 1bit bild wäre
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Sonntag 26. Oktober 2008, 19:14

Hoi,

es wäre etwas einfacher zu raten, wenn Du in Zukunft ganze deutsche Sätze verwenden würdest ...

Deine Beschreibung ist etwas unspezifisch, aber ich nehme mal an, die Berechnun soll einigermaßen schnell und exakt innerhalb der Auflösung sein. Also würde ich so vorgehen:

- Ein Graustufenbild erstellen (falls das nicht ohnehin vorliegt)
- Eine Kreuzkorrelation zwischen einem Template und dem Bild errechnen, um den Korrelationspeak zu finden: Dort in etwa befindet sich Dein Objekt.
- Dann in groben Schritten das Template drehen und verschieben: In jedem Schritt die Korrelation bestimmen. Der höchste Koeffizient entspricht ungefähr den gesuchten Paramtern in Relation zur ursprünglichen Templateposition.
- ggf. um diese Paramter mit einer verfeinerten Parametersuche wiederholen.

Hierzu brauchst Du PIL und scipy. Oder Du arbeitest Dich in Software zur single particle Rekonstruktion ein, z. B. SPIDER oder EMAN, beide mit inzwischen mit einem (nicht wirklich überzeugendem) Pythoninterface versehen.

Hoffe das hilft Dir weiter. Falls nicht, formuliere Deine Frage vielleicht noch einmal etwas detaillierter.

Gruß,
Christian
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Sonntag 26. Oktober 2008, 19:17

danke CM
so ich hab jetzt mal geproggt

Code: Alles auswählen

from PIL import Image, ImageDraw
import ImageFilter
im = Image.open("test_small.bmp")
im.convert("1")

im1=im.filter(ImageFilter.CONTOUR)
draw = ImageDraw.Draw(im1)
center=[]
for y in xrange(im.size[1]):
    for x in xrange(im.size[0]):
        if im1.getpixel((x,y)) == 0 :
           center.append((x+9,y+9))
           draw.rectangle((x,y,x+19,y+19),fill=255)

print center

imcol=im.convert("RGB")
draw = ImageDraw.Draw(imcol)
for point in center:
    draw.line((point[0]-5,point[1],point[0]+5,point[1]),fill=(255,0,0))
    draw.line((point[0],point[1]-5,point[0],point[1]+5),fill=(255,0,0))
    
imcol.show()
also mit genormten objekten klappt das die objekte sind 20x20 pixel

Bild
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Mittwoch 12. November 2008, 11:02

Oh, die Objekte, sind immer perfekt ausgerichtet und Du hast kein Rauschen? Dann geht es vielleicht wirklich so einfach. Ansonsten würde ich auf den etwas komplexeren Algorithmus von meinem ersten Post zurückfallen: Das dürfte etwas sicherer sein. Dazu brauchst Du allerdings noch scipy.

HTH
Christian
Antworten