图像处理 之 统计数组中连续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的个数
下面以统计连续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的个数
相关文章推荐
- Matlab中连续读入并处理图像,然后保存至指定文件夹下-dir,strcat,fullfie,imread,imwrite
- 图像处理-MFC学习(7)——实现8*8数组的DCT、IDCT
- [Python]图像处理日记——第一天(如何查询图片属性,数组与RGB,灰度图像如何互换)
- 利用awk数组循环取出域名及统计和排序处理
- •连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组; •长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。
- Oracle 10g中用FORALL处理非连续数组
- OpenCV 数组存储图片像素值,便于后期图像处理
- 数字图像处理----区域生长之面积统计
- 小波图像处理 —— 奇异点(不连续点)检测
- 【图像处理】01 读取像素数组到数组
- 输入一个字符串内有数字和非数字字符,将连续的数字作为一个整数,存到数组a中,统计整数的个数,并输出这些数
- C输入一个字符串,将其中连续的数字做为一个整数存放在一个整形数组中,统计其中数字的个数并输出这些整数。
- MATLAB图像处理_统计最大/最小/平均灰度
- 【OpenCV3图像处理】统计图像的直方图 ,绘制直方图
- 五种基于RGB色彩空间统计的皮肤检测算法 分类: 视频图像处理 2015-07-24 10:18 48人阅读 评论(0) 收藏
- 高级图像处理初步——背景获取、轮廓检测、数量统计
- C 输入一个字符串,将其中连续的数字作为一个整数存到一数组中,统计整数个数并输出这些整数
- Win8 Metro(C#)数字图像处理--2.51图像统计滤波算法
- noi多维数组 13:图像模糊处理
- 习题 8.16 输入一个字符串,内有数字和非数字字符,将其中连续的数字作为一个整数,依次存放到一数组a中。统计共有多少个整数,并输出这些数。