Необходимо посчитать нормали к дискретному контуру
нашел только это
http://nmarkou.blogspot.ru/2012/03/contour-refinement.html
почему то на картинке нормали не по всему контуру расположены
это стандартный метод? как он называется?
/// <summary>
/// Calulcate the normal at given point
/// </summary>
/// <param name="_prevPoint">Previous point</param>
/// <param name="_currentPoint">Current point</param>
/// <param name="_nextPoint">Next point</param>
/// <param name="_inOut">In or out flag</param>
/// <returns>Normal at point</returns>
public static PointF NormalAtPoint(
Point _prevPoint,
Point _currentPoint,
Point _nextPoint,
bool _inOut = true)
{
PointF normal;
float dx1 = _currentPoint.X - _prevPoint.X,
dx2 = _nextPoint.X - _currentPoint.X,
dy1 = _currentPoint.Y - _prevPoint.Y,
dy2 = _nextPoint.Y - _currentPoint.Y;
if (_inOut)
normal = new PointF((dy1 + dy2) * 0.5f, -(dx1 + dx2) * 0.5f);
else
normal = new PointF(-(dy1 + dy2) * 0.5f, (dx1 + dx2) * 0.5f);
return NormalizePoint(normal);
}
/// <summary>
/// Normalize a given point so its _noBinsAngle equals to one
/// </summary>
/// <param name="_point">Point to normalize</param>
/// <returns>Normalized point</returns>
public static PointF NormalizePoint(PointF _point)
{
float length = (float)Math.Sqrt(_point.X * _point.X + _point.Y * _point.Y);
if (length > 0.0f)
return new PointF(_point.X / length, _point.Y / length);
return new PointF(0.0f, 0.0f);
}
по идее что то похожее используется в snakes/active contours