表示二进制矩阵中每列随机化的图表

时间:2014-06-18 15:58:59

标签: arrays matlab image-processing matrix

想象一下下面的矩阵所示的以下二进制图像。这是我将要使用的图像的简化版本:

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

我想构建一个代表每列随机性的图表。我的想法是开发一个随机索引=列中每个值/总可能转换之间的总转换。在上面的矩阵中,每列可能总共有3次转换。

对于上面的示例:

第1列的随机索引为0%(0/3)

第2列的随机指数为66.7%(2/3)

第3列= 100%(3/3)

第4列= 0%(0/3),即使它们是1而不是0。没关系,我只想要过渡。

我可以围绕所有1个值绘制边界,然后让MATLAB对所有边界求和吗?

2 个答案:

答案 0 :(得分:2)

将您的图片定义为

im = [ 0 1 0 1
       0 1 1 1
       0 0 0 1
       0 1 1 1 ];

您想要的随机索引可以计算为

result = sum(diff(im)~=0) / (size(im,1)-1);

说明:diff计算每列下连续元素之间的差异。将结果与零(~=0)进行比较,并添加每行中的所有非零值(使用sum)。最后,结果除以最大数量os过渡,即行数减1(size(im,1)-1


等效地,您可以在连续的行之间使用xor

result = sum(xor(im(1:end-1,:), im(2:end,:))) / (size(im,1)-1)

答案 1 :(得分:2)

要计算您的建议,您可以这样做:

sum( diff(A) ~= 0 )

diff(A)将在列中向前取差,总和将计算非零变化的数量。所以如果你这样做,你会得到:

ans =
     0     2     3     0