mrgloom 242 Жалоба Опубликовано June 19, 2015 Необходимо посчитать нормали к дискретному контуру нашел только это 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 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано June 19, 2015 Тут все объясняется: Дифференциальная геометрия Да, нормали используются в змеиных алгоритмах. На рисунке нормали во всех вершинах полигона есть и равны они биссектрисе от нормалей соседних отрезков. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах