2016-07-29 21 views
3

Ich habe eine 3D-Matrix, die ich grafisch als eine Farbkarte anzeigen möchte. Wenn meine 3D-Matrix die Form (x, y, z) hat, möchte ich, dass die Farbkarte die (y, z) 2D-Matrix anzeigt, und ich möchte einen zusätzlichen Schieberegler haben, um die (x) -Koordinate anzupassen. Ich implementiere das mit imagesc.Matlab Echtzeit-Aktualisierung von Bildernc mit einem Schieberegler

Nach einigen Beispielen der Suche durch, das ist der Code, den ich

schrieb
ct = 1000; 
sys = squeeze(T(ct,:,:)); 

f = figure; 
h = imagesc(sys); 

b = uicontrol('Parent',f,'Style','slider','Position',[81,54,419,23],... 
      'value',ct, 'min',1, 'max',total_time); 

b.Callback = @(es,ed) updateSystem(h,squeeze(T(es.Value,:,:))); 

jedoch nach Ausführen des Codes ich folgende Fehlermeldung erhalten.

Tiefgedruckte Indizes müssen entweder echte positive ganze Zahlen oder logische Zahlen sein.

Fehler in filament_simulation> @ (n, ed) updateSystem (h, Squeeze (T (es.Value,:, :)))

Fehler beim UIControl Rückruf

Dies ist die Bewertung wahrscheinlich weil ich 'updateSystem' nicht so gut verstehe, aber ich bin überrascht zu sehen, dass der Fehler auf einen ungültigen Index zurückzuführen ist, wo könnte das sein?

Ich würde wirklich einige Hilfe mit diesem zu schätzen wissen. Danke im Voraus.

Antwort

2

Es ist möglich, dass der Schieberegler einen nicht ganzzahligen Wert hat. Sie wollen es abzurunden, bevor es als Index

updateSystem(h, squeeze(T(round(es.Value), :, :))) 

Anstatt zu versuchen, verwenden updateSystem (a Control System Toolbox-Funktion) verwenden, können Sie die folgenden als Ihr Rückruf verwenden, um die Bilddaten zu aktualisieren.

b.Callback = @(es, ed)set(h, 'CData', squeeze(T(round(es.Value), :, :))); 
+0

Ah ich kann nicht glauben, dass ich das übersehen habe. Vielen Dank! Es ist jedoch ein anderes Problem aufgetreten, der Fehler, der besagt, dass 'updateSystem' kein 'matlab.graphics.primitive.Image' als Eingabe verwenden kann. Gibt es eine alternative Möglichkeit, einen Schieberegler mit einer Farbkarte zu verwenden? –

+0

@AlexKyriazis 'updateSystem' ist keine MATLAB-Funktion, also müssen Sie etwas geschrieben haben, nein? – Suever

+0

Es wird als Rückruf verwendet, weshalb es wahrscheinlich nicht sichtbar ist. http://de.mathworks.com/help/control/ug/build-app-with-interactive-plot-updates.html EDIT: Hier ist ein direkter Link zu der Funktion http: // de. mathworks.com/help/control/ref/updatesystem.html –