Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Objektverfolgung (https://www.delphipraxis.net/63999-objektverfolgung.html)

Funk 25. Feb 2006 22:35


Objektverfolgung
 
Hallo,
hier meine Problembeschreibung:
Ein Objekt (Insekt) liegt auf einer Platte und wird von einer WebCam durch ein Mikroskop betrachtet. Sobald sich das Objekt bewegt, soll die Platte so bewegt werden, dass sich das Objekt wieder im Fokus der Cam befindet.
Als erstes muss das Objekt erkannt werden
- die Lichtverhältnisse bleiben durch die Mikroskoplampe fast immer gleich
- das Objekt kann die gleiche Farbe wie die Platte haben
-->bin bei der Suche, auf einen Partikelfilter gekommen, habe aber keine Erfahrungen und meine Frage ist, hat jemand damit schon gearbeitet und kann mir einen Rat geben? Oder gibt es andere Lösungen, ein Objekt zu erkennen?

Danke im Voraus für eure Hilfe.

inherited 25. Feb 2006 22:58

Re: Objektverfolgung
 
Bitte überprüfe den Ort wo du dies erstellt hast...

DP-Maintenance 25. Feb 2006 22:58

DP-Maintenance
 
Dieses Thema wurde von "Matze" von "Neuen Beitrag zur Code-Library hinzufügen" nach "Multimedia" verschoben.
Das gehört nicht in die Code-Library.

marabu 26. Feb 2006 08:52

Re: Objektverfolgung
 
Herzlich willkommen in der Delphi-PRAXiS, Funk.

Die Objekterkennung und -Verfolgung ist ein Standardproblem der digitalen Bildverarbeitung. Die Bilder einer digitalen Kamera musst du als Zeitreihenbilder begreifen. Über die Bilddifferenz und eine Schwellwertbetrachtung kannst du dann einen - einfachheitshalber rechteckigen - Bildbereich identifizieren, der dem beobachteten Objekt zuzuordnen ist. Über die Verschiebung des Flächenschwerpunktes können dann die Schrittmotoren für die Nachführung des Objektes angesteuert werden.

Freundliche Grüße vom marabu

Funk 15. Mär 2006 12:45

Re: Objektverfolgung
 
Bin jetzt gerade dabei zwei Bilder die ich von der Cam aufnehme, zu vergleichen. Ungleiche Pixels werden rot hinterlegt.

Delphi-Quellcode:
for y := 0 to TestImage.Picture.Bitmap.Height - 1 do
  begin
    P := TestImage.Picture.Bitmap.ScanLine[y];
    P2 := OrgImage.Picture.Bitmap.ScanLine[y];
    P3 := PrevImage.Picture.Bitmap.ScanLine[y];

    for x := 0 to TestImage.Picture.Bitmap.Width - 1 do
    begin
      if RGB(P^.rgbRed, P^.rgbGreen, P^.rgbBlue)-
        RGB(P2^.rgbRed, P2^.rgbGreen, P2^.rgbBlue) > Schwellenwert then
      begin
              P3^.rgbRed := $FF; // = RGB (255, 0, 0) = clRed
              P3^.rgbGreen := 0;
              P3^.rgbBlue := 0;
     end;
Mein Problem ist nun, sobald ich das Rauschen der Kamera reduzieren möchte und damit meinen Schwellenwert erhöhe, bekomme ich die Veränderung des Objekts nicht mehr markiert. Ich möchte ja nur die Veränderung des Objektes herausfinden.
Was mach ich falsch oder wie könnte ich das besser machen?

marabu 15. Mär 2006 12:58

Re: Objektverfolgung
 
Hallo Funk,

dein Schwellenwert muss den Abstand berücksichtigen, nicht die Differenz. Wahrscheinlich bekommst du später bessere Ergebnisse wenn du mit ein-kanaligen Bildern rechnest.

Grüße vom marabu

Funk 15. Mär 2006 13:34

Re: Objektverfolgung
 
Hallo und vielen Dank!
Doch was sind 1 Kanalige Bilder? schwarz-weiß?
Kannst du mir bitte etwas genauer erklären was du mit "Abstand" meinst?

Gruß Funk

marabu 15. Mär 2006 17:13

Re: Objektverfolgung
 
Das hast du schon richtig verstanden - 1-kanalige Bilder sind Grauton-Bilder. Es ist besser mit dem Abstand abs() zweier Grauwerte zu arbeiten, als mit der Differenz, bei der du negative Eregbnisse erhalten kannst. Ich hoffe, dass der Objektträger homogen ausgeleuchtet ist, sonst kannst du das Binärbild schlecht über einen statischen Schwellwert berechnen.

Freundliche Grüße

marabu

Funk 15. Mär 2006 17:50

Re: Objektverfolgung
 
Hey super, Danke!!!
Jetzt müsste ich noch die Position der Veränderung heruasfinden. Falls du eine Idee hast, wäre ich dankbar.

marabu 15. Mär 2006 19:13

Re: Objektverfolgung
 
Ich könnte mir vorstellen, dass eine Quantisierung des Bildes mit empirisch ermittelter Granularität am ehesten zum Ziel führt. Dabei halbierst du schrittweise die Auflösung und bildest Superpixel (2*2, 4*4, 8*8, 16*16, ...). Für diese berechnest du den mittleren Grauwert. Wenn du eine geeignete Auflösung ermittelt hast, dann kannst du von dem resultierenden Grauton-Bild ein Binärbild erstellen, aus dem du dann das bounding rectangle für das observierte Objekt berechnen kannst. Der Schnittpunkt der Diagonalen könnte der Zielpunkt für die Neuausrichtung des Objektivs sein. Andere Verfahren sind denkbar.

marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:26 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz