Verfasst am: 22.02.2011, 13:13
Titel: Perfekter Kreis in einer Matrix
Hallo
Ich hab ein Problem.
Ich möchte in einer 512x512 Matrix einen Perfekten Kreis zeichnen. Ich schaffe es den Kreis zu plotten, allerdings geht durch die diskretisierung der Werte Information verloren. Wie schaffe ich es, dass bei pixeln in denen nur ein Teil des Kreises liegt, dem Pixel eine Art Mittelwert zugeordnet wird.
Ich habe es schon versucht die Matrix auf 5120x5120 zu vergrößern und dann mit der imresize Funktion wieder zu verkleinern, allerdings sind die resizemethods nicht befriedigend, da jedesmal zu viele Pixel einbezogen werden.
Hier mein Code zum erstellen des Kreises:
Code:
matrix = ones(512,512);
mittelpunkt_x = 256;
mittelpunkt_y = 256;
radius = 33;
for i=1:size(matrix,1) for j = 1:size(matrix,2) if(i-mittelpunkt_x)^2+(j-mittelpunkt_y)^2 <= (radius/2)^2
matrix(i,j) = Wert ;
end end end imagesc(matrix);
Die Idee, die Matrix zuerst zu vergrößern ist nicht falsch, da Dein Beispiel nur eine Auflösung von 72 dpi hat. Das ist zuwenig für einen perfekten Kreis.
Ich habe das kurz mal in Photoshop geprüft. Ein Kreis mit 300 dpi ist perfekt und runterskaliert auf 72 dpi entstehen die Probleme.
Viele Grüße
Hubertus
MatthiasW
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 22.02.2011, 16:43
Titel:
Erst mal vielen Dank für die schnelle Antwort.
Wenn ich diese Funktion richtig verstehe dann ist die Verwendung dieser Funktion nur sinnvoll um ein upscaling durchzuführen.
Downscaling funktioniert zwar auch, liefert aber ähnlich schlechte (teilweise sogar schlechtere) Ergebnisse wie imresize (und dauert deutlich länger).
Ein weiteres Problem ist, dass ich definitiv eine feste Matrixgröße von 512x512 brauche.
Durch Upsampling werden die Zwischenräume allseitig mit neuen Werten versehen. Durch Downsampling erreichst Du wieder Deine 512*512. Das ist mit Sicherheit ein gangbarer Weg. Wichtig ist, dass der Algor. stimmt. Die Funktion 'spline' liefert die besten Resultate. Das Auffüllen der Zwischenwerte mit anderen Fuktionen, wie Gauss u.ä. bringt ebenfalls nichts, weil die Kanten zu sehr verwaschen.
Ich denke, dass sich bei Deinen Vorgaben nur geringfügige Verbesserungen erzielen lassen, aber besser müßte es noch werden.
Nach dieser Darstellung kann es keine Zwischenpixel geben, die das Bild verbessern können
Hubertus
MatthiasW
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 24.02.2011, 10:54
Titel:
Hi gerade die Interpolationsmethode 'spline' liefert zwar, was die Kanten angeht realtiv gute Ergebnisse. Aber wie man in dem angehängten Bild sieht, treten Pixelwerte auf, die völlig unrealistisch sind.
Das sieht doch sehr schön aus, Vielen Dank.
Denke damit ist die Problematik gelöst.
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.