В статье представлены четыре самых распространённых алгоритма обнаружения контуров.
Первые два, а именно алгоритм трассировки квадратов и трассировка окрестностей Мура, просты в реализации, а потому часто применяются для определения контура заданного паттерна. К сожалению, у обоих алгоритмов есть несколько слабых мест, что приводит к
невозможности обнаружения контура большого класса паттернов из-за их особого вида смежности.
Данные алгоритмы будут игнорировать все
«дырки» в паттерне. Например, если у нас есть паттерн, подобный показанному на
Рисунке 1, то обнаруженный алгоритмами контур будет похож на показанный на
Рисунке 2 (синими пикселями обозначен контур). В некоторых областях применения это вполне допустимо, но в других областях, например, в распознавании символов, требуется обнаружение внутренних частей паттерна для нахождения всех пробелов, отличающих конкретный символ. (На
Рисунке 3 показан «полный» контур паттерна.)
Следовательно, для получения полного контура сначала необходимо использовать алгоритм
«поиска дырок», определяющий отверстия в заданном паттерне, а затем применить к каждому отверстию алгоритм обнаружения контуров.