Montag, 29. Dezember 2008

Matlab Latex Export

http://www.mathworks.de/matlabcentral/fileexchange/4638
Nur für mich zum merken. Ich glaube das ist was ganz großes, muss ich testen.

Montag, 22. Dezember 2008

Dumme Idee.

Bilder von NI Vision per Queue transportieren zu wollen, ist eine ganz dumme Idee.
Mit dem Wissen über die Datenflussgrundlagen von LabVIEW und der Ausnahme bei Vision Bildern habe ich es trotzdem bisher so gehalten.
Was daran falsch ist?
Ganz einfach, bei den Bildern werden nur Pointer weiter gereicht, nicht das eigentliche Bild. Das bleibt immer an der gleichen Speicherstelle liegen. Alles was ich also gequeuet habe war der Pointer auf diese Speicherstelle. Daraus folgt logischer Weise, dass jeder dieser Pointer in der Queue immer auf das gleich Bild gezeigt hat und damit immer auf das aktuelle. BANG.
Dafür muss man erst fast alleine kurz vor Weihnachten in der FH sitzen. Kein Plan warum mir das erst heute aufgefallen ist, dabei ist das Verhalten doch vollkommen logisch.

Die Lösung ist eigentlich einfach: man wandelt das Bild in ein Array um (gibt es ein VI für) und queuet das dann. Problem ist nur, das in Array-Wandeln und das aus-Array-zurückwandeln braucht wieder mehr Zeit und treibt jetzt den Backlog bei mehr als einer Farbe hoch. i7, ich brauche dich. Oder ich krieg die openCV-Sachen zum Laufen und kann zeigen, dass die schneller als die NI Vision VIs sind, was der Hammer wäre. Oder ich bearbeite nicht mehr Bilder sonderen die Arrays direkt, was ein Schritt gespart wäre. Mal gucken.

Donnerstag, 18. Dezember 2008

LabVIEW Frontpanel Updates unterbinden

So mal wieder was für LabVIEW.
Es gibt Situationen in denen möchte man nicht, dass das Frontpanel aktualisiert wird.
Bei mir ist das Beispielsweise der Fall, wenn ich Kameraparameter in eine Baumstruktur schreibe.
Bisher war es so, dass bei jedem neuen Parameter das Panel neugeschrieben wurde. Man konnte also sehen wie der Baum gefüllt wird. Das Panel wird nicht nur neu geschrieben, sondern es MUSS neu geschrieben werden. Dass heißt, dass auf jedenfall in einem solchen Fall auch ein wenig Zeit verloren geht.
Bei den LabVIEW 8.6 Tagen war die Rede davon, dass man das mit Hilfe des "Set Busy" und "Unset Busy"-VI lösen kann. Ich kann das nicht bestätigen. Bei mir wird (wie auch in der Beschreibung des VIs steht) nur die Maus und Tastatureingabe blockiert, was natürlich auch manchmal gebraucht werden kann.
Gerade eben bin ich über die Frontpanel-Property "Defer Frontpanel Updates". Setzt man dies auf true, so werden Updates vermieden. Mit false lässt man sie wieder zu. Setzt man nun die Aufgabe, in meinem Fall das Baumbefüllen dazwischen, so wird das Panel nur ganz zum Schluss aktualisiert und es geht keine Zeit verloren. Außerdem sieht man nicht wie sich der Baum aufbaut, was auch ganz nett ist :)
Zum Schluss noch ein kleines Beispiel:

Dienstag, 18. November 2008

LabVIEW: leeres Array an bestimmter Stelle beschreiben.

Was in LabVIEW nicht geht ist ein leeres Array an beispielsweise der fünften Stelle zu füllen. Matlab füllt dann den Rest mit Nullen, LabVIEW macht das nicht. Lässt sich lösen, muss man nur wissen. Wie? Gibts x Möglichkeiten für, ich suche aber noch die komfortabelste dafür. Wenn ich sie gefunden habe, zeige ich sie hier. Vorschläge sind gerne willkommen

Erinnerungshilfe.

Für mich zum merken: Hoch/Querformat-Einstellung im Firefox 3.0 befindet sich unter Datei>Seite einrichten

Auch zum merken: Tastaturkürzel bei OS X für Bildschirmfotos
  • ganzer Bildschirm: shift+apfel+3
  • ausgewählter Bereich: shift+apfel+4
  • ausgewähltes Fenster: shift+apfel+4 und dann keinen Rahmen ziehen sondern die Leertaste drücken

drückt man noch strg dazu geht das Foto nicht auf den Schreibtisch, sondern in die Zwischenablage.

Dienstag, 11. November 2008

Radiohead - House Of Cards

Ich erlaube mir aber durchaus auch mal Dinge zu schreiben/zu zeigen, die einen nicht unbedingt weiterbringen. Dafür aber nett anzuschauen sind oder sonst irgendwie interessant sind.
Deswegen mal das Musikvideo von Radioheads House of Cards:

Es wurde unteranderem mit einem LIDAR-System erstellt, vollkommen ohne Video-Kameras.
Ein Making-Of gibt es auch. Und wer so ein System kaufen will, wendet sich hier hin, ist doch eine nette Sache, wüsste ich eine Anwendung für ;)

Matlab Kurztipp: Figuregröße programmatisch festlegen

Möchte man die Größe einer Figure in Matlab festlegen, so lässt sich dies ganz einfach über den set-Befehl umsetzen. Am besten an einem kleinem Beispiel:
h = figure(1);
set(h,'Position',[200 200 640 480]);
Die Option Position ermöglicht es, festzulegen wo eine Figure auf dem Bildschirm dargestellt wird und wie groß sie sein soll. Die ersten beiden Werte im Vektor beinhalten die x- und y-Position der linken oberen Figure-Ecke, die beiden letzten geben die Breite und die Höhe der Figure an.
Jetzt ist dieser Befehl aber noch etwas schlauer:
h = figure(1);
set(h,'Units','normalized','Position',[0.2 0.2 0.5 0.5]);
Die Option Units lässt die Wahl zwischen:
  • normalized: relative Angaben
  • inches: Angaben in Zoll
  • centimeters: wer hätte es gedacht: in Centimetern
  • points: Angaben in Punkten (häufig für den Print-Bereich, siehe auch Wiki)
  • pixels: (standard) in Pixel
Damit erhält man eine ziemlich schöne Möglichkeit, Grafiken schon für den Export im Programm vorzubereiten ohne über den Export Setup... Menüpunkt zu arbeiten. Der set-Befehl hält hier nämlich auch alle anderen Optionen bereit, die man dort einstellen kann.