求二值图像中,象素遍历算法
想遍历图像中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的象素),现在想记录这幅图像的连通区域的个数,和每个连通区域有多少个象素组成!
以前我做过,下面是部分代码:
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++;
}
}
}
}
}