Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

Алгоритмы [ править ]

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

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

Алгоритм трассировки квадратов [ править ]

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

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

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

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 ) // Найден первый белый пиксель  SquareTrace ( new  Point ( i ,  j )); }public  void  SquareTrace ( начало точки  ) { HashSet < Point > BorderPoints = new HashSet < Point > (); // Используйте HashSet для предотвращения двойных вхождений // Мы нашли по крайней мере одну точку границы пикселя . Добавить ( начало );         // Первый попадающийся вам пиксель по определению белый, поэтому идем влево.  // Наше начальное направление было слева направо, поэтому (1, 0)  Point  nextStep  =  GoLeft ( new  Point ( 1 ,  0 ));  Следующий пункт  = начало + следующий шаг ; while ( next ! = start ) { // Мы нашли черную ячейку, поэтому идем вправо и не добавляем эту ячейку в наш HashSet if ( image [ next . x , next . y ]              ==  0 )  {  next  =  next  -  nextStep  nextStep  =  GoRight ( nextStep );  следующий  =  следующий  +  следующий шаг ;  }  // В качестве альтернативы мы нашли белую ячейку, мы добавляем ее в наш HashSet  else  {  BorderPoints . Добавить ( далее );  nextStep  =  GoLeft (следующий шаг );  следующий  =  следующий  +  следующий шаг ;  }  } }частная  точка  GoLeft ( Point  p )  =>  новая  точка ( p . y ,  - p . x ); частная  точка  GoRight ( Point  p )  =>  new  Point (- p . y ,  p . x );

См. Также [ править ]

Ссылки [ править ]

  1. ^ Алгоритмы отслеживания контуров
  2. ^ Abeer Джордж Ghuneim: алгоритм квадрата трассировки
  3. ^ Abeer George Ghuneim: Алгоритм радиальной развертки
  4. ^ Abeer Джордж Ghuneim: Тео Pavlidis' Алгоритм
  5. ^ Трассировка внешней и внутренней границы объекта в двоичных изображениях на основе векторной алгебры, Журнал достижений инженерных наук, том 3, выпуск 1, январь – июнь 2010 г., PP 57–70 [1]
  6. ^ Сегментация проведенной границы на основе теории графов на открытые и закрытые подсекции, Компьютерное зрение и понимание изображений, Том 115, выпуск 11, ноябрь 2011 г., страницы 1552–1558 [2]