タイトルが言うように、私は線(または任意の方程式)を2次元行列に変換したいと思います。例えばmatlab - 1と0の値を持つ2次元行列への方程式
:
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
と行と列の長さを可変とすることができる:私はライン式Y = Xを持っている場合、私はそれは次のようになりたいです。
これを実装する関数またはメソッドはありますか?
タイトルが言うように、私は線(または任意の方程式)を2次元行列に変換したいと思います。例えばmatlab - 1と0の値を持つ2次元行列への方程式
:
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
と行と列の長さを可変とすることができる:私はライン式Y = Xを持っている場合、私はそれは次のようになりたいです。
これを実装する関数またはメソッドはありますか?
使用meshgrid
は、XYグリッドを得るために:
% 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')
をして、あなたはさらに出力をskeletonize /むしばむ/拡張することができます
なぜあなた自身でそれをしないのですか?あなたは(おそらくスケーリングされた)あなたの関数のxとして使用する(おそらくスケーリングされた)y outを得る行列のすべてのx座標をループして、行列のy座標を使って1を設定します。
を考えると、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')