2017-08-04 3 views
0

Ich verwende die Matlab-Funktion checkerboard, um ein Schachbrett zu erstellen und es dann als Kreis und nicht als Quadrat oder Rechteck darzustellen. Ich habe den Code unten geschrieben, um dies zu tun, aber weil mein Meshgrid so grob zu sein scheint, wenn ich mache imshow(checks) können Sie sehen, dass die Kanten des Kreises gezackt und überhaupt nicht glatt sind. Kann mir jemand sagen, wie ich dieses Problem überwinden kann?Erstellen eines glatten Gitternetzes in Matlab

Alternativ kann der Grund, warum ich so ein kleines meshgrid eingestellt gehabt haben, ist, dass ich die K Matrix aus checkerboard erzeugt brauchen wirklich klein zu sein, wie ich es will weniger des Schachbrett angezeigt werden, um es als ob die Quadrate erscheinen habe eine größere Entfernung. Wenn jemand einen Weg kennt, dies zu tun, ohne ein Meshgrid zu erstellen, wird das auch funktionieren.

Dies ist ein Teil meines Skripts, das Psychtoolbox verwendet, also bin ich ein bisschen eingeschränkt in dem, was ich tun kann. Sobald ich checks erstellt habe, verwende ich es, um eine texture zu generieren, um auf den Bildschirm zu zeichnen, während es vergrößert wird, um es größer zu machen.

Kann jemand helfen?

Code:

K=checkerboard(9); % using Matlab checkerboard function to create a checkerboard 
    K=K(1:27,1:27); % using a small part of the checkerboard as I want to have a wide distances between the lines 
    cmap = [0.48 0.48 0.48; 0.54 0.54 0.54]; % colour map to make the colour grey 
    bw1 = ind2rgb(uint8(K), cmap); 
    white = 1; 
    grey = white/2; 
    rcycles = 8; 

    % Now we make our checkerboard pattern 
    xylim = 1; 
    [x,y] = meshgrid(-1.25:0.0932:1.25,-1.25:0.0932:1.25); 

    checks = bw1; 
    circle = x.^2 + y.^2 <= xylim^2; 
    checks = circle .* checks + grey * ~circle; 

    imshow(checks); 
+0

Wie ich es sehe, wird es vollkommen glatt nur, wenn Sie buchstäblich jede einzelne reelle Zahl zwischen 'nehmen [-1.25 , 1,25]], was eindeutig nicht möglich wäre. Das Ergebnis mag Ihnen gefallen, wenn Sie etwas wie 'K = Schachbrett (40); K = K (1: 269,1: 269); 'und das Meshgrid-Intervall als' -1,25: 0,00932: 1,25'. Btw es gibt Ihnen das: https://i.stack.imgur.com/uqdhP.jpg es scheint glatt, aber wenn Sie es zoomen, werden Sie das gleiche Problem sehen, weil Sie nicht alle Punkte zwischen '[-1.25 berücksichtigen können , 1.25] ' –

Antwort

1

(Späte Antwort, aber vielleicht jemand könnte es hilfreich finden.)

Es scheint mir, dass eine Textur ohne gezackte Kanten erreichen Sie müssen nur das Schachbrettmuster neu zu skalieren vor dem Anbringen der kreisförmigen Öffnung. Sie können mit der repelem Funktion in Matlab, dass leicht tun:

K=checkerboard(9); % using Matlab checkerboard function to create a checkerboard 
K=K(1:27,1:27); % using a small part of the checkerboard as I want to have a wide distances between the lines 
cmap = [0.48 0.48 0.48; 0.54 0.54 0.54]; % colour map to make the colour grey 
bw1 = ind2rgb(uint8(K), cmap); 

% this scale factor indicate by how much the checkerboard size is increased 
scale_factor = 23; 

bw1 = repelem(bw1,scale_factor,scale_factor); 

white = 1; 
grey = white/2; 
rcycles = 8; 

% Now we make our checkerboard pattern 
xylim = 1; 
[x,y] = meshgrid(linspace(-1.25,1.25, 27*scale_factor),linspace(-1.25,1.25, 27*scale_factor)); 

checks = bw1; 
circle = x.^2 + y.^2 <= xylim^2; 

checks = repmat(circle,1,1,3) .* checks + grey * ~repmat(circle,1,1,3); 
imshow(checks); 

Ergebnis: enter image description here

Verwandte Themen