matlab - 线性方程到2D矩阵,值为1和0

时间:2017-03-29 01:36:04

标签: matlab matrix computer-vision edge-detection

正如标题所说,我想将一条线(或任何等式)转换为2D矩阵。

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

        Observable
                .fromCallable(new Callable<List<Post>>() {
                    @Override
                    public List<Post> call() throws Exception {
                        // TODO: get posts
                        return posts;
                    }
                })
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(posts -> {
                    // TODO: update UI
                }, throwable -> {
                    // TODO
                })

,行和列的长度可以变化。

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

3 个答案:

答案 0 :(得分:2)

使用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')
你得到: enter image description here

然后你可以进一步扩展/侵蚀/骨化输出

答案 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

答案 2 :(得分:1)

为什么不靠自己做呢?你遍历矩阵的所有x坐标,你(可能是缩放的)用作函数的x并获得y out,你(可能是缩放的)可以舍入然后用作矩阵的y坐标来设置1 。