Matlab n*n块和多边形
这实际上是针对matlab中名为roipoly的函数,但它可以被视为一般情况下的问题 Roipoly是一个函数,它允许您在图像上选择多边形,并返回一个二进制掩码,您可以使用该掩码获取所需多边形的索引。(它毕竟只是一个法线多边形) 我的应用程序(K-最近邻)要求我用我拥有的数据(多边形)制作nn块,也就是说,如果我有一个多边形(一条道路或一块土地),我希望nn正方形在其上移动,同时避免与边相交,并将这些n*n像素放入某个变量中 如果我所有的形状都是矩形的话,这个问题会容易得多,但不幸的是,事实并非如此。我可能有一些东西是对角的,圆形的或是不规则的 有一个已知的算法我可以实现吗?或者一些已经做到了这一点,或者可以在matlab中使其变得更容易的东西 我已经在做了,但它相当棘手,我想确保我没有浪费时间在某个地方重新发明一个轮子Matlab n*n块和多边形,matlab,Matlab,这实际上是针对matlab中名为roipoly的函数,但它可以被视为一般情况下的问题 Roipoly是一个函数,它允许您在图像上选择多边形,并返回一个二进制掩码,您可以使用该掩码获取所需多边形的索引。(它毕竟只是一个法线多边形) 我的应用程序(K-最近邻)要求我用我拥有的数据(多边形)制作nn块,也就是说,如果我有一个多边形(一条道路或一块土地),我希望nn正方形在其上移动,同时避免与边相交,并将这些n*n像素放入某个变量中 如果我所有的形状都是矩形的话,这个问题会容易得多,但不幸的是,事实并非
有什么想法吗?我不完全确定您想要什么,但假设是这样的:您有一个二进制掩码,并且您想要所有(可能重叠的)n*n适合的正方形 您可以通过生成所有可能的n*n个正方形,然后丢弃所有不适合多边形的正方形来尝试此操作 比如说
%# create a circle - this is the binary mask
bw = false(101);
[xx,yy] = ndgrid(-50:50,-50:50);
bw((xx.^2+yy.^2)<625)=true;
%# since we'd want to know which windows fit, we'll collect the linear indices
%# pointing into bw. Thus, we need an array of the same size as bw that contains
%# the linear index of each pixel
indexMask = zeros(size(bw));
indexMask(:) = 1:numel(indexMask);
%# create all possible 5*5 windows with im2col.
allWindows = im2col(indexMask,[5,5]);
%# discard all windows that lay even partially outside the mask
goodWindowIdx = all(bw(allWindows),1);
goodWindows = allWindows(:,goodWindowIdx);
%#创建一个圆-这是二进制掩码
bw=false(101);
[xx,yy]=ndgrid(-50:50,-50:50);
bw((xx.^2+yy.^2)我不完全确定您想要什么,但假设是这样的:您有一个二进制掩码,并且您想要所有(可能重叠的)n*n适合的正方形
您可以通过生成所有可能的n*n个正方形,然后丢弃所有不适合多边形的正方形来尝试此操作
比如说
%# create a circle - this is the binary mask
bw = false(101);
[xx,yy] = ndgrid(-50:50,-50:50);
bw((xx.^2+yy.^2)<625)=true;
%# since we'd want to know which windows fit, we'll collect the linear indices
%# pointing into bw. Thus, we need an array of the same size as bw that contains
%# the linear index of each pixel
indexMask = zeros(size(bw));
indexMask(:) = 1:numel(indexMask);
%# create all possible 5*5 windows with im2col.
allWindows = im2col(indexMask,[5,5]);
%# discard all windows that lay even partially outside the mask
goodWindowIdx = all(bw(allWindows),1);
goodWindows = allWindows(:,goodWindowIdx);
%#创建一个圆-这是二进制掩码
bw=false(101);
[xx,yy]=ndgrid(-50:50,-50:50);
体重((xx.^2+yy.^2)编辑,谢谢你的评论,我在早些时候写问题时有点迷路了。编辑,谢谢你的评论,我在早些时候写问题时有点迷路了。天哪!天才!这正是我一整天都在努力实现的!我不知道im2col-->但我已经为我的矩形数据实现了它。我知道我是重新发明轮子。真的,你不知道我有多感激!很高兴帮助你。而且,你接受了我的答案,所以我也很感激:)天哪!天才!这正是我一整天都在努力实现的!我不知道im2col-->但我已经为我的矩形数据实现了它。我知道我在重新发明轮子。真的,你不知道我有多感激!很高兴帮助你。而且,你接受了我的答案,所以我也很感激:)