for k=1:41:563
x3=x2(k:k+41);
y3=y2(k:k+41);
z3=z2(k:k+41);
[x4,y4,z4]=meshgrid(x3,y3,z3);
for u=1:934 for s=1:42 for t=1:1245 if x_old2(s,t,u)<x3(end)&& y_old2(s,t,u)<y3(end)
x_old3(s,t,u)=x_old2(s,t,u);
y_old3(s,t,u)=y_old2(s,t,u);
z_old3(s,t,u)=z_old2(s,t,u);
canny2(s,t,u)=canny1(s,t,u);
end end end end
V1=interp3(x_old3,y_old3,z_old3,canny2,x4,y4,z4);
end
Mein Problem ist die 3D Interpolation am Ende. Ich stecke da die canny2-Matrix rein, die 25x31x934 groß ist als double-Werte nur 0en und 1en enthält. Die Stützpunkte, die durch die old-Werte gegeben sind, haben dieselbe Größe wie die canny-Matrix. Ich möchte nun die Interpolierten Werte an den Stellen x4,y4,z4 haben. Das sind Matrizen von der Größe 42x42x42. Es steht irgendswo ein NaN drin, doch trotzdem ergibt mir die Interpolation nur 0en und NaN's. Kann mir jemand sagen woran das liegt?
Guten Morgen,
ich versuche jetzt herauszufinden, wo die NaN in interp3 auftreten, aber ich sehe bis jetzt noch nicht durch.
Ich würde ja gern die Daten mitteilen, aber ich weiß nicht wie. Kannst Du mir da einen Tipp geben, Jan S?
LG
Daten kannst du an den Beitrag anhängen, im Zweifelsfall zippen.
Meine Vermutung wäre, dass die Daten nicht das gesamte Gebiet abdecken und interp3 somit extrapolieren müsste. Einen Extrapolationswert kannst du übrigens angeben.
Danke für die Antwort. Ich bin mir nicht sicher, ob ich das jetzt richtig gemacht habe, aber ich hoffe Ihr könnt damit vielleicht was anfangen.
Das mit dem extrapolieren habe ich schon versucht. Auch dann erhalte ich nur NaN und 0.
du brauchst Daten in dem Bereich, in dem du interpolieren willst. Ansonsten kannst du eben nur die NaN durch einen Extrapolationswert wie -1 ersetzen lassen.
Ok. Anscheinend funktioniert das ganze nicht so wie ich will...Aber ich verstehe nicht warum. Wenn man sich x2 und x_old sowie die y's und z's anschaut, so liegt x2,y2 und z2 doch immer im Bereich der old-Werte oder übersehe ich da was?
hast du die Befehle von 10:41 denn mal ausgeführt?
Dann siehst du klar, dass die neuen Werte in einer Dimension eben nicht im vorhandenen Wertebereich liegen.
Guten Morgen,
ich habe das Programm jetzt ein wenig abgeändert:
Code:
for k=1:41:563
x3=x2(k:k+41);
y3=y2(k:k+41);
z3=z2(k:k+41);
[x4,y4,z4]=meshgrid(x3,y3,z3);
for u=1:934 for s=1:42 for t=1:1245 ifmin(z3)<z_old2(s,t,u) && z_old2(s,t,u)<max(z3) && min(x3)<x_old2(s,t,u) && x_old2(s,t,u)<max(x3) && min(y3)<y_old2(s,t,u) && y_old2(s,t,u)<max(y3)
x_old3(s,t,u)=x_old2(s,t,u);
y_old3(s,t,u)=y_old2(s,t,u);
z_old3(s,t,u)=z_old2(s,t,u);
canny2(s,t,u)=canny1(s,t,u);
end end end end
V1=interp3(x_old3,y_old3,z_old3,canny2,x4,y4,z4);
end
So liegen die zu interpolierenden Werte nicht mehr außerhalb. Allerdings sagt mir Matlab nun immer, dass es kein valid meshgrid ist für interp3. Kann mir das jemand erklären?
LG
So habe ich keine Schleifen und kann alles mit einmal berechnen, dank des reshape Befehls. Mein Problem ist nun, dass V nur 0en und NaNs liefert. Die NaN treten aufgrund der Tatsache auf, dass diese Punkte außerhalb liegen. Also wieder das Interpolation bzw. Extrapolations Problem. Das ist logisch. Nur eigentlich müssten im mittleren Bereich nicht nur 0en stehen, sondern auch 1en. Kann mir jemand sagen, warum das nicht der Fall ist?
LG
Müssen für die 3D Interpolation alle Gitter gleich groß sein? Im Moment sind die x_old2 usw. 3 dimensional und genausogroß wie canny1. Die x_shape usw. nur 2 dimensional. Macht das vielleicht das Problem? Kennt sich da jemand mit aus?
Einstellungen und Berechtigungen
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.