Трассировка границ

редактировать

Трассировка границ, также известная как отслеживание контура двоичной цифровой области можно рассматривать как метод сегментации, который идентифицирует граничные пиксели цифровой области. Граничная трассировка - важный первый шаг в анализе этой области.

Содержание
  • 1 Алгоритмы
  • 2 Алгоритм трассировки квадратов
  • 3 См. Также
  • 4 Ссылки
Алгоритмы

Алгоритмы, используемые для трассировки границ:

  • Алгоритм трассировки квадратов
  • Алгоритм трассировки соседа Мура
  • Радиальная развертка
  • Алгоритм Тео Павлидиса
  • Общий подход с использованием векторной алгебры для отслеживания границы можно найти на.
  • Расширение отслеживания границы для сегментации отслеживаемой границы на открытый и закрытый подсекции описано в.
Алгоритм отслеживания квадрата

Алгоритм трассировки квадратов прост, но эффективен. Его поведение полностью зависит от того, находится ли человек на черной или белой клетке (при условии, что белые клетки являются частью формы). Сначала просканируйте слева направо, строка за строкой. При входе в вашу первую белую клетку запускается ядро ​​алгоритма. Он состоит в основном из двух правил:

  • Если вы находитесь в белой ячейке, идите налево.
  • Если вы в черной ячейке, идите вправо.

Имейте в виду, что имеет значение, как вы ввели текущая ячейка, чтобы можно было определить левую и правую.

public void GetBoundary (byte [,] image) {for (int j = 0; j < image.GetLength(1); j++) for (int i = 0; int i < image.GetLength(0); i++) if (image[i, j] == 255) // Found first white pixel SquareTrace(new Point(i, j)); } public void SquareTrace(Point start) { HashSetboundaryPoints = new HashSet (); // Используем HashSet для предотвращения двойных вхождений // Мы нашли как минимум one pixel borderPoints.Add (start); // Первый пиксель, с которым вы столкнетесь, по определению является белым, поэтому мы идем влево. // Наше начальное направление было слева направо, поэтому (1, 0) Point nextStep = GoLeft (new Point (1, 0)); Point next = start + nextStep; while (next! = start) {// Мы нашли черную ячейку, поэтому идем вправо и не добавляем эту ячейку в наш HashSet if (image [next.x, next.y] == 0) {next = next - nextStep nextStep = GoRight (nextStep); next = next + nextStep;} // В качестве альтернативы мы нашли белую ячейку, мы добавляем ее в наш HashSet else {borderPoints.Add (next); nextStep = GoLeft (nextStep); next = next + nextStep;}}} частная точка GoLeft (Point p) =>новая точка (py, -px); частная точка GoRight (Point p) =>новая точка (-py, px);
См. также
Ссылки
Последняя правка сделана 2021-05-13 08:10:03
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте