2017-08-04 16 views
0

私はチェッカーボードを作成し、円ではなく、正方形や長方形としてそれを表示するには、MATLAB関数checkerboardを使用していますでスムーズなメッシュグリッドを作成します。私はこれを行うには、以下のコードを書かれているが、私の関数meshgridは、粗大であると思われるので、私はimshow(checks)を行うときには、円の縁がギザギザと全く滑らかであることがわかります。誰も私にこの問題を克服する方法を教えてもらえますか?はMatlabの

また、私はこのような小さな関数meshgridを設定しなければならなかった理由は、私はそれが正方形かのように見せかけるためにチェッカーボードのあまりを表示するためにそこにしたいと私は本当に小さいことがcheckerboardから生成K行列を必要とするということですより大きな距離を持つ。誰もが関数meshgridを作成せずにこれを行う方法を知っているならば、それはまた、動作します。

これはPsychtoolboxので、私は私が何ができるかに制限された少しだを使用して、私のスクリプトの一部です。 checksを作成したら、それを拡大しながら画面に描画するためにtextureを生成するために使用します。

誰でも手助けできますか?

コード:

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

私はそれを見ると、あなたが文字通り-1.25を[ '間のすべての単一の実数を取る場合にのみ、完全に滑らかになります、1.25] 'は明らかに不可能である。 'K = checkerboard(40);のようなものを使うと、結果が好きかもしれません。 K = K(1:269,1:269); 'と-1.25'として関数meshgrid間隔:0.00932:1.25'。それはあなたにこれを与えます:https://i.stack.imgur.com/uqdhP.jpg滑らかに見えますが、ズームすると同じ問題が発生します。なぜなら、あなたは '[-1.25 、1.25] ' –

答えて

1

(後期答え、おそらく誰かがそれが役に立つかもしれません。)

あなただけの市松模様のパターンを再スケールする必要がギザギザのない質感を実現してくれたものに思えます円形の開口を適用する前に。あなたは、MATLABでrepelem機能で簡単にそれを行うことができます。

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); 

結果: enter image description here