2016-05-06 6 views
0

Ich verwende derzeit Matlab's imshow, um ein Bild bei jeder Iteration eines Diffusionsfilterprozesses auszugeben, d. H. Mehrere Male pro Sekunde. Manchmal während der Filterung möchte ich bestimmte Bildteile genauer betrachten. Wenn jedoch das Name-Wert-Paar ('Parent', Handle) für Imshow verwendet wird, wird die Vergrößerung und Position zurückgesetzt.Matlab imshow Update-Bild an alter Position und Vergrößerung

Gibt es eine Möglichkeit, das zugrunde liegende Bild zu aktualisieren, aber die Vergrößerung und Position intakt zu haben?

Antwort

1

Sie können die cdata in der aktuellen Achse auf Ihre neue Datenmatrix aktualisieren, die alle anderen Einstellungen beibehalten wird. Wenn dies in einer Schleife ist, müssen Sie wahrscheinlich drawnow aufrufen. Zum Beispiel:

x=randn(100); 
figure;imagesc(x); 

Jetzt zoomen/schwenken/machen Sie alle Manipulationen, die Sie wollen.

f=gca; 
x=randn(100); 
f.Children.CData = x; 

Diese Methode der Aktualisierung von Child-Daten von Matlab als effizienter als die Zerstörung der Achse Kind Image und neu jeden Rahmen wird empfohlen (kann die Quelle nicht mehr daran erinnern, war es in einem der Hilfe-Dateien).

Edit: nur daran erinnert, dass diese Syntax nicht auf älteren Versionen von Matlab (vor 2015 oder so) funktioniert. Verwenden Sie in diesem Fall die get/set-Syntax:

set(get(gca,'Children'),'CData',x); 
+0

Vielen Dank! Ich habe die Struktur des Griffs vorher nicht bemerkt. –

+0

Froh, dass es für dich funktioniert. –

+1

@ Kapt.Brackbier: Es kann am Anfang verwirrend sein. Aber was mir am meisten geholfen hat, anstatt nur die Dokumentation zu lesen, ist, immer "zu verwenden" für verschiedene Arten von Griffen (Achsen-Griff, Figur-Griff) und graben Sie tief in die Struktur - Sie werden ziemlich viel darüber erfahren verfügbare Immobilien, an die Sie wahrscheinlich nicht einmal gedacht hätten. Zum Beispiel: f = Zahl; Handlung(...); get (f); 'oder' figure; Handlung(...); hAx = gca; get (hAx); 'schau es dir an und lerne :-) – tim