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

Sinus-Plot in Binär umwandeln!

 

nolimits
Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 21.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.08.2012, 13:01     Titel: Sinus-Plot in Binär umwandeln!
  Antworten mit Zitat      
Hi!

Ich habe eine Seite gefunden auf der Zonenplatten mittels sinus-Funktion in Matlab erstellt werden. Ich möchte jedoch ein binäres Muster haben.

Da ich absoluter Laie in Matlab bin, woltle ich fragen, ob jemand vllt hier weiß wie man diesesn Code umstrickeln muss:

[x,y] = meshgrid(-200:200);
km = 0.8*pi;
rm = 200;
w = rm/10;
term1 = sin( (km * r.^2) / (2 * rm) );

g = term1;
imshow(g)

um statt einen saften Kantenverlauf (sinus) einen scharfkantigen (binär) zu bekommen:

http://www.lrz.de/~slansky/bereiche.....der/zonenplatte_sinus.png

zu:

http://glsmyth.com/pinhole/Articles/ZonePlate/image43.gif

Danke!

Alex
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: 21.08.2012, 14:37     Titel: Re: Sinus-Plot in Binär umwandeln!
  Antworten mit Zitat      
Hallo nolimits,

"Scharfkantig" heißt, dass bei einem bestimmten Schwellenwert der Wert wechseln soll. dann einfach einfügen:

Code:
g = g > 0.5;
imshow(g)

Oder umständlicher:
Code:
h = zeros(size(g));
h(g > 0.5) = 1;

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: 24.08.2012, 19:38     Titel:
  Antworten mit Zitat      
Danke! Hat geklappt!

Ich brauche allerdings einen bestimmten Grauwert. So wirft er nur Schwarz und Weiß aus.

Kann ich matlab sagen, er solle mir den Grauwert Stufe 150 von 255 liefern?
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: 26.08.2012, 01:20     Titel:
  Antworten mit Zitat      
Hallo nolimits,

Der Code, den Du gepostet hast, läuft übrigens nicht. Dann ist es schwieriger eine Lösung zu erstellen.

Was hast Du denn bisher versucht und was hat nicht funktioniert?
Vielleicht funktioniert dies bereits:
Code:
g = uint8((g < 0.5) * 150);

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: 26.08.2012, 12:52     Titel:
  Antworten mit Zitat      
Hi,

Das Script läuft bei mir wunderbar...

Siehe auch: http://blogs.mathworks.com/steve/20.....ahne-test-pattern-take-3/

Deine Ergänzung ist auch prima! Leider hatte ich mich komisch ausgedrückt. Ich wollte nicht die weißen Ringe sonder die Schwarzen den Grauwert 150 bekommen. Das habe ich mit nen bissl Google so hinbekommen:

Code:
h = ones(size(g));
h(g < 0.5) = 0.5;
I = (h);
 


Leider ist auch das Ende der Zonenplatte grau. Dies soll allerdings wieder Schwarz sein. Ich glaube dann müsste man nicht "g" sondern "term1" und "term2" gesondert bearbeiten mit diesem Schwellwert.

Sad

zp ones.png
 Beschreibung:
Zonenplatte mir Grauwert der schwarzen Ringe bei 0.5

Download
 Dateiname:  zp ones.png
 Dateigröße:  26.13 KB
 Heruntergeladen:  606 mal
untitled01.png
 Beschreibung:
Zonenplatte um Ursprungszustand. Schwarze Flächen sollen Grauwert 150 bekommen.

Download
 Dateiname:  untitled01.png
 Dateigröße:  12.53 KB
 Heruntergeladen:  699 mal
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: 26.08.2012, 13:38     Titel:
  Antworten mit Zitat      
Habs hinbekommen! Matlab ist ja doch net so schwer^^

Ich hätte nur noch die Möglichkeit statt einen Grauwert "0.5" den Grauwert "150" von "255" zu definieren. Wie muss man den Befehl nun ändern?
Code:

[...]
[x,y] = meshgrid(x1:x2);
r = hypot(x,y);
km = 0.7*pi;
rm = x2;
w = rm/10;
term1 = sin( (km * r.^2) / (2 * rm) );
term2 = 0.5*tanh((rm - r)/w) + 0.5;

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

h = ones(size(term1)); % Schwarze Ringe Grauwert 50%
h(term1 < 0.5) = 0.5;  % Schwarze Ringe Grauwert 50% <---- !!! soll aber Grauwert 155 von 255 sein Sad

g = h .* v; % Produktbildung

I = (g);


Diese Änderung läuft nämlich nicht. Da bekomm ich nur eine komplette weiße, runde Fläche:

Code:
h(term1 < 0.5) = uint8(150);


weiße runde fl.png
 Beschreibung:
läuft nicht :(

Download
 Dateiname:  weiße runde fl.png
 Dateigröße:  2.56 KB
 Heruntergeladen:  671 mal
grauwert 0.5.png
 Beschreibung:

Download
 Dateiname:  grauwert 0.5.png
 Dateigröße:  13.18 KB
 Heruntergeladen:  703 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: 27.08.2012, 15:07     Titel:
  Antworten mit Zitat      
Hallo nolimits,

Entweder Du verwendest als Daten DOUBLEs im Bereich 0 bis 1, oder UINT8 im Bereich 0 bis 255. Nur beide zu mischen funkitioniert nicht.
Code:
v = term2 > 0.5;
Image_double = ones(size(term1));
Image_double(v) = 155 / 255;

% Oder:
Image_uint8 = repmat(uint8(255), size(term1));
Image_uint8(v) = uint8(155);

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: 27.08.2012, 19:14     Titel:
  Antworten mit Zitat      
Hi und Danke!

Ich habe jetzt einfach

Code:
h(term1 < 0.5) = 150 / 255;


genommen. Er hätte später ein Rechenproblem bei dem Produkt:

Code:
g = h .* v; % Produktbildung


wenn ich unit8 nehmen würde. Müsste doch auch gehen, oder warum hast du in Klammern (v) geschrieben?
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.