Matlab 二值图像的矩阵值分布

Matlab 二值图像的矩阵值分布,matlab,matrix,Matlab,Matrix,我需要取下下面的tril并平均分配这些值,这样它就会像一个修改过的棋盘一样结束 x=ones(1186,686); x2=tril(x); 下面是我需要完成的简化矩阵示例: 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 1 1 1 1 0 0 0 1 1 1 0 0 0 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 上述矩阵需要更改为: 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1

我需要取下下面的tril并平均分配这些值,这样它就会像一个修改过的棋盘一样结束

x=ones(1186,686);
x2=tril(x);
下面是我需要完成的简化矩阵示例:

1 1 1 1 1 1
1 1 1 1 1 1 
0 1 1 1 1 1 
0 0 1 1 1 1
0 0 0 1 1 1 
0 0 0 0 1 1 
0 0 0 0 0 1
0 0 0 0 0 0
0 0 0 0 0 0
上述矩阵需要更改为:

1 1 1 1 1 1 
1 1 1 1 1 1 
1 0 1 1 1 1 
1 0 1 0 1 1 
1 0 1 0 1 0
1 0 1 0 0 0 
1 0 0 0 0 0 
0 0 0 0 0 0 
0 0 0 0 0 0 
我试着寻找内置的MATLAB函数,这些函数可以将零值均匀地分布在各个板上,但没有找到任何有效的方法。就输出而言,1和0出现的位置有些不相关。它们只需要在矩阵中尽可能均匀地分布。例如,修改后的矩阵的第3行可以=1 0 1 1或类似

是否有可能以一种不同的方式实现这种效果,而不是从我没有看到的颤音开始

对于比克和任何想评论我如何能更好地问我的原始问题的人

这是我想要的结果。这并不完全是我所描述的,但它实现了与我所追求的相同的功能。这是完全不同的方向。我在做粒子混合和分离的图像分析。有了这样的人造图像,我可以确定我的混合算法是否产生了我期望的结果。我可以使用您提供的交错代码继续创建新的有趣的模式(未显示)

我想这可能就是你想要的。请注意,我借用了“重塑交织”技巧。(我还使用了
triu
而不是
tril
,因为它符合您的示例。)

输出为:

col_interleave =

  1  1  1  1  1  1  1  1  1  1
  1  0  1  1  1  1  1  1  1  1
  1  0  1  0  1  1  1  1  1  1
  1  0  1  0  1  0  1  1  1  1
  1  0  1  0  1  0  1  0  1  1
  1  0  1  0  1  0  1  0  1  0
  1  0  1  0  1  0  1  0  0  0
  1  0  1  0  1  0  0  0  0  0
  1  0  1  0  0  0  0  0  0  0
  1  0  0  0  0  0  0  0  0  0
  0  0  0  0  0  0  0  0  0  0
  0  0  0  0  0  0  0  0  0  0

因此,您希望获得每行中
1
的数量。分配每个
1
,使每个其他值都是
1
。从左手边开始,使用
1
?这是一个均匀的零分布吗?您是否在问如何从
tril(one(n))
过渡到仅交错列?或你到底在问什么?你说的是随机分布还是构造矩阵的方法?什么是“尽可能均匀”?我知道我实际上想问的是令人困惑的问题,这就是为什么我试图用示例矩阵来澄清它。不过我还是没想到,对不起。“均匀”分布可能是个错误的词。就像丹说的,我正试着把柱子交错起来。每行中的1和0的数量必须保持不变,但是它们的分布需要改变,并且必须最大化。例如:像这样的行:0 0 0 1 1 1 1 1 1需要更改为:0 1 0 1 0 1 1 1 1 1 1 1不是此:0 1 1 0 1或其任何变体。不是,但我可以将其用于我要进行的分析的其他部分。谢谢@用户3753314:如果这不是你想要的,请更准确地解释你想要什么。我一直在使用你提供的交错函数。虽然这不是我想要的,但我可以修改你给我的,让它完全满足我的需要。再次感谢。@user3753314您能用您提出的代码更新您的问题吗?我有点好奇你想达到什么目的。
x=ones(12,10);
x2=triu(x);
[rows,cols]=size(x2);
a = x2(:,1:cols/2);
b = x2(:,end:-1:(cols/2)+1);

% interlave two same sized matrices by column
a = a.';
b = b.';
col_interleave = reshape([b(:) a(:)]',2*size(a,1), []).'
col_interleave =

  1  1  1  1  1  1  1  1  1  1
  1  0  1  1  1  1  1  1  1  1
  1  0  1  0  1  1  1  1  1  1
  1  0  1  0  1  0  1  1  1  1
  1  0  1  0  1  0  1  0  1  1
  1  0  1  0  1  0  1  0  1  0
  1  0  1  0  1  0  1  0  0  0
  1  0  1  0  1  0  0  0  0  0
  1  0  1  0  0  0  0  0  0  0
  1  0  0  0  0  0  0  0  0  0
  0  0  0  0  0  0  0  0  0  0
  0  0  0  0  0  0  0  0  0  0