Подробнее о поиске краёв

Подробнее об алгоритмах выделения краёв, которые можно попробовать в «Краевых эффектах», — и о том, как каждый метод находит контуры на фото.

Фото с выделением краёв в PictorX: обведённые контуры

Как детекторы находят контуры

Край — это место, где яркость или цвет резко меняются: контур лица, здания или листа на фоне неба. Детекторы просматривают каждый пиксель, сравнивают его с соседями и превращают эти скачки в линии. Методы ниже исходят из одной идеи, но измеряют изменение по-разному, поэтому одно и то же фото может стать тонкими чернильными штрихами, мягким карандашным наброском или толстым контуром формы.

Выделить края

«Выделить края» переводит фото в оттенки серого и применяет два небольших ядра Собела: одно смотрит влево–вправо, другое вверх–вниз. Сочетание √(gx² + gy²) даёт каждому пикселю силу: насколько здесь резкий скачок? Сильные изменения становятся краями. PictorX по умолчанию инвертирует результат — тёмные линии на светлом поле, классический штриховой вид. Прозрачность можно сохранить, чтобы контур лежал поверх того, что за слоем.

Пример «Выделить края» в PictorX: тёмные контуры на светлом фоне

Sobel

Sobel использует те же ядра влево–вправо и вверх–вниз, но измеряет каждый цветовой канал отдельно. Контур сохраняет намёк исходных цветов, а не плоский серый набросок. По сравнению с Canny это более мягкий градиент: у краёв есть толщина и спад, а не двоичная линия в один пиксель. Инверсия включена по умолчанию — удобно для печати.

Пример Sobel в PictorX: цветные градиентные контуры фото

Laplace

Лапласиан смотрит на вторую производную: не только «меняется ли яркость?», но и «достигает ли само изменение пика?» PictorX использует ядро 5×5 с 24 в центре и −1 вокруг. Где край резкий, отклик всплескивает; плоские области остаются около нуля. Результат инвертируется. Laplace чаще Sobel ловит мелкую текстуру — ткань, волосы, листву — и может выглядеть более шумным.

Пример Laplace в PictorX: тонкие текстурные контуры фото

Canny

Canny — конвейер, а не одно ядро. Фото переводится в серое и размывается, чтобы шум не стал ложными краями. Шаг Sobel находит силу и направление градиента. Подавление немаксимумов оставляет только гребень каждого края, сужая широкие градиенты до линии в один пиксель. Два порога и гистерезис решают, что останется: пиксели выше высокого порога — надёжные края; между низким и высоким остаются только если связаны с надёжным краем. Результат — чистый двоичный штрих. Сильнее размойте, чтобы игнорировать текстуру; поднимите высокий порог, чтобы оставить только самые сильные контуры.

Пример Canny в PictorX: тонкий двоичный штрих с фото

Светящиеся края

«Светящиеся края» — цветной Sobel без инверсии: яркие цветные штрихи на тёмном поле. Каждый канал RGB даёт своё свечение — неоновый контур, а не печатная графика.

XDoG

XDoG (Extended Difference of Gaussians) сравнивает два размытия одного фото: чуть более узкое и более широкое (около 1,6×). Вычитание с весом τ выделяет полосу контраста между этими масштабами — туда, куда в рисунке лёг бы штрих. Порог превращает разницу в тушь. Мягкие штрихи имеют плавный спад (серый карандаш); жёсткие — чёрные или белые. XDoG больше похож на набросок, чем на научную карту краёв.

Пример наброска XDoG в PictorX: карандашные штрихи с фото

Морфологический градиент

Морфологический градиент не использует ядра производных. Он расширяет фото (каждый пиксель становится самым ярким соседом в радиусе) и сужает его (самый тёмный сосед), затем вычитает. Остаётся полоса вокруг каждой формы толщиной с радиус. Это следует силуэту больше, чем мелкой текстуре — удобно, когда нужен жирный контур, а не каждая складка.

Пример морфологического градиента в PictorX: толстые контуры формы с фото

Какой метод выбрать?

Canny — для тонких чистых контуров. «Выделить края» или Sobel — для классического вида «фото в линии» с серым спадом. Laplace — для большей текстуры, «Светящиеся края» — для неона на чёрном, XDoG — для карандаша или туши, морфологический градиент — для более толстых контуров формы. Все варианты можно попробовать на странице «Краевые эффекты».

Часто задаваемые вопросы

Что такое край на фото?

Край — внезапное изменение яркости или цвета, контур. Детекторы измеряют это изменение в каждом пикселе и превращают самые сильные скачки в линии.

Чем Canny отличается от «Выделить края»?

«Выделить края» (и Sobel) дают мягкий градиент силы края. Canny размывает, сужает эти градиенты до гребней в один пиксель и использует два порога, чтобы остались только самые чистые линии.

Почему «Выделить края» инвертирует фото?

По умолчанию края становятся тёмными линиями на светлом поле — привычный штриховой вид. Отключите инверсию для светлых краёв на чёрном.

Какой метод больше всего похож на карандашный набросок?

XDoG. Он сравнивает два размытия и рисует штрихи там, где контраст лежит между этими масштабами — ближе к туши или карандашу, чем к научной карте краёв.

Готовы попробовать?

Откройте PictorX в своем браузере — установка не требуется, для запуска не требуется кредитная карта.

Попробовать краевые эффекты