在Matlab中创建光滑网格

在Matlab中创建光滑网格,matlab,resize,mesh,psychtoolbox,Matlab,Resize,Mesh,Psychtoolbox,我正在使用Matlab函数checkboard创建一个棋盘,然后将其显示为圆形,而不是正方形或矩形。我已经编写了下面的代码来实现这一点,但是因为我的网格看起来很粗糙,当我执行imshow(checks)时,您可以看到圆的边是锯齿状的,一点也不平滑。有人能告诉我如何克服这个问题吗 或者,我不得不设置如此小的网格网格的原因是,我需要从棋盘格生成的K矩阵非常小,因为我希望在那里显示较少的棋盘格,使其看起来好像正方形有更大的距离。如果有人知道在不创建网格网格的情况下执行此操作的方法,那么这也会起作用 这

我正在使用Matlab函数
checkboard
创建一个棋盘,然后将其显示为圆形,而不是正方形或矩形。我已经编写了下面的代码来实现这一点,但是因为我的网格看起来很粗糙,当我执行
imshow(checks)
时,您可以看到圆的边是锯齿状的,一点也不平滑。有人能告诉我如何克服这个问题吗

或者,我不得不设置如此小的网格网格的原因是,我需要从
棋盘格
生成的
K
矩阵非常小,因为我希望在那里显示较少的棋盘格,使其看起来好像正方形有更大的距离。如果有人知道在不创建网格网格的情况下执行此操作的方法,那么这也会起作用

这是我脚本的一部分,它使用了
Psychtoolbox
,所以我的能力有点受限。一旦我创建了
检查
我就用它来生成一个
纹理
来绘制屏幕,同时将其放大以使其更大

有人能帮忙吗

代码:

  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);
K=棋盘格(9);%使用Matlab棋盘函数创建棋盘
K=K(1:27,1:27);%使用棋盘的一小部分,因为我希望两行之间有一个很宽的距离
cmap=[0.480.480.48;0.540.540.54];%彩色地图使颜色变成灰色
bw1=ind2rgb(uint8(K),cmap);
白色=1;
灰色=白色/2;
rcycles=8;
%现在我们制作棋盘格图案
xylim=1;
[x,y]=meshgrid(-1.25:0.0932:1.25,-1.25:0.0932:1.25);
支票=bw1;
圆圈=x.^2+y.^2(回答晚了,但也许有人会觉得它有帮助。)

在我看来,要获得没有锯齿边缘的纹理,只需在应用圆形光圈之前重新缩放棋盘图案。使用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);
K=棋盘格(9);%使用Matlab棋盘函数创建棋盘
K=K(1:27,1:27);%使用棋盘的一小部分,因为我希望两行之间有一个很宽的距离
cmap=[0.480.480.48;0.540.540.54];%彩色地图使颜色变成灰色
bw1=ind2rgb(uint8(K),cmap);
%此比例因子表示棋盘格大小增加了多少
比例系数=23;
bw1=重复(bw1,比例因数,比例因数);
白色=1;
灰色=白色/2;
rcycles=8;
%现在我们制作棋盘格图案
xylim=1;
[x,y]=meshgrid(linspace(-1.25,1.25,27*比例因子),linspace(-1.25,1.25,27*比例因子));
支票=bw1;

圆圈=x.^2+y.^2在我看来,只有当你从字面上取
[-1.25,1.25]
之间的每一个实数时,它才会非常平滑,这显然是不可能的。如果您使用类似于
K=checkboard(40)的东西,您可能会喜欢结果;K=K(1:269,1:269)和网格间距为
-1.25:0.00932:1.25
。顺便说一句,它给出了这一点:它看起来很平滑,但是如果你放大它,你会看到同样的问题,因为你不能考虑<代码> [-1.25,1.25 ] < /代码>之间的所有点。