问题:目前分割得到的圆形边缘和理想边缘相比,部分向外偏离,需要向内收缩 探索方法1: 假设在理想情况下,圆形物体的掩膜是绝对正确的。此时可以遍历当前的边缘点,判断每个边缘点的两侧的掩膜标记是否不同。如果两侧的邻域点掩膜都为0,说明该边缘点偏外,需要向内收缩,使用最近的掩膜点来替换掉越界了的点。
探索方法2:
在前一种方法中,使用最近的掩膜点来替换掉越界了的点,实践效果不理想,下面改进的方法是
1、 不再考虑前后两个弧之间的光滑过渡问题,对每段弧单独处理;
2、从中心开始,尝试向该点移动,第一次碰到掩膜边界时停止移动,用该点来替换。
//找出两侧都是0的点,说明此处需要收缩
while(i < vecCurContour.size()-1)
{
Pt2D curPos(vecCurContour[i]);
Pt2D nextPos(vecCurContour[i+1]);
int diffx=nextPos.x-curPos.x;
int diffy=nextPos.y-curPos.y;
Pt2D sideA={curPos.x+diffy, curPos.y-diffx};
Pt2D sideB={curPos.x-diffy, <