WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Vektor in Bild/Video plotten

 

GtrAngus
Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 11.06.13
Wohnort: Bayreuth
Version: ---
     Beitrag Verfasst am: 26.06.2013, 21:57     Titel: Vektor in Bild/Video plotten
  Antworten mit Zitat      
Hallo Leute,

hoffe ihr könnt mir hier weiterhelfen.

Ich bekomme aus einem vorherigen Programm die Tracking-Koordinaten aller Partikel aus einem Video (*.avi).
Dabei erkennt das Programm, ob es sich um ein und dasselbe Teilchen handelt oder nicht (einfach durch eine maximale Distanz die sich das Teilchen theoretisch bewegen kann zwischen 2 Frames). Dabei kann das Teilchen duchaus einige Frames nicht erkannt werden, weil z.B. die Helligkeit abnimmt o.ä.
Dem entsprechend sieht die Ausgabe aus:

trk = [x-Koordinate y-Koordinate Frame #-Teilchen]

Ich speichere nun mein Video in der Variable I und möchte gerne einen Vektorpfeil vom Beginn des Partikels bis zum Ende in das Bild/Video zeichnen.

Um einfach zu starten:

a) Wie kann ich einen Vektorpfeil in das Bild I(:,:,1) (double) plotten ?

Mein Problem ist, entweder ich zeige mir das Bild an
Code:
image(I(:,:,1));
% Hier das 1. Bild vom Video


oder ich plotte den Vektorpfeil:

Code:
for i = 1 : 10
    if trk(i,4) == trk(i+1,4)
        vek1 = [trk(i,1) trk(i,2)];
        vek2 = [trk(i+1,1) trk(i+1,2)];
        plot(vectarrow(vek1,vek2));
        hold on
    end
end
% Verfolge die ersten 10 Partikel (Laufvariable i)


vectarrow ist hierbei eine Funktion die ich heruntergeladen habe. Wie ihr hier auch sehen könnt, habe ich es mit dem "hold on/off" Befehl probiert, aber mein Problem ist das das double-Bild nicht korrekt anzeigt wird, wenn ich z.B. mit plot(image(I(:,:,1))) rumexperimentiere.


b) Wie kann ich den Vektor in ein Video plotten, auch wenn Koordinaten in einem Frame fehlen?

Das würde ich gerne selber ausprobieren. Aber dafür brauche ich Hilfe bei a) Smile Evtl. komme ich aber nochmal darauf zurück.

Gruß GtrAngus
Private Nachricht senden Benutzer-Profile anzeigen


Hubertus
Forum-Meister

Forum-Meister


Beiträge: 1.034
Anmeldedatum: 08.01.09
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 27.06.2013, 10:39     Titel:
  Antworten mit Zitat      
Moin,

du kannst doch ganz einfach einen Pfeil mit "line" und "ginput" Freihand erzeugen. Ist es weiterhin richtig, das du das 1. Bild mit (I(:,:,1)) lädst?
Normalerweise zeigt diese Funktion nur den Rotkanal an. Ich kenne mich kaum mit Video aus, aber um aus einem Stream ein Bild zu capturen, benötigt man: I(:,:,:,k).

Viele Grüße - Hubertus
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 27.06.2013, 10:43     Titel: Re: Vektor in Bild/Video plotten
  Antworten mit Zitat      
Hallo GtrAngus,

Zitat:
trk = [x-Koordinate y-Koordinate Frame #-Teilchen]

Was bedeutet das? Heißt "#" hier "Anzahl" oder "Index" und betrifft die Variable "trk" einen bestimmten Frame oder alle Frames? Welche Dimension hat "trk"?

Zitat:
aber mein Problem ist das das double-Bild nicht korrekt anzeigt wird, wenn ich z.B. mit plot(image(I(:,:,1))) rumexperimentiere.

Was genau bedeutet "nicht korrekt angezeigt"? Der IMAGE-Befehl scheint dazu geeignet zu sein, während PLOT nicht zum Darstellen von Pixel-Bilder geeigent ist.

Zitat:
b) Wie kann ich den Vektor in ein Video plotten, auch wenn Koordinaten in einem Frame fehlen?

Was bedeutet "fehlen" in Matlab? Sind dann NaN-Werte eingetragen? Oder fehlen die entsprechenden Zeilen in der Matrix (?) "trk"? Wenn die Zeilen fehlen, woher könnte man dann die Koordinaten bekommen?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
GtrAngus
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 11.06.13
Wohnort: Bayreuth
Version: ---
     Beitrag Verfasst am: 01.07.2013, 18:45     Titel:
  Antworten mit Zitat      
@ Hubertus

Genau, das ist das 1. Bild aus meinem Video. Unterm Strich wird am Anfang erstmal das Video in der Variable I gespeichert, aber die Bearbeitung des Videos erfolgt eben nur Bild für Bild.

@ Jan S
Erstmal zur Variable trk. Ja, das ist korrekt! Also z.B.

0 0 10 1
5 2 11 1

würde bedeuten, dass Teilchen 1 in den Bildern 10 und 11 erkannt wurde und sich von (0,0) nach (5,2) bewegte.

Dem entsprechend hat trk z.B. bei 10.000 Bewegungsschritten die Dimension <10000 x 4 double>.

Das mit dem Plot funktioniert ws. Allerdings sind die Linien einfach zu kurz.

Fehlen bedeutet das in "trk" in der 3. Spalte der nächste Wert nicht i+1 sondern i+2 oder i+3 ist. Also:

0 0 10 1
5 2 14 1

Naja, beschaffen könnte man sie eventuell über Interpolation.
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 02.07.2013, 10:01     Titel:
  Antworten mit Zitat      
Hallo GtrAngus,

Zitat:
Das mit dem Plot funktioniert ws. Allerdings sind die Linien einfach zu kurz.

Was bedeutet das genau? "Einfach zu kurz" ist nicht klar genug für einen Verbesserungsvorschlag.

Zitat:
Naja, beschaffen könnte man sie eventuell über Interpolation.

Nur "eventuell" oder hast Du das bereits implementiert oder zumindest versucht? Je konkreter die Fragen sind, desto eher lassen sie sich von Fremden in einem Forum beantworten.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
GtrAngus
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 11.06.13
Wohnort: Bayreuth
Version: ---
     Beitrag Verfasst am: 16.07.2013, 10:29     Titel:
  Antworten mit Zitat      
Habs nach ein bissl rumprobieren doch noch hinbekommen. Unterm Strich lautet der Code in etwa so:

Code:
pic = imread('Bild.tif');

imshow(pic);

hold on

x = [1 100];
y = [1 100];

plot(x,y,'Color','r','LineStyle','-', 'LineWidth', 2);

hold off


Wobei bei x und y noch die entsprechenden Koordinaten aus trk ausgelesen werden müssen.

Danke für eure Hilfe! Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.