поиске краёв

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

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

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

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

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

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

Альбрехт Дюрер, «Носорог», 1515, ксилография, построенная из контуров
Альбрехт Дюрер, «Носорог», 1515, ксилография, построенная из контуров

Sobel

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

Лист на фоне неба, резкая граница света и тени
Лист на фоне неба, резкая граница света и тени

Laplace

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

Портрет Пьер-Симон Лаплас
Портрет Пьер-Симон Лаплас

Canny

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

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

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

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

XDoG

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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