求二值图像中,象素遍历算法

想遍历图像中8连通的区域(图像是由几条不规则曲线组成,为边缘提取之后的图像),现在想要记录每一条曲线的象素个数!
请各位指教,我的算法总是出错。以为曲线可能有分支。
例如对图像:
A=
[255 0 255 255 255
0 255 255 255 0
0 0 255 0 255
255 0 255 255 255
255 255 0 255 255]
这样,的图像有两个连通区域(为0的象素),现在想记录这幅图像的连通区域的个数,和每个连通区域有多少个象素组成!
[299 byte] By [yanzhi727] at [2008-4-9]
# 1
八个方向递归阿,访问过了标记一下!思路就是这样
shunan-什么是技术 at 2007-10-19 > top of Msdn China Tech,专题开发,技术,项目,数据结构,算法...
# 2
1.i = 1;
2.全部象素点的area = 0;
扫描图的时候遇到某一象素的level>0:
3.看看它上下相邻的象素点的area有没有大于0的,如果有的话,就把该值附给改象素点的area,如果没有就把该象素点的area附为i++;
4.扫完整张图
# 3
以前我做过,下面是部分代码:
for (int y = 0; y < height; y++)
{
for (int x = 0; x < width; x++)
{
aFlag[x][y] = 0;
if (255 == BYTE(pBuffer[(x + y * width) * 3]))
{
if (0 == y)
{
if (0 == x)
aFlag[x][y] = index++;
else
{
if (aFlag[x - 1][y] != 0)
{
aFlag[x][y] = aFlag[x - 1][y];
}
else
{
aFlag[x][y] = index++;
}
}
}
else
{
if (0 == x)
{
if (aFlag[x][y - 1] != 0)
aFlag[x][y] = aFlag[x][y - 1];
else if (aFlag[x + 1][y - 1] != 0)
aFlag[x][y] = aFlag[x + 1][y - 1];
else
aFlag[x][y] = index++;
}
else if (width - 1 == x)
{
if (aFlag[x - 1][y - 1] != 0)
aFlag[x][y] = aFlag[x - 1][y - 1];
else if (aFlag[x - 1][y] != 0)
aFlag[x][y] = aFlag[x - 1][y];
}
else
{
if (aFlag[x - 1][y] !=0)
aFlag[x][y] = aFlag[x - 1][y];
else if (aFlag[x][y - 1] !=0)
aFlag[x][y] = aFlag[x][y - 1];
else if (aFlag[x - 1][y - 1] != 0)
aFlag[x][y] = aFlag[x - 1][y - 1];
else if (aFlag[x + 1][y - 1] != 0)
aFlag[x][y] = aFlag[x + 1][y - 1];
else
aFlag[x][y] = index++;
}
}
}
}
}