想象一下下面的矩阵所示的以下二进制图像。这是我将要使用的图像的简化版本:
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对所有边界求和吗?
答案 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