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

Perfekter Kreis in einer Matrix

 

MatthiasW

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.02.2011, 13:13     Titel: Perfekter Kreis in einer Matrix
  Antworten mit Zitat      
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);


Vielen Dank schon mal


Hubertus
Forum-Meister

Forum-Meister


Beiträge: 1.034
Anmeldedatum: 08.01.09
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 22.02.2011, 15:17     Titel:
  Antworten mit Zitat      
Moin,

ich kann im Moment Dein Beispiel nicht übernehmen. Daher nur der theoretische Versuch. Schau Dir mal die Funktion imresample an:

http://www.mathworks.com/matlabcent.....ge/22443-image-resampling

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
Private Nachricht senden Benutzer-Profile anzeigen
 
MatthiasW

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.02.2011, 16:43     Titel:
  Antworten mit Zitat      
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.
 
Hubertus
Forum-Meister

Forum-Meister


Beiträge: 1.034
Anmeldedatum: 08.01.09
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 22.02.2011, 20:03     Titel:
  Antworten mit Zitat      
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.

Viele Grüße

Hubertus
Private Nachricht senden Benutzer-Profile anzeigen
 
Hubertus
Forum-Meister

Forum-Meister


Beiträge: 1.034
Anmeldedatum: 08.01.09
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 22.02.2011, 21:01     Titel:
  Antworten mit Zitat      
Noch ein Nachtrag, nachdem ich wieder Zugang zum Rechner habe.

Ändere Dein Bild mal in:

Code:
figure; imshow(matrix)
impixelregion  % Zeigt die Pixelverteilung an
 


Nach dieser Darstellung kann es keine Zwischenpixel geben, die das Bild verbessern können

Hubertus
Private Nachricht senden Benutzer-Profile anzeigen
 
MatthiasW

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.02.2011, 10:54     Titel:
  Antworten mit Zitat      
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.

screen.png
 Beschreibung:
Screenshot des Pixelpanels

Download
 Dateiname:  screen.png
 Dateigröße:  62.42 KB
 Heruntergeladen:  796 mal
 
Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.02.2011, 11:23     Titel:
  Antworten mit Zitat      
Hi,
was hälst du davon?

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)
        matrix(i,j) = norm([i j]-[mittelpunkt_x,mittelpunkt_y],2);
         if matrix(i,j)<=radius
         matrix(i,j)=10;
          elseif matrix(i,j)<radius+1 && matrix(i,j)>radius
         matrix(i,j)=10-4*(matrix(i,j)-radius);
        else
            matrix(i,j)=0;
        end
       
    end
end
imshow(matrix,[0 10]);
 
 
MatthiasW

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.02.2011, 11:43     Titel:
  Antworten mit Zitat      
Das sieht doch sehr schön aus, Vielen Dank.
Denke damit ist die Problematik gelöst.
 
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.