Verfasst am: 11.03.2016, 13:56
Titel: Messdaten auslesen und auswerten
Hallo Zusammen,
ich schreibe momentan eine Studienarbeit und bin leider noch relativ unerfahren mit Matlab.
Meine Aufgabe ist mit einer 3D-Kamera die genaue Lage einer Schnur relativ zur Kamera zu bestimmen. Die Kamera liefert mir zu jedem Bildpixel(92928) die Position (dh. X-,Y-,Z-Koordinate). Die Daten liefert mir die Kamera über Ethernet, jeweils aufgeteilt in Low- und Highbyte in einem Vektor mit der Länge 557696.
Inhalt des Datenvektors:
[Header X-Werte Header Y-Werte Header Z-Werte]
Nach dem Auslesen bitshifte ich in einer For-Schleife jedes Highbyte (vorzeichenbehaftet) und addiere es mit dem zugehörigem Lowbyte und teile gleichzeitig den Rohdatenvektor in X-, Y- und Z-Vektoren auf.
Code:
%--- Initialisieren der Verbindung zur Kamera
t = tcpip('169.254.45.111',50010);
%--- Benötigte Länge des auszulesenden Vektors
laenge = 557696;
t.inputbuffersize = laenge;
t.outputbuffersize = laenge;
Das funktioniert soweit auch, nur benötigt die for-Schleife zu viel Rechenzeit. Gibt es eine Möglichkeit schon beim auslesen der Kamera, Low- und Highbyte zusammenzufügen?
Des Weiteren muss ich noch die Pixel herausfiltern, die die Schnur erfasst haben und aus diesen Pixeln eine Linie fitten, die idealerweise mit der realen Schnur übereinstimmt.
Die Schnur verläuft vom linken zum rechten Bildrand und ist ziemlich dünn, sodass sie teileweise nur von einem Pixel erfasst wird.
Jemand eine Idee wie man das bewerkstelligen kann?
Nach meiner Erfahrung gehen die Kameraanbindungen mit der Data Acquisition Toolbox sowie die Algorithmen der Computer Vision Systems Toolbox (auch Simulink, nicht nur MATLAB) super schnell. Das hier sieht mehr so selbst gebastelt aus, oder?
%56 bytes die bisher nicht verwendet wurden
header = fread(t,28,'int16');
%lesen direkt mit richtigem Datentyp und in die richtigen Variablen
x=fread(t,laenge,'int16');
%gap von 37 bytes, die im original code nicht verwendet werden
a=fread(t,37);
y=fread(t,laenge,'int16');
%gap von 37 bytes, die im original code nicht verwendet werden
b=fread(t,37);
z=fread(t,laenge,'int16');
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
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.