在Matlab中查找二进制矩阵中的网格

时间:2015-03-09 14:52:47

标签: matlab matrix binary

我在Matlab中给出了一个二进制矩阵,我有兴趣在这个二进制矩阵中找到网格结构。

例如,考虑这个“棋盘”二进制矩阵:

X = zeros(11,20);
indeces = 1:2:220;
X(indeces) = 1;
imshow(X);

在这种情况下,结果将是由

给出的两个子网格
x = 1:1:20;
y = 1:1:11;
[X,Y] = meshgrid(x,y);

% First subgrid
X1 = ( mod(X - 1,2) == 0 & mod(Y - 1,2) == 0);
imshow(X1)

% Second subgrid
X2 = (mod(X,2) == 0 & mod(Y,2) == 0);
imshow(X2)

当然,这是一个简单的例子,通常X会不那么规律。我可以为网格提供最大步长。

编辑:为了使其精确:网格G 是由以下参数定义的二进制矩阵 - 总大小size(G),左上角[x0,y0],a网格点之间的间距s和水平和垂直方向上的点数numX, numY。这是从这些参数构造网格的一种可能性:

function G = createGrid(totalSize,upperLeft,stepSize,numX,numY)

x = 1:totalSize(2);
y = 1:totalSize(1);

[X,Y] = meshgrid(x,y);

G = (mod(X - upperLeft(1),stepSize) == 0 & ...
    mod(Y - upperLeft(2),stepSize) == 0 & ...
   (X - upperLeft(1) + 1 > 0) & ...
   (X < upperLeft(1) + stepSize * (numX - 1) + 1) & ...
   (Y - upperLeft(2) + 1 > 0) & ... 
   (Y < upperLeft(2)  + stepSize * (numY - 1) + 1));

二进制矩阵G子网格 M是一个sum(~(M(G)==1)) = 0的网格。请注意,特别是网格可以是其他网格的子网格。

如果符合以下条件,则二进制矩阵G的子网格M称为最大:如果G是另一个网格{{1}的子网格}与G2不同,则G不是G2的子网格。换句话说 - 我无法做到更大。

所以我的问题的精确表述是:如何找到给定二进制矩阵M的所有最大子网格?

是否有针对此问题的现成算法?如果没有,会有什么办法?将种子放在二元矩阵中并尝试尽可能地将它们扩展到网格?

0 个答案:

没有答案