"Информатика (базовый и углублённый уровни) (в 2 частях)", Поляков К.Ю., Еремин Е.А.
Контур — это граница, которая отделяет объект на растровом изображении от фона. Его выделяют, чтобы описать форму объекта, сравнивать изображения и готовить данные для распознавания. Для построения контура сначала различают пиксели объекта и фона, затем находят пиксели границы. Порядок их обхода зависит от принятого правила соседства, а запись направлений позволяет компактно представить форму.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Контур — граница области изображения, отделяющая объект от фона. На растровом изображении он представлен набором пикселей, расположенных на этой границе, а не непрерывной линией. Такое представление нужно, чтобы алгоритм мог работать с формой объекта как с элементами двумерного массива.
Пиксель контура — пиксель, принадлежащий границе объекта. Его отличают от внутреннего пикселя по соседям: если среди соседних клеток есть фон, пиксель может считаться граничным. Это определение позволяет отделить внешнюю оболочку фигуры от её заполненной середины.
Соседние пиксели — пиксели, соприкасающиеся сторонами либо сторонами и углами. В первом случае говорят о 4-соседстве, во втором — о 8-соседстве. Выбранное правило нужно для проверки, можно ли перейти от одного граничного пикселя к другому: при диагональном соприкосновении разные правила дают разную связность.
Обход контура — последовательный переход от пикселя границы к соседнему пикселю границы. Получается упорядоченный список координат или шагов, описывающий путь вдоль края объекта. Такой порядок нужен, чтобы восстановить контур и проверить, прошёл ли алгоритм всю границу.
Сначала изображение рассматривают как карту пикселей, в которой каждому пикселю приписан класс: объект или фон. Только после этого можно искать границу, потому что без различения этих классов неизвестно, где заканчивается фигура. Граничными считают пиксели объекта, у которых по принятому правилу соседства обнаруживается фон. Например, если объект — заполненный квадрат 3 × 3 пикселя, а учитываются только соседи по сторонам, центральный пиксель будет внутренним, а остальные — граничными.
Чтобы границу можно было пройти без разрывов, заранее фиксируют правило соседства. При 4-соседстве диагонально соприкасающиеся пиксели не связаны, а при 8-соседстве переход между ними разрешён. Поэтому две части, касающиеся только углами, могут восприниматься как отдельные или как соединённые. Смешивать правила во время работы нельзя: тогда алгоритм сначала будет считать одни переходы допустимыми, а затем другие, и связность контура изменится.
Обход начинают с найденного граничного пикселя, который называют начальным. Затем среди допустимых соседей выбирают следующий пиксель границы и повторяют действие, сохраняя порядок переходов. Чтобы не перескакивать на внутренние клетки или фон, на каждом шаге проверяют и принадлежность объекта, и граничный статус кандидата. Удобно отмечать посещённые пиксели: это помогает видеть пройденный путь и не записывать участок повторно.
Для замкнутой границы недостаточно остановиться при первом попадании в начальную точку. Алгоритм может пройти через неё до того, как обойдёт весь контур, если в точке есть несколько допустимых направлений. Поэтому условие завершения связывают не только с координатой, но и с направлением входа, предыдущим шагом или состоянием обхода. Так можно отличить завершённый круг от случайного раннего возвращения и избежать бесконечного повторения одних и тех же переходов.
Вместо хранения всех координат можно записывать направления переходов. Для этого каждому направлению сопоставляют смещение: например, вправо — изменение координаты столбца на 1, влево — на −1. Последовательно применяя смещения к начальной точке, получают пиксели пути; последняя точка замкнутого контура должна совпасть с начальной. Такая цепочка обычно занимает меньше места, чем полная копия изображения, и позволяет сравнивать форму по её границе, хотя результат зависит от начальной точки и принятого правила соседства.
В таблице сопоставлены два способа описания одной границы: хранение пикселей и запись переходов между ними. Пользуйся ею, чтобы выбрать представление под задачу: список координат удобен для проверки самих клеток, а направления — для компактного описания пути. В обоих случаях сначала нужно определить соседство и начальную точку.
| Характеристика | Пиксели контура | Последовательность направлений |
|---|---|---|
| Что хранится | Координаты граничных пикселей | Шаги от одного пикселя к следующему |
| Как задаётся порядок элементов | Пиксели перечисляют в порядке обхода | Порядок направлений задаёт путь |
| Объём представления | Нужно хранить координаты каждого пикселя | Хранят начальную точку и направления |
| Как восстанавливается форма | Отмечают сохранённые координаты на сетке | К начальной точке последовательно применяют смещения |
| Чувствительность к выбору соседства | Меняется набор связанных граничных пикселей | Меняется набор допустимых направлений |
Задача 1. На бинарном изображении объект занимает квадрат 3 × 3 пикселя. Определите, какие пиксели относятся к контуру, если соседями считаются только пиксели, соприкасающиеся сторонами. Бинарное изображение означает, что каждый пиксель относится либо к объекту, либо к фону. Решим задачу, проверяя, есть ли у пикселя объекта сосед-фон.
Ответ: контур образуют восемь пикселей внешнего кольца; центральный пиксель в него не входит. Если бы правило соседства включало диагонали, проверку нужно было бы выполнить заново, поскольку список соседей каждого пикселя стал бы шире.
Задача 2. В небольшом фрагменте четыре граничных пикселя образуют квадрат: (1, 1), (1, 2), (2, 2), (2, 1). Начальный пиксель — (1, 1), обход идёт по часовой стрелке, диагональные переходы не используются. Нужно записать порядок обхода и проследить направление на каждом шаге. Координаты здесь записаны как (строка, столбец).
Ответ: порядок пикселей — (1, 1), (2, 1), (2, 2), (1, 2), затем возврат в (1, 1). При реальном обходе полезно отмечать посещённые точки и направление входа: это помогает не принять повторный заход за новый участок и не потерять нужное направление.
Задача 3. Для замкнутого контура из точки (4, 5) записаны направления: вправо, вниз, влево, вверх. Восстановите точки пути и проверьте, завершён ли обход. Для простоты каждому направлению соответствует переход на одну клетку, а координаты записаны как (строка, столбец). Следовательно, движение вниз увеличивает строку, а движение вправо — столбец.
Ответ: путь проходит через (4, 5), (4, 6), (5, 6), (5, 5) и возвращается в (4, 5). Совпадение конечной и начальной точек подтверждает замыкание для заданного простого контура, но в более сложном алгоритме также проверяют, что обход не остановился раньше времени.
Считать контуром все пиксели объекта. Так делают, потому что на маленьком изображении внутренние клетки легко принять за часть края. Но контур включает только граничные пиксели, а заполненная середина остаётся областью объекта. Проверь себя: найди у каждой клетки соседей по принятому правилу и исключи клетки, окружённые объектом.
Менять правило соседства во время обхода. Это кажется удобным, когда алгоритм застревает на диагональном участке, однако из-за смены правила переходы начинают означать разное. В итоге граница может разделиться или перейти на другой участок. Проверь себя: запиши заранее, учитываются ли только стороны или ещё и углы, и применяй это правило на каждом шаге.
Останавливать обход при первом возвращении к началу. Такой способ прост, но точка может встретиться до того, как пройден весь контур. Для проверки учитывай не только координату, но и направление движения или состояние алгоритма. Сверь также, что все нужные участки пройдены, а не повторяется короткая часть пути.
Повторно посещать пиксели без проверки. Повтор иногда выглядит как допустимый шаг, особенно если у клетки несколько соседей, но без контроля можно бесконечно ходить по одному фрагменту. Отмечай посещённые пиксели или сохраняй последовательность переходов. Если список снова повторяет один и тот же цикл, проверь выбор следующего соседа и условие остановки.
Для работы с контуром нужно понимать, как растровое изображение представляется двумерным массивом: тогда пиксели можно находить по строке и столбцу. Также пригодятся условия и циклы, потому что алгоритм проверяет соседей и повторяет шаги обхода. Обход клеток связан с темами алгоритмов поиска по графу, где пиксели выступают вершинами, а разрешённые переходы — связями. Контуры применяют при распознавании изображений, анализе формы объектов и подготовке данных для компьютерного зрения.
Чем контур отличается от всей области объекта?
Область объекта включает все его пиксели: и внутренние, и граничные. Контур состоит только из пикселей на границе между объектом и фоном. Поэтому у сплошной фигуры внутренние пиксели в контур не входят.
Почему при выделении контура важно определить соседство пикселей?
От правила соседства зависит, какие пиксели считаются связанными и какие из них распознаются как граничные. При диагональном касании объекта и фона правила «по сторонам» и «по сторонам и углам» могут дать разные результаты. Правило нужно выбрать заранее и применять одинаково.
Как выбрать начальный пиксель для обхода?
Начать можно с любого найденного граничного пикселя, например с самого верхнего, а среди таких — самого левого. Удобный выбор помогает воспроизводить обход и сравнивать результаты. Начальную точку нужно записать, чтобы затем проверять замыкание контура.
Как понять, что обход замкнутого контура завершён?
Нужно вернуться к начальному пикселю и проверить направление, с которого обход начинался или в каком состоянии находился алгоритм. Одного возвращения недостаточно: по пути можно зайти в начальную точку раньше, чем пройдена вся граница. Точное условие завершения задают вместе с правилом выбора следующего пикселя.
Можно ли представить контур не списком пикселей, а последовательностью направлений?
Да. Если известна начальная точка, каждое направление задаёт переход к следующему пикселю, поэтому вся цепочка восстанавливает контур. Такая запись компактна, но зависит от выбранного набора направлений и правила соседства.
§ 65. Контуры