【数字图像处理】图像的面积与周长计算
二值化图像区域标记 在二值化图像中,相互联结的黑像素集合成为一个(黑)区域,通过对图像内每个区域进行标记操作,求得区域的数目。 处理前的f是二值的,像素要么为0(黑),要么为255(白) 处理后每个像素的值即为其所处理区域的标号(1,2,3,。。。) 标记规则 1.初始化标记为0,从左到右,从上到下逐个像素扫描 2.若该点为物体颜色,则继续判断该点的左上、正上,右上及左前点是否都不为物体,则标号加1,若该点为背景色,则跳过。 3.优先级依次为右上点,正上点,左上点及左前点。右上点的优先级最高,左前点的优先级最低。 4.继续遍历图像,若右上点为物体,则该点标记上与右上点相同的值。 5.若右上不为物体,则判断正上点,左上点及左前点 特殊情况:当前点的右上点及左前点为不同标记,正上点和左上点不为物体,则当前点标记同右上点置相同的值,把所有标记与左前点相同的像素值都标记成与右上点同样的值。 如图下面的黑点,如果出现上面的特殊情况,可以这样处理: int sign_count = 0; int sum[5] = {0}; int sign_temp; for(int y = 1; y<120 - 1;y++) for(int x = 1; x<180 - 1;x++) { //只有当像素点为物体,才进行下面的判断。 if(img[y][x] == 0) { //解决特殊情况 if(img[y