matlab - 值为 1 和 0 的二维矩阵的线方程

matlab - line equation to 2D matrix with values of 1 and 0

正如标题所说,我想将一条线(或任何方程)转换为二维矩阵。

例如:如果我有一个线性方程 y = x,那么我希望它像这样:

0 0 0 0 0 1
0 0 0 0 1 0
0 0 0 1 0 0
0 0 1 0 0 0
0 1 0 0 0 0
1 0 0 0 0 0

并且行和列的长度可以是可变的。

是否有实现它的功能或方法?

为什么不自己做呢?您循环遍历矩阵的所有 x 坐标,您(可能缩放)用作函数的 x 并得到一个 y,您(可能缩放)可以舍入然后用作矩阵的 y 坐标以设置 1 .

使用meshgrid得到x-y网格:

% set resolution parameters
xmin = 1;
xmax = 100;
dx = 0.1;
ymin = 1;
ymax = 100;
dy = 0.1;
% set x-y grid
[xg, yg] = meshgrid(xmin:dx:xmax, ymin:dy:ymax);
% define your function
f = @(x) (x - 30).^2;
% apply it on the x grid and get close y values
D = abs(f(xg) - yg);
bw = D <= 1;
figure;
imshow(bw);
% flip y axis
set(gca,'YDir','normal')

你得到:

然后你可以进一步dilate/erode/skeletonize输出

给定 x 和 y 坐标,如何用这些坐标填充矩阵?正如所说,在for循环中执行即可,或者使用"sub2ind"函数。

% x,y coordinates 
x=0:.01:30;
y=10*sin(2*pi*.1*x);

% add offset so that (x,y)-coordinates are always  positive
x=x+abs(min(x))+1;
y=y+abs(min(y))+1;

figure,plot(x,y,'.');axis tight

x=ceil(x); y=ceil(y);    
im=zeros(max(y),max(x));
ind=sub2ind(size(im),y,x);
im(ind)=1;

figure,imagesc(im),axis image, axis xy;colormap gray;axis tight
xlabel('x'); ylabel('y')