Как стать автором
Обновить

#3 Нейронные сети для начинающих. Работа с изображениями в OpenCV. Алгоритм Canny Edge Detector

Время на прочтение11 мин
Количество просмотров17K
Всего голосов 27: ↑25 и ↓2+35
Комментарии29

Комментарии 29

  1. Преобразование изображения в оттенки серого.

  2. Уменьшение размерности изображения (в пикселях) в 4 раза.

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

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

И да, третий алгоритм наверняка реализуется без нейронных сетей.

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

поэтому в этой и предыдущих статьях я стараюсь осветить именно нейросетевой подход к решению

Но в этой статье же нет нейронных сетей.

Алгоритм Canny Edge Detector можно отнести к группе алгоритмов машинного обучения и машинного зрения в частности

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

Но речь не об этом. Я лишь хотел сказать, что нейронных сетей в этой конкретной статье нет.

а что такое нейросетевой подход?

Нейросетевой подход в моём понимании это подход к решению задачи с применением нейронных сетей

Всё так. В этой статье нейронных сетей нет.

Здравствуйте, позвольте не согласиться с Вашим высказыванием, алгоритм Canny Edge Detector является одним из алгоритмов машинного обучения и машинного зрения в частности, так что я не совсем согласен с Вами. К тому же в названии статьи чётко указано, что здесь речь идёт об аспектах обработки изображения в OpenCV, а так же про сам алгоритм Canny Edge Detector. Данная статья входит в цикл статей про нейронные сети и даже если Вы не усмотрели здесь нейросетевого подтекст, то хочу Вас заверить, что в таком случае данный материал можно квалифицировать как теоретическую основу для изучения и базового погружения в мир нейронных сетей

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

Единственное, что я хотел сказать, это то, что в этой конкретной статье нет ни нейронных сетей, ни машинного обучения. Детектор границ Кэнни — это не машинное обучение. В противном случае, что именно в нём обучается или что он обучает?

Да Вы правы, конкретно алгоритм под собой не имеет нейросетей, он применяется при решении некоторых задач для машинного зрения

От простой разницы между компонентами цвета до вейвлет фильтра можно вычислять контуры с разной степенью качества, детализации и отсеивания шумов. Причем тут нейронные сети?

Давайте теперь ДКТ называть нейронной сетью.

Здравствуйте, что конкретно Вы понимаете под ДКТ?

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

Здравствуйте, что конкретно Вы понимаете под ДКТ?

Очевидно, имеется в виду DCT, то есть дискретное косинус-преобразование.

Конечно же DCT нельзя назвать нейронной сетью, здесь я с Вами полностью согласен, но это математический модуль, который как и алгоритм Canny Edge Detector применяется в нейронных сетях

алгоритм Canny Edge Detector применяется в нейронных сетях

Как часть нейронной сети именно детектор Кэнни я, кстати, не припомню. Хотя, скажем, есть много работ, когда использовали фильтры Габора.

Кроме как на входе этот детектор особо поставить больше некуда (впрочем, модели бывают разные, может кто-то и приспособил для обработки feature maps, хотя я большого смысла в этом не вижу), так что я б отнёс его скорее к методам преобработки данных.

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

  1. https://osf.io/yrmk5/download

  2. https://www.sciencedirect.com/science/article/pii/S2212017312004136?ref=pdf_download&fr=RR-2&rr=760529f4dc529d69

Спасибо за дискуссию)

Увы, эти статьи не про применение детектора. В первой описывается реализация на ПЛИС, а во второй модификация детектора.

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

Да, Вы правы, спасибо за замечание

Конечно же DCT нельзя назвать нейронной сетью

Условно можно, и я привел ее пример именно из-за параллелей. Поскольку нейронная сеть после обучения становится своеобразным фильтром подобным в том числе DCT. Но дискретное косинусное преобразование получено иным путем и не имеет излишек или нехватки узлов (и много чего еще "ненужного"), также как и методы описываемые в вашей статье. Нейронная сеть это все-таки что-то более обобщенное и гибкое.

Я думаю ваша вводная часть должна раскрыть то, что данная статья посвящена вспомогательной математике.

Спасибо за замечание, учту в дальнейших работах)

Если уж зашла речь про преобразование цветовых пространств, то нужно обязательно упомянуть про гамма-коррекцию: поскольку дефолтное пространство sRGB нелинейно, перед любыми манипуляциями с цветом проводится процедура gamma expansion, а по окончании преобразований - gamma compression.

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

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

И где тут нейронные сети? Все что вы описали, OpenCV делает без них.

В данной статье речь идёт об некоторых аспектах обработки изображения, а также описание и применение алгоритма Canny Edge Detector, в данном случае это аспекты нейронных сетей и машинного зрения

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

В библиотеке OpenCV для этого существует функция resize. У этой функции, в свою очередь, есть три метода: INTER_CUBIC, INTER_LINEAR и INTER_AREA.

Dushnila mode enabled
Если мне не изменяет память, методы есть у класса, но никак не у функций.

Dushnila mode disabled

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

Под производными в данном контексте подразумевают обычные горизонтальные и вертикальные свертки типа (-0,5 | 0 | 0,5) для первой, и (1 | - 2 | 1) для второй. По ним считается и градиент и магнитуда.

Подавление немаксимумов - по округленому (до 45 градусов) направлению градиента берется пиксель и два соседних. Если его значение большее из 3-х - пиксель остается, нет - удаляется.

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

Зарегистрируйтесь на Хабре, чтобы оставить комментарий