• Выделение границ изображения


    Алгоритмы выделения контуров изображений / Хабр

    В свете недавних статей об обработке изображений я хотел бы немного рассказать об алгоритмах выделения контуров: методы Робертса, Превитта и Собеля (эти методы взяты для рассмотрения как самые известные и часто используемые).

    Не буду докучать объемной теорией, а ограничусь лишь минимальными сведениями, необходимыми для понимания сути алгоритмов.
    Все указанные методы основываются на одном из базовых свойств сигнала яркости – разрывности. Наиболее общим способом поиска разрывов является обработка изображения с помощью скользящей маски, называемой также фильтром, ядром, окном или шаблоном, которая представляет собой некую квадратную матрицу, соответствующую указанной группе пикселей исходного изображения. Элементы матрицы принято называть коэффициентами. Оперирование такой матрицей в каких-либо локальных преобразованиях называется фильтрацией или пространственной фильтрацией.

    Схема пространственной фильтрации иллюстрируется на рисунке ниже (см. рисунок 1).


    Рисунок 1. Схема пространственной фильтрации

    Процесс основан на простом перемещении маски фильтра от точки к точке изображения; в каждой точке (x,y) отклик фильтра вычисляется с использованием предварительно заданных связей. В случае линейной пространственной фильтрации отклик задается суммой произведения коэффициентов фильтра на соответствующие значения пикселей в области, покрытой маской фильтра. Для маски 3х3 элемента, показанной на рисунке 1, результат (отклик) R линейной фильтрации в точке (x,y) изображения составит:

    (1.1)

    что, как видно, есть сумма произведений коэффициентов маски на значения пикселей непосредственно под маской. В частности заметим, что коэффициент w(0,0) стоит при значении f(x,y), указывая тем самым, что маска центрирована в точке (x,y).

    При обнаружении перепадов яркости используются дискретные аналоги производных первого и второго порядка. Для простоты изложения будут рассмотрены одномерные производные.

    Первая производная одномерной функции f(x) определяется как разность значений соседних элементов:

    (1.2)

    Здесь использована запись в виде частной производной для того, чтобы сохранить те же обозначения в случае двух переменных f(x,y), где придется иметь дело с частными производными по двум пространственным осям. Использование частной производной не меняет существа рассмотрения.

    Аналогично, вторая производная определяется как разность соседних значений первой производной:

    (1.3)

    Вычисление первой производной цифрового изображения основано на различных дискретных приближениях двумерного градиента. По определению, градиент изображения f(x,y) в точке (x,y) — это вектор [2]:

    (1.4)

    Как известно из курса математического анализа, направление вектора градиента совпадает с направлением максимальной скорости изменения функции f в точке (x,y) [2].
    Важную роль при обнаружении контуров играет модуль этого вектора, который обозначается ∇f и равен

    (1.5)

    Эта величина равна значению максимальной скорости изменения функции f в точке (x,y), причем максимум достигается в направлении вектора ∇f. Величину ∇f также часто называют градиентом.

    Направление вектора градиента также является важной характеристикой. Обозначим α(x,y) угол между направлением вектора ∇f в точке (x,y) и осью x. Как известно из математического анализа [2],

    (1.6)

    Отсюда легко найти направление контура в точке (x,y), которое перпендикулярно направлению вектора градиента в этой точке. А вычислить градиент изображения можно, вычислив величины частных производных ∂f/∂x и ∂f/∂y для каждой точки.

    Оператор Робертса

    Пусть область 3х3, показанная на рисунке ниже (см. рис. 2), представляет собой значения яркости в окрестности некоторого элемента изображения.


    Рисунок 2. Окрестность 3х3 внутри изображения

    Один из простейших способов нахождения первых частных производных в точке состоит в применении следующего перекрестного градиентного оператора Робертса [1]:

    (1.7)
    и
    (1.8)

    Эти производные могут быть реализованы путем обработки всего изображения с помощью оператора, описываемого масками на рисунке 3, используя процедуру фильтрации, описанную ранее.


    Рисунок 3. Маски оператора Робертса

    Реализация масок размерами 2х2 не очень удобна, т.к. у них нет четко выраженного центрального элемента, что существенно отражается на результате выполнения фильтрации. Но этот «минус» порождает очень полезное свойство данного алгоритма – высокую скорость обработки изображения.

    Оператор Превитта

    Оператор Превитта, так же как и оператор Робертса, оперирует с областью изображения 3х3, представленной на рисунке 2, только использование такой маски задается другими выражениями:

    (1.9)
    и
    (1.10)

    В этих формулах разность между суммами по верхней и нижней строкам окрестности 3х3 является приближенным значением производной по оси x, а разность между суммами по первому и последнему столбцам этой окрестности – производной по оси y. Для реализации этих формул используется оператор, описываемый масками на рисунке 4, который называется оператором Превитта.


    Рисунок 4. Маски оператора Превитта

    Оператор Собеля

    Оператор Собеля тоже использует область изображения 3х3, отображенную на рисунке 2. Он довольно похож на оператор Превитта, а видоизменение заключается в использовании весового коэффициента 2 для средних элементов:

    (1.11)
    и
    (1.12)

    Это увеличенное значение используется для уменьшения эффекта сглаживания за счет придания большего веса средним точкам.

    Маски, используемые оператором Собеля, отображены на рисунке ниже (см. рис. 5).


    Рисунок 5. Маски оператора Собеля

    Рассмотренные выше маски применяются для получения составляющих градиента . Для вычисления величины градиента эти составляющие необходимо использовать совместно:

    (1.14)
    или
    (1.15)

    Ну и в завершении продемонстрирую результаты обработки изображений (см. рисунки 6-8) описанными методами.


    Рисунок 6. Исходное изображение №1


    Рисунок 7. Исходное изображение №2


    Рисунок 8. Исходное изображение №3

    Результаты обработки методами Робертса, Превитта и Собеля продемонстрированы ниже:



    Рисунок 9. Исходные изображения после обработки методом Робертса




    Рисунок 10. Исходные изображения после обработки методом Превитта




    Рисунок 11. Исходные изображения после обработки методом Собеля

    Список литературы

    1. Р. Гонсалес, Р. Вудс Цифровая обработка изображений — М: Техносфера, 2005 – 1007с
    2. Кудрявцев Л.В. Краткий курс математического анализа – M.: Наука, 1989 – 736с
    3. Анисимов Б.В. Распознавание и цифровая обработка изображений – М.: Высш. школа, 1983 – 295с

    4,13. Граница

    4.13. Граница

    Рисунок 16.38. Пример создания границы из выделения

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

    4.13.1. Активация команды

    Вы можете получить доступ к этой команде из меню изображения через →.

    Эта команда неактивна, если нет выделения.

    Для использования этой команды необходимо соблюдать два условия:

    • Изображение должно иметь альфа-канал.

    • Исходное изображение должно быть создано с В инструменте выделения отмечена опция «Сглаживание». что используется.

    4.13.2. Описание диалогового окна «Граница»

    Рисунок 16.39. Диалоговое окно «Граница»


    Выбор границы по

    Введите ширину выделенной границы в поле. По умолчанию единицы - пиксели, но вы также можете выбрать единицы с помощью выпадающее меню.

    Стиль границы
    • Hard : эта опция не работает продолжайте сглаживание.Это может быть полезно в некоторых случаях.

    • Smooth : эта опция сохраняет сглаживание. Обратите внимание, что «Smooth» не создает любое антиалиасинг. Вот почему необходимо добавить сглаживание, когда создание исходного выделения. Этот вариант самый лучший.

    • Пернатый : этот вариант подходит то же, что и «Hard», но вместо получившаяся граница полностью выделена, и она исчезает наружу.В результат не очень хороший; если хочешь бордюр с перьями, лучше использовать один из других режимов, а затем растушевать результат. Это связано с историей.

    Рисунок 16.40. Сравнение стилей границ


    Выбранные области продолжаются за пределами изображения

    Это была опция «Зафиксировать выделение по краям изображения».это функция не изменилась.

    Если этот параметр включен, край (обычно прямоугольника) выделение остается неизменным, если оно выровнено по краю образ; вокруг него не будет создано новое выделение.

    Рисунок 16.41. Выберите границу с и без «Продолжить выделенные области. вне изображения »


    .

    border-image - Веб-технологии для разработчиков

    Свойство CSS border-image рисует изображение вокруг заданного элемента. Он заменяет обычную границу элемента.

    Исходный код этого интерактивного примера хранится в репозитории GitHub. Если вы хотите внести свой вклад в проект интерактивных примеров, клонируйте https://github.com/mdn/interactive-examples и отправьте нам запрос на перенос.

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

    Составляющие объекты

    Это свойство является сокращением для следующих свойств CSS:

    Синтаксис

     / * источник | ломтик */ граница изображения: линейный градиент (красный, синий) 27; / * источник | ломтик | повторение */ граница-изображение: url ("/ images / border.png") 27 пробел; / * источник | ломтик | ширина * / граница изображения: линейный градиент (красный, синий) 27/35 пикселей; / * источник | ломтик | ширина | начало | повторение */ border-image: url ("/ images / border.png ") 27 23 / 50px 30px / 1rem круглое пространство; 

    Для свойства border-image можно указать от одного до пяти значений, перечисленных ниже.

    Значения

    <'border-image-source'>
    Исходное изображение. См. border-image-source .
    <'border-image-slice'>
    Размеры для разделения исходного изображения на области. Можно указать до четырех значений.См. border-image-slice .
    <'border-image-width'>
    Ширина изображения границы. Можно указать до четырех значений. См. border-image-width .
    <'border-image-outset'>
    Расстояние изображения границы от внешнего края элемента. Можно указать до четырех значений. См. border-image-outset .
    <'border-image-repeat'>
    Определяет, как края исходного изображения корректируются в соответствии с размерами изображения границы.Можно указать до двух значений. См. border-image-repeat .

    Проблемы доступности

    Вспомогательные технологии не могут анализировать изображения границ. Если изображение содержит информацию, критически важную для понимания общего назначения страницы, лучше описать ее семантически в документе.

    Формальное определение

    Формальный синтаксис

     <'border-image-source'> || <'border-image-slice'> [/ <'border-image-width'> | / <'ширина-изображения-границы'>? / <'border-image-outset'>]? || <'border-image-repeat'> 

    Примеры

    Растровое изображение

    В этом примере мы применим ромбовидный узор к границам элемента.Источником изображения границы является файл .png размером 81 на 81 пиксель с тремя ромбиками, расположенными вертикально и горизонтально:

    HTML
     
    Этот элемент окружен рамкой на основе растрового изображения!
    CSS

    Чтобы соответствовать размеру одного ромба, мы будем использовать значение 81, разделенное на 3, или 27 , для разделения изображения на угловые и краевые области. Чтобы центрировать изображение границы по краю фона элемента, мы сделаем начальные значения равными половине значений ширины.Наконец, повторение значения с округлением сделает граничные срезы равномерно, то есть без обрезки или пробелов.

     #bitmap { ширина: 200 пикселей; цвет фона: #ffa; граница: сплошной оранжевый 36 пикселей; маржа: 30 пикселей; отступ: 10 пикселей; граница-изображение: url ("https://mdn.mozillademos.org/files/4127/border.png") / * источник * / 27 / / * срез * / 36px 28px 18px 8px / / * ширина * / 18px 14px 9px 4px / * начало * / круглый; /* повторение */ } 
    Результат

    Градиент

    HTML
     
    Этот элемент окружен изображением границы на основе градиента!
    CSS
     #gradient { ширина: 200 пикселей; граница: сплошная 30 пикселей; граница изображения: повторяющийся линейный градиент (45 градусов, # f33, # 3bf, # f33 30px) 60; отступ: 20 пикселей; } 
    Результат

    Технические характеристики

    Совместимость с браузером

    Обновите данные совместимости на GitHub Chrome для Android Chrome для Android Chrome для Android
    Desktop Mobile
    Chrome Edge Firefox Internet Explorer Opera Safari Android 9013 Chrome для Android Opera для Android Safari на iOS Samsung Internet
    border-image Chrome Полная поддержка 16
    Полная поддержка 16
    Полная поддержка 7
    С префиксом Реализовано с префиксом поставщика: -webkit-
    Edge Полная поддержка 12
    Полная поддержка 12
    Полная поддержка 12
    С префиксом Реализовано с префиксом поставщика: -webkit-
    Firefox Полная поддержка 15
    Полная поддержка 15
    Примечания Маленькие SVG-файлы растягиваются неправильно, поскольку проценты в border-image-slice вычисляются как целые числа, а не как числа с плавающей запятой (ошибка 1284797).
    Примечания До Firefox 47 файлы SVG без области просмотра не нарезались правильно (ошибка 619500).
    Примечания Начиная с Firefox 48 до Firefox 49, SVG без области просмотра отображаются так же, как SVG с областью просмотра, но если срезы не равны точно 50%, они неправильно растягиваются (ошибка 1264809).
    Примечания До Firefox 57 проблема сохранялась для SVG без области просмотра при отключенном e10s (ошибка 1290782).
    Полная поддержка 3.5
    С префиксом Реализовано с префиксом поставщика: -moz-
    Примечания Более ранняя версия спецификации была реализована с префиксом в версиях Firefox до 15.
    Полная поддержка 44
    С префиксом Реализовано с префиксом поставщика: -webkit-
    Отключено Начиная с версии 44: эта функция стоит за макетом .css.prefixes.webkit (необходимо установить , true ). Чтобы изменить настройки в Firefox, посетите about: config.
    IE Полная поддержка 11 Опера Полная поддержка 11
    Полная поддержка 11
    Никакой поддержки 10,5 - 15
    С префиксом Реализовано с префиксом поставщика: -o-
    Safari Полная поддержка 6
    Полная поддержка 6
    Полная поддержка 3
    С префиксом Реализовано с префиксом поставщика: -webkit-
    WebView Android Полная поддержка ≤37
    Полная поддержка ≤37
    Полная поддержка 2
    С префиксом Реализовано с префиксом поставщика: -webkit-
    Chrome Android Полная поддержка 18
    Полная поддержка 18
    Полная поддержка 18
    С префиксом Реализовано с префиксом поставщика: -webkit-
    Firefox Android Полная поддержка 15
    Полная поддержка 15
    Примечания Маленькие SVG-файлы растягиваются неправильно, поскольку проценты в border-image-slice вычисляются как целые числа, а не как числа с плавающей запятой (ошибка 1284797).
    Примечания До Firefox 47 файлы SVG без области просмотра не нарезались правильно (ошибка 619500).
    Примечания Начиная с Firefox 48 до Firefox 49, SVG без области просмотра отображаются так же, как SVG с областью просмотра, но если срезы не равны точно 50%, они неправильно растягиваются (ошибка 1264809).
    Примечания До Firefox 57 проблема сохранялась для SVG без области просмотра при отключенном e10s (ошибка 1290782).
    Полная поддержка 4
    С префиксом Реализовано с префиксом поставщика: -moz-
    Примечания Более ранняя версия спецификации была реализована с префиксом в версиях Firefox до 15.
    Полная поддержка 44
    С префиксом Реализовано с префиксом поставщика: -webkit-
    Отключено Начиная с версии 44: эта функция стоит за предпочтением layout.css.prefixes.webkit (необходимо установить на true ). Чтобы изменить настройки в Firefox, посетите about: config.
    Opera Android Полная поддержка 11
    Полная поддержка 11
    Никакой поддержки 11–14
    С префиксом Реализовано с префиксом поставщика: -o-
    Safari iOS Полная поддержка 6
    Полная поддержка 6
    Полная поддержка 3.2
    С префиксом Реализовано с префиксом поставщика: -webkit-
    Samsung Internet Android Полная поддержка 1,0
    Полная поддержка 1,0
    Полная поддержка 1.0
    С префиксом Реализовано с префиксом поставщика: -webkit-
    fill Chrome Полная поддержка 16 Кромка Полная поддержка 12 Firefox Полная поддержка 15 IE Полная поддержка 11 Опера Полная поддержка 15 Safari Полная поддержка 6 WebView Android Полная поддержка ≤37 Chrome Android Полная поддержка 18 Firefox Android Полная поддержка 15 Опера Android Полная поддержка 14 Safari iOS Полная поддержка 6 Samsung Internet Android Полная поддержка 1.0
    <градиент> Хром Полная поддержка 7 Кромка Полная поддержка 12 Firefox Полная поддержка 29 IE Полная поддержка 11 Опера Полная поддержка 15 Safari Полная поддержка 4 WebView Android Полная поддержка ≤37 Chrome Android Полная поддержка 18 Firefox Android Полная поддержка 29 Opera Android Полная поддержка 14 Safari iOS Полная поддержка 3.2 Samsung Интернет Android Полная поддержка 1.0
    дополнительно Chrome Полная поддержка 16 Кромка Полная поддержка 12 Firefox Полная поддержка 15 IE Полная поддержка 11 Опера Полная поддержка 15 Safari Полная поддержка 6 WebView Android Полная поддержка ≤37 Chrome Android Полная поддержка 18 Firefox Android Полная поддержка 15 Опера Android Полная поддержка 14 Safari iOS Полная поддержка 6 Samsung Internet Android Полная поддержка 1.0

    Условные обозначения

    Полная поддержка
    Полная поддержка
    См. Примечания по реализации.
    См. Примечания по реализации.
    Пользователь должен явно включить эту функцию.
    Пользователь должен явно включить эту функцию.
    Для использования требуется префикс поставщика или другое имя.
    Для использования требуется префикс поставщика или другое имя.

    См. Также

    .

    4,13. Граница

    4.13. Граница

    Рисунок 16.34. Пример создания границы из выделения

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

    4.13.1. Активация команды

    Вы можете получить доступ к этой команде из меню изображения через →.

    4.13.2. Описание диалогового окна «Граница»

    Рисунок 16.35. Диалоговое окно «Граница»


    Выбор границы по

    Введите ширину выделенной границы в поле. По умолчанию единицы - пиксели, но вы также можете выбрать единицы с помощью выпадающее меню.

    Перо границы

    Если этот параметр отмечен, края выделения будут пернатые.Это создает плавный переход между выделением и его окрестности. Обратите внимание, что вы не можете использовать Параметр "Растушевка краев" инструментов выделения для этого.

    Заблокировать выделение по краям изображения

    Если этот параметр включен, край (обычно прямоугольника) выделение остается неизменным, если оно выровнено по краю образ; вокруг него не будет создано новое выделение.

    Рисунок 16.36. Выберите границу с и без «Прикрепить к изображению» края »


    .

    4,13. Граница

    4.13. Граница

    Рисунок 16.34. Пример создания границы из выделения

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

    4.13.1. Активация команды

    Вы можете получить доступ к этой команде из меню изображения через →.

    4.13.2. Описание диалогового окна «Граница»

    Фигур 16.35. Диалоговое окно «Граница»


    Выбор границы по

    Введите ширину выделенной границы в поле. По умолчанию единицы - пиксели, но вы также можете выбрать единицы с помощью выпадающее меню.

    Перо границы

    Если этот параметр отмечен, края выделения будут пернатые.Это создает плавный переход между выделением и его окрестности. Обратите внимание, что вы не можете использовать Параметр "Растушевка краев" инструментов выделения для этого.

    Заблокировать выделение по краям изображения

    Если этот параметр включен, край (обычно прямоугольника) выделение остается неизменным, если оно выровнено по краю образ; вокруг него не будет создано новое выделение.

    Рисунок 16.36. Выберите границу с и без «Прикрепить к изображению» края »


    .

    Смотрите также

© 2020 nya-shka.ru Дорогие читатели уважайте наш труд, не воруйте контент. Ведь мы стараемся для вас!