您的位置:首页 > 其它

图像处理 之 统计数组中连续0/1的个数

2017-04-27 16:53 1061 查看
有时,我们需要统计数组中连续的0/1的个数,或者矩阵中每一行或列中连续0/1的个数,传统方法需要使用两层循环来实现,对于matlab而言太不高效了,有木有又简便又高效的方法呢?

下面以统计连续0的个数为例(统计连续1的个数只需取反操作即可),对于如下数组:



我们要统计其中连续0出现的次数,很容易观察出是1,1,1,3。那我们如何不通过循环快速获得结果呢?不妨看看如下提示



不难发现,累加数组(cumsum的结果数组)的每一项是原始数组前n项的累加和。既然如此,如果原始数组中第n项为0,那前n项和前n-1项的累加和应该相等才对。而且结果确实如此。

由此不难想出,统计连续0的个数,间接转换成了统计累加数组中每个值出现的频数减一。这里使用tabulate函数,具体用法可在matlab命令窗口中doc tabulate。





即可获得结果预期结果。

如果我们要快速获得出现次数最多的连续0的个数,还有更简便的方法



原理与上面相似,mode只输出出现频率最高的数字及其出现的次数。

但该方法有一点需要注意,就是待统计数字出现在数组开头时,会出现1的误差。



我们在原始数组a的基础上,在头部增加了两个0,得到数组b,预期结果变成了2,1,1,1,3。但按照刚才的方法结果却变成了1,1,1,1,3。具体原因也很好理解,大家查看中间结果就可以明白。

为了避免这种问题,我们可只需在数组b的头部加入一个0即可。



同时,也不会影响原始数组a的结果



当数组切换成矩阵时,也可以进行上述操作中的mode操作(tabulate操作只支持向量),即可统计出每一列中连续0的个数

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐