式中,
p(i,j)是图像在(i,j)处的灰度值;w(i,j)是灰度值 p(i,j)的权重系
数,一般取
w(ij)=1.0。
(
3)计算新阈值
(
4)若 ,程序结束,得到最后的 即为最佳阈值 T,否则,
返回步骤(
2)。
2.4 图像特征与分析
2.4.1 边界提取
根据边界的定义,二值图像边界提取的算法非常简单,就是掏空内部点。所谓内部点就
是其
8-邻域的全部点都属于这个区域的点。所以,如果原图中有一点为黑,且它的 8-邻域
点全部为黑色时,则判定该点为内部点,从而将该点修改为白色背景点。
【
5】工件进行边界
检测后的图像如图
9 所示。
图
9 目标工件及工件边缘检测结果
2.4.2 轮廓跟踪
轮廓跟踪算法步骤如下:
1)按自下而上从左到右的顺序搜索,找到第一个值为 1 的点。它就是最左下方的边界
点,记为
A。
2)序号 k=0.以 A 为起点,检查 A 的 Director[k]方向的下一个像素点的值,如果其值为
1,则它为边界点,将此点存入边界点组,并设置 k=(k-2)mod8,以此点为起点在方向
Director[k]继续搜索边界点,否则,k=(k+1)mod8,搜索 Director[k]方向的点。
3)若搜索到的点等于起点 A,则程序结束。
2.4.3 区域形心位置
物体的重心坐标
可用下式计算
对于二值图像,灰度只有
0 和 1,
重心就是形心。如下图
10 所示。
图
10 目标原件及形心结果示意图
如下是定位形心的部分编写程序:
// 循环变量
int i, j;
m00 = 0; m10 = 0; m01 = 0;
//计算 0-1 阶矩
for (j = 0; j < ih; j++)
{
for (i = 0; i < iw; i++)
{
if (bw[i, j] == 0) continue;
//计算 0 阶矩
m00 += bw[i, j];
//计算 1 阶矩
m10 += i * bw[i, j];
m01 += j * bw[i, j];
}
}
//计算形心坐标
centerxy[0] = (int)(m10 / m00);