2017-03-29 7 views
0

タイトルが言うように、私は線(または任意の方程式)を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

使用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') 

をあなたが得る: enter image description here

をして、あなたはさらに出力をskeletonize /むしばむ/拡張することができます

1

なぜあなた自身でそれをしないのですか?あなたは(おそらくスケーリングされた)あなたの関数のxとして使用する(おそらくスケーリングされた)y outを得る行列のすべてのx座標をループして、行列のy座標を使って1を設定します。

2

を考えると、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') 

enter image description here

enter image description here

関連する問題