Перейти к содержимому
Compvision.ru
mrgloom

Посчитать нормаль к дискретному контуру

Recommended Posts

kNku4.jpg

 

normalContours.png

 

Необходимо посчитать нормали к дискретному контуру

 

нашел только это  

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Тут все объясняется: Дифференциальная геометрия
Да, нормали используются в змеиных алгоритмах.

На рисунке нормали во всех вершинах полигона есть и равны они биссектрисе от нормалей соседних отрезков.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×