WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Zonenplatte plotten - Intervallproblem?

 

nolimits
Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 21.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.03.2013, 19:39     Titel: Zonenplatte plotten - Intervallproblem?
  Antworten mit Zitat      
Hallo!

Mit ist leider kein besserer Titel für das Thema eingefallen Sad

Ich würde gerne eine Zonenplatte plotten. Vielleicht erstmal als 1D-Plot wie in der angehängten Grafik gezeigt. Step by step.

Ich habe es schon mit einer Sinusfunktion und Imshow als binäre Zonenplatte (Schwarz / Weiß) hinbekommen. Das klappt mit dem Sinus recht gut da ich den Nulldurchlauf als Grenze definiere und alle negativen Funktionswerte schwarz mache und alle Positiven Funktionswerte Weiß.

Nun möchte ich auch die Zwischenwerte mit einbeziehen. Diese Zwischenwerte sollen als 8bit-Grauwert dargestellt werden.

Nehme ich aus dem Code nur "term1" ohne "h" plottet er mit zwar eine schöne Zonenplatte mit Zwischenwerten, aber bei näherer Betrachtung (zweites Bild matlabZPplot_sinusfail.png) habe ich durch den Sinus mir eine Parabel mit Sattelpunkten reingeholt. Dies möchte ich vermeiden.

Leider kommte ich nicht auf den Trichter wie ich das entsprechend in Matlab umsetzen soll. Die Sinusfunktion scheint ja dabei nicht zu funktionieren :/

Vielelicht kann mir einer helfen?

Code:

function I = imzoneplate(N)
if nargin < 1
    N = 300; % Neue Standardbedingung: Erstellt ein 600 mal 600 Zonenplattenbild
end

if rem(N,2) == 1
    x2 = (N-1)/2;
    x1 = -x2;
else
    x2 = N/2;
    x1 = -x2 + 1;
end

[x,y] = meshgrid(x1:x2);
r = hypot(x,y);
fokus = 0.8; % Defininert Fokalebene 0 ... 1
grenze = 0.5; % Maximale Anzahl der Ringe etwa in Prozent 0 ... 1
km = fokus*2*pi;
rm = x2;
w = rm/10;
term1 = (sin( (km * r.^2) / (2 * rm) )); % kein quadrat, nulldurchlauf als schwellwert
term2 = 0.5*tanh((grenze*rm - r)/w) + 0.5;

v = term2 > 0.5; % Randbedingung der Zonen; tangh-Komponente Biniarisieren

h = ones(size(term1)); % Schwarze Ringe Grauwert x
h( term1 > 0.0) = 0 / 255;  % Schwarze Ringe Grauwert x + nulldurchlauf als schwellwert

g = h .* v; % Produktbildung

I = (g); % soll g sein
imshow(I);
 


matlabZPplot_sinusfail-original.png
 Beschreibung:

Download
 Dateiname:  matlabZPplot_sinusfail-original.png
 Dateigröße:  60.79 KB
 Heruntergeladen:  664 mal
matlabZPplot_sinusfail.png
 Beschreibung:

Download
 Dateiname:  matlabZPplot_sinusfail.png
 Dateigröße:  48.24 KB
 Heruntergeladen:  678 mal
matlabZPplot.png
 Beschreibung:

Download
 Dateiname:  matlabZPplot.png
 Dateigröße:  25.43 KB
 Heruntergeladen:  671 mal
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 14.03.2013, 15:35     Titel: Re: Zonenplatte plotten - Intervallproblem?
  Antworten mit Zitat      
Hallo nolimits,

Zitat:
Nehme ich aus dem Code nur "term1" ohne "h" plottet er mit zwar eine schöne Zonenplatte mit Zwischenwerten, aber bei näherer Betrachtung (zweites Bild matlabZPplot_sinusfail.png) habe ich durch den Sinus mir eine Parabel mit Sattelpunkten reingeholt. Dies möchte ich vermeiden.

Ich verstehe nicht, was "durch den Sinus eine Parabel reinholen" bedeutet. Ich weiß auch nicht genau, was "vermeiden" nun genau bedeutet, da es ja beliebig viele Lösungen gibt.
"Die Sinus-Funktion scheint nicht zu funktionieren" ist ebenfalls nicht klar. Man kann aber auf der Basis einer flasch implementierten Funktion noch keine Verbesserungsvorschläge geben, da ja die Information fehlt, wie die korrekte Formel lautet.

Eine gute Strategie wäre es, zuerst die Formel mathematisch zu klären, die Du zeichnen möchtest. Wenn das klar ist, kannst Du sie im Forum posten und nach der Implementierung in Matlab fragen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
nolimits
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 21.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.03.2013, 17:44     Titel:
  Antworten mit Zitat      
Hi und Danke für deine Mühen!


Ich hab für euch von Mathe echt Null Plan, das gebe ich zu^^

Also die Funktion die hinter meinem Problem steckt, ist eine Parabel. y = x^2.

So nun hatte bei der alten Zonenplatte ich bisher einen Sinus genommen, der ist ja periodisch zwischen -1 und 1. Das erzeugte mir ein Bild einer Zonenplatte:

Bild:

Ich habe sie Binarisiert anhand der Nulldurchläufe der Sinusfunktion:



Es gibt bei einer Sinusfunktion ja unendlch viele Extremalstellen. Jede Extremalstelle wird inm Matlabscript dann zu "Weiß" und jeder Nulldurchlauf auf der x-Achse zu "Schwarz". Der Verlauf ist kontinuierlich. Und so erhalte ich weiße und schwarze Ringe mit sanften Verlauf.

Es geht hierbei und einen Phasenhub in der Optik. Weiß ist gleich pi und Schwarz 0.

Für die neue Zonenplatte muss ich auf Basis einer Parabelfunktion diese schwarz/weißen Ringe erzeugen.

Zuletzt bearbeitet von nolimits am 14.03.2013, 18:38, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 14.03.2013, 18:30     Titel:
  Antworten mit Zitat      
Hallo nolimits,

Für die eigentliche Implementierung in Matlab ist die physikalische Bedeutung der Zahlen nicht von belang. Er taucht ja in einem Programm gar nicht auf. Also ist die wichtige Information aus Deiner letzten Mitteilung:
Zitat:
Die Funktion die hinter meinem Problem steckt, ist eine Parabel. y = x^2*0.5.

Alles was mit dem Sinus zu tun hat, hat dann mit dem eigentlichen Problem nichts zu tun und lenkt die Leser nur ab, oder?
Was soll also mit der obigen Formel geschehen? Brauchst Du vielleicht einfach:
Code:
k = mod(0.5*x^2, 1)

? Oder was ist genau die Frage?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
nolimits
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 21.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.03.2013, 20:22     Titel:
  Antworten mit Zitat      
hehe cool, ich glaube das fehlte in meinem brain^^

Code:
>> x = 0:0.01:3
>> k=mod(x.^2, 1)
>> plot(-k)


es is schon schwer etwas zu suchen wenn man nich weiß wonach man suchen soll Very Happy

danke^^

Zwischenablage02.png
 Beschreibung:

Download
 Dateiname:  Zwischenablage02.png
 Dateigröße:  21.61 KB
 Heruntergeladen:  665 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 15.03.2013, 13:22     Titel:
  Antworten mit Zitat      
Hallo nolimits,

Bedeutet das, dass die Frage beantwortet ist? Dann kannst Du den Status entsprechend setzen. Danke!

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.