大家都知道bwlabel可以将二值图中的连通区域划分并标记出来
那么如何实现bwlabel算法呢
1、一行一行的遍历图片,寻找该行的连通区域,计作run区域,并用记录其起止位置和行号
2、看当前行的run区域是否与上一行的连通
- 不连通:给标新号
- 只与一个连通:将号替换成连通的那个号
- 与多个连通:都要换成同一个编号
比如cell{1}和cell{2}连通,则让cell{2} = [cell{2} cell{1}],再将cell{1}滞空
若要删掉不连续的标号,就删掉为空的cell即可
注意考虑边界和多个run区域与前一行连通
3、根据标号给图片赋值
具体代码如下,不过以下代码感觉还可以继续优化,,思路大致没问题,之后有机会再改改(不过我感觉我也懒得改了哈哈哈哈哈哈)
img = imread('rice.png');
[rows,cols,colors] = size(img);
imgBinary=imbinarize(img);
%bwlabel遍历每一行
%确定每一行的连通区域run,记录每个run区域所在行标和起止点位置
%sc = 1:count; %开始列标
%ec = 1:count; %结束列标
r = 1:rows; %所在行标
pre = 0;
idx = 1;
for m = 1 : rows
for n = 1 : cols
if(imgBinary(m,n) ~=