我需要使用下面的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函数,这些函数可以在整个电路板上均匀地分配零值,但是没有找到任何可行的函数。就输出而言,出现的零和零有点无关紧要。它们只需要在矩阵内尽可能均匀地分布。例如,修改矩阵的第3行可以= 1 1 0 0 1 1等。
有可能以不同的方式实现这种效果,而不是从我看不到的tril开始吗?
对于Beaker和任何想评论如何更好地问我原来问题的人。
这是我想要的结果。它不完全是我所描述的,但它实现了我之后的相同功能。这是完全不同的方向。我正在对粒子的混合和分离进行图像分析。制作这样的图像可以让我确定我的混音算法是否产生了我期待的结果。我可以使用你给出的交错代码来继续制作新的和有趣的模式(未显示)。
img=checkerboard(1,1186,686);
img_bw=im2bw(img);
img_mix=triu(img_bw,-500);
img_neg=imcomplement(img_mix);
imshow(img_neg)
答案 0 :(得分:1)
我认为可能会成为您追求的目标。请注意,我借用this blog post中的交错重写技巧。 (我也使用了triu
代替tril
,因为它符合您的示例。)
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