Текст
                    А.В. Сашок

КОМПЬЮТЕРНОЕ ЗРЕНИЕ
И НЕЙРОННЫЕ СЕТИ

•	ПРАКТИКА

И <Инфра-Имжемерия»

ББК 32 8133 364 и автоматика им Р М Лейбова» ФГБОУ ВО «ДОНЕЦКИЙ НАЦИОНАЛЬНЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ)! (ДонИТУ) Маренич Константин Николаевич доктор технических наук профессор, заведующий кафедрой «Прикладная математика и искусственный интеллект» ФГБОУ ВО «ДОНЕЦКИЙ НАЦИОНАЛЬНЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ)! (ДонИТУ) Паллиш Владимир Николаевич Сацеок, А. В. С22 Компьютерное зрение и нейронные сети Практика учебное пособие / А В Садкие Москва , Вологда Ияфра-Инженерия, 2025 364 с ип , ISBN 978-5-£720-2706-7 Представляв! собой комплексное руководство, включающее как краткое изложе ние теоретических основ, таки подробное описание практических методов компьютер кого зрения Рассматриваются оси тическая часть учебн т работы с изображениями и видео, > инт ерактивного управления Прак отыми примерами иа языке Python, УДК 004 89 ББК 32 813 ISBN 978 5 9729 2706 7 © Издательство «Цифра Инженерия)! 2025 © Оформление. Издательство «Инфра Ниже
ОГЛАВЛЕНИЕ ВВЕДЕНИЕ _________________________________ 1 ОСНОВЫ КОМПЬЮТЕРНОГО ЗРЕНИЯ...... 11 История развития компьютерного зрения 1 2 Биологические основы цветовоглриятня 1 3 Пиксели и их представление 1 4 Цветовые пространства 1 5 Библиотеки для работы с изображениями OpenCV Практическое задание 2. ОСНОВЫ ОБРАБОТКИ ИЗОБРАЖЕНИЙ И ВИДЕО 2 1 Представление изображений 2 2 Загрузка, отображение и сохранение изображений 2 3 Захват видео с камеры и из файла. 2 4 Операции над пикселями....... 2 5 Основные операции с изображением 2 5 1 Изменение размера изображения 2 5 2 Обрезка изображения 2 5 3 Вращение изображения 2 5 4 Отражение изображения 2 6 Конкатенация изображений Практическое задание ..... 3. МЕТОДЫ ОБРАБОТКИ ИЗОБРАЖЕНИЙ................... 3 1 Преобразование между цветовыми пространствами 3 2 Цветовая коррекция 3 3 Фильтрация цветов и цветовая сегментация 3 4 Инверсия изображения 3 5 Линейное объединение двух изображений 3 6 Вычисления абсолютной разницы изображений 3 7 Преобразот с использованием абсолютных значений и масштабирования 3 8 Бинаризация и пороговая обработка 3 9 Фильтрация 3 91 Основные термины и явления фильтрации 3 92 Принцип фильтрации. 3 93 Ядро фильтра 3 94 Фильтрация без использования ядер свертки нелинейные фильтры 3 95 Практическое применение фильтров 3 10 Нормализация и масштабирование значений пикселей 8 10 10 14 17 26 30 31 31 38 40 43 47 47 51 53 56 58 60 .62 62 65 67 72 75 77 81 83 86 86 88 103 105 122
3 1143®бнаружёяия границ 125 3 112 Обнаружения контуров 128 3 12 Гомография изображений 132 3 13 Вычисление гистограммы тображения 137 3 14 Сегментация изображений 142 Практическое задание 145 4 II HTFP АКТИ ВНОЕ А ТГР А КЛИШЕ В КОМПЬЮТЕРНОМ ЗРЕНИИ___________________ 148 4 1 Общие сведения об интерактивном управлении 148 4 2 Интерактивные окна и виджеты 149 4 3 Слайдеры 152 4 4 События миши 154 Практическое задание 156 5 . ГРАФИЧЕСКИЕ ОТРИСОВКИ В КОМПЬЮТЕРНОМ ЗРЕНИИ . 158 5 1 Графические отрисовки 158 5 2 Отрисовка геометрических фигур . 160 5 2 1 Отрисовка линий ... 161 5 22 Отрисовкапрямоугольника 162 5 2 3 Отрисовка кругов и эллипсов 164 5 24 Отрисовка полигональных фигур 166 5 2 5 Создание холста 168 5 3 Позиционирование геометрических фигур 171 5 4 Динамическая отрисовка прямоугольной области 173 5 5 Добавление текста к изображению 176 Практическое задание 178 6. ОБРАБОТКА ДВИЖУЩИХСЯ ОБЪЕКТОВ......... 6 1 Основы обработки движущихся объектов 6 2 Предварительная обработка изображений 6 3 Выбор области интереса 6 4 Фильтр Калмана 6 41 Принцип работы фильтра Калмана 6 42 Математическая модель фильтра Калмана ..180 180 181 184 192 для отслеживания 6 4 3 Практическое применение фильтра Калмана 6 44 Расширенный фильтр Калмана для нелинейных моделей 6 5 Трекинг движущихся объектов 6 6 Анализ траекторий движущихся объектов Практическое задание 195 200 207 208 215 219 7 РАСПОЗНАВАНИЕ ОБЪЕКТОВ: КЛАССИЧЕСКИЕ МЕТОДЫ 222 7 1 Введение в распознавание объектов 222 7 2 Поиск объектов с помощью сопоставления ппблонов 223 7 3 Признаки Хаара 228
ПрактиЧ^СЙ^ задание 8 ГЛУБОКОЕ ОБУЧЕНИЕ И НЕЙРОННЫЕ СЕТИ 8 1 Основы нейронной сети 8 11 Нейрон от ашпогии к техническому пониманию 8 12 Искусственная нейронная сеть 8 2 Введение в глубокое обучение 8 3 Сверточная нейронная сеть 8 4 Пример применения сверточной нейронной сеги 8 5 Обобщенная структура сверточной нейронной сети 8 6 YOLO (You Only Look Once) 8 61 История развития YOLO 8 62 Принцип работы YOLO 8 63 Работа YOLO на этапе обучения 8 64 ПрактическоетримежииеYOLO Практическое задание ..... 235 237 237 237 240 245 247 248 257 258 258 264 266 273 277 9. ВСТРАИВАЕМЫЕ СИСТЕМЫ КОМПЬЮТЕРНОГО ЗРЕНИЯ. ...278 91 Аппаратные ресурсы ... . 278 9 2 Выбор микрокомпьютера.... 287 9 3 Установка и настройка окружения 293 9 4 Работа с камерой....... 295 9 5 Программно аппаратная архитектура CUDA 302 9 6 Настройка CUDA на микрокомпьютере Jetson Nano 304 Практическое задание....... 3 08 Заключение...................................... _ —_...............310 Стопарь терминов.................. ..........................311 Список рекомендуемой литературы —.................. 319 ПРИЛОЖЕНИГ......................................................... 320 .'у.‘ e.fhte.\i Уг'< cv2 bilateralFilteri) 320 cv2 bitwise_andQ 321 cv2 bitwise_notQ 321 cv2 bitwise_xor0 322 cv2 boxPointsQ 322 cv2 calcHistO 322 cv2 CaanyO 323 cv2 CascadeClassifierQ 323 cv2 circle!) 324 cv2 contourAreaQ 324 cv2 convertScaleAbsQ 325 cv2 createTrackbarQ 325 cv2 cvtColorf) 326
cv2 detddMMtiScaleO~ 327 cv2 dilateQ 328 cv2 distanceTransformO 328 cv2 drawContoursQ 329 cv2 ellipsef) 329 cv2 erode!) 330 cv2 fastNlMeansDenoismgO 331 cv2filter2DQ 331 cv2 findContoursO 332 cv2flip() 333 cv2 GaussianBlurO 333 cv2 getRectSubPixf) 334 cv2 getRotationMatnx2D() 334 cv2 getTrackbarPosO 335 cv2imread() 335 cvZimshowQ ........... . 335 r.2 ............ 336 ;v2 xRar.ge!) .......................... 336 :V2 Ka jr.anF. .tert) .................. 336 ;v2 Laplac:ar.O ................ 33" :v2 '.xeQ ........ 3 38 ;v2 magnitude) ................. 3 38 matchTemplateO ...... 339 cv2 medianBlurO ................................................... 339 cv2 metgeQ ........................................................ 340 c v2 minAreaRectf) . 340 ev2 minMaxLocf) 340 cv2 moveWindowQ 341 cv2 MultiTrackerQ 342 cv2 namedWindowQ 342 cv2 normalized cv2 polylinesQ 343 cv2 putTextf) 344 cv2 rectangleQ 344 cv2 remap!) 345 cv2 resized 346 cv2 saturate_cast() 346 cv2 selectROIQ 347 cv2 setMouseCallbackO 347 cv2 setWmdowPropertyO 348 cv2 SobelQ 349 cv2 splitQ 349 cv2 threshold!) 350
cv2Tradfe^@SRT0 ' 351 cv2 TrackerKCFO 351 cv2 TrackerMedianFlowO- 351 cv2 TrackerMILO 351 cv2 TrackerMOSSEf) 3 52 cv2 VideoCaptureQ 3 52 cv2 VideoWntert) 3 52 cv2 VideoWnter_fourccO 353 cv2waitKey() 353 cv2 waipAffmeO 353 numpy array0 354 numpy arangeQ 355 npclipO 355 numpy concatenate!) 355 numpy empty Q 356 numpy flip!) ........... . 356 rumpy ft...!) 35“ numpy hstackl) ...................................................... 35" numpy mear.0 358 numpy onesQ 358 numpy random!) ........ 359 numpy reshape!) ..................................................... 360 numpy stdQ ...... 361 numpy vstackQ ......... 361 numpy zeros!) ....................................................... 361 tracker initQ 362 tracker update!) 3 62 tracker get!) 363 tracker release!) 363
ВВЕДЕНИЕ Цепью компьютерного зрения (КЗ) является разработка систем способных анализировать и интерпретировать визуальную информацию, получаемую от фото и видеокамер Это направление в области искусственного интеллекта (ИИ) включает изучение методологических и алгоритмических аспектов а также реа лизацию разработанных ное пособие предназначено для последовательного изучения основных принципов компьютерного зрения начиная с базовых । । и заканчивая применением глу боких нейронных сетей Автор стремился представить технически сложные кон цепции в форме, доступной и понятной для широкого круга читателей, чтобы читатель не только понял теорию, но и научился применять ее на практике Бла годаря компьютерному зрению можно получить новые возможности в карьере, исследованиях и создании собственных инновационных проектов В книге также рассматриваются биот лития, которые служат основой для многих методов компьютерного зрения Особое внимание уделено примене- нию методов КЗ во встраиваемых системах, что делает данный материал осо- бенно актуальным Учебный материал организован с целью последовательно ввести обучающе- гося в мир компьютерного зрения Материал начинается с рассмотрения фунда- ментальных концепций представления изображений, базовых операций над пик- селями и выделения простейших признаков, таких как линии и контуры Этот базис необходим для понимания более сложных методов Далее рассматрива- ются различные алгоритмы обработки изображений, включая фильтрацию, мор- фологические операции и другие классические методы, трименяемые для улуч- шения качества изображений и извлечения полезной информации Обучаю- щийся научится применять эти методы на практике, используя такие инстру- менты, как Python и OpenCV, а также получит представление об их реализации на платформах встраиваемых систем. Следующим этапом является изучение методов распознавания объектов Начнется оно с простого шаблонного ложка, а затем продолжится более слож ними подходами, основанными на выделении признаков и машинном обучении Детально рассматриваются архитектура и принцип работы сверточных нейрон ных сетей, их обучение и применение в задачах компьютерного зрения Основ ное внимание уделено пониманию ключевых алгоритмов и методов что позво лит обучающимся применять полученные знания для решения конкретных задач и разработки собственных решений. В результате изучения этого раздела обуча ющиися сможет создавать и обучать собственные нейронные сети для решения конкретных проблем, а также адаптировать их для работы во встраиваемых си ст ем ах Принцип построения данного пособия, а также многочисленные примеры и иллюстрации дополняющие будут способствовать
ских заданий; ^ййволяющих’ гиюлу’ менения алгоритмов КЗ Такой подход поможег непросто освоить теорию а при обрести практические навыки, необходимые для настроения собственных си стем компьютерного зрения, включая системы, работающие на встраиваемых платформах Для обеспечения удобства обучения, данное учебное пособие дополнено глоссарием с определениями основных 'прмшюв, а также подробным перечнем функции используемых в компьютерном зрении, которые будут рассмотрены в книге Глоссарий и быстро обращаться к необходи мым определениям и инструментам в процессе обучения Это учебное пособие предназначено дня студентов технических специаль ностеи а также может быть полезно для инженеров, аспирантов и всех заинтере сованных в изучении компьютерного зрения Книга подойдет как начинающим программистам, так и специалистам с опытом работы с изображениями, обеспе чивая необходимый набор знаний для успешного освоения компьютерного зре- ния Инженер по встраиваемым системам, обладающий знаниями в области ком- пьютерного зрения, высоко ценится во многих отраслях Данное издание обес- печивает глубокое понимание принципов и методов компьютерного зрения, что делает его полезным для широкого круга пользователей, желающих освоить дан- ную область знаний
г. ОСНОВЬГКОМПБЮТЕРНОГО ЗРЕНИЯ 1.1. История развития компьютерного зрения История компьютерного зрения это захватывающее путешествие от амби циозных но ограниченных ранних попыток к современным мощным системам способным понимать и взаимодействовать с визуальным миром Путь этот начался не с глубоких нейронных сетей, а с куда более скромных начинании Рисунок 1 1 Фрэнк Розенблатт на своем рабочем месте Нервые шаги в области компьютерного зре ния были подчеркнуты стремлением создать электронные мозги, способные анализировать и понимать окружающий мир так же, как это де лает человек. В 1950 году Фрэнк Розенблатт (рис. 11), американский математик и пионер в области искусственного интеллекта, предло- жил уникальную идею, которая оказала значи- тельное воздействие на дальнейшее развитие компьютерного зрения персептрон Эгамодель была вдохновлена работой научного физика Уорре те Мак-Каллока и логика Апена Ньюэлла. Розенблатт создал простую модель нейрона, ко- торая могла обучаться и распознавать образы В 1958 году Фрэнк Розенблатт создал на основе ЭВМ IBM-740 компьютерную модель перцептрона, имитирующую процессы воспри- ятия информации в мозге Через два года он представил «Марк-1», первую в мире нейро- компьютерную систему, способную к обуче- нию и распознаванию зрительных образов например, печатных букв (рис 1 2) Розенблатта интересовали фундамеиталь иые принципы обработки информации, общие для искусственных и биологических систем Перцептрон состоял из датчиков, ассоциатив ных и реагирующих элементов, где сигналы от датчиков поступали в блоки электромеханиче ской памяти, моделируя ассоциативные связи между стимулами и реакциями, подобно об работке зрительной информации в мозге Система обучалась методом проб и ошибок корректируя ошибки и выделяя наиболее характерные признаки для распознала ния Например она могла группировать буквы, написанные разным почерком
распознаваЯФ^Йы отличающиеся по размеру, изложению или наклону Таким образом первые шаги в компьютерном зрении были пройдены бла годаря амбициозным ученым, которые пытались воплотить в машинах способ ность «видеть» и анализировать окружающую их среду Идеи, заложенные в этот период стали отправной точкой для более сложных и эффективных методов ко торые мы видим сегодня Кстати в это же время появляется термин «баг» (ошибка в программе) Он изначально имел буквальное значение (от английского «bug» «жучек») Вычис тигельные машины Mark! и Maik П сильно нагревались во время работы неко торые узлы даже светились, привлекая насекомых мотыльков, бабочек и дру гую мелочь Эти насекомые, попадая внутрь, часто вызывали короткие замыка ния электрических цепей По одной из версий, термин «баг» ввела в обиход Грейс Хоппер, сотрудница вычислительиэго центра ВМФ США и будущий контр адмирал, работавшая с Maik П Хошвртакже приписывают авторство тер мина «debugging» (отладка) процесса исправления ошибок в программном коде Ее вклад в развитие компьютерной науки неоценим Следующий этап развития 0960 1970-егт) компьютерного зрения оказался сложным, с вызовами, требовавшими преодоления технических и вычислитель- ных ограничений В это время пионеры, такие как Оливер Селфридж (рис 1 3) с его програм- мой «Pandemonium» (1959 г), пытались имитировать процесс восприятия чело- веческого мозга Эта программа, хотя и примитивная по современным меркам, использовала параллельно работающие подпрограммы, для распознавания про- стых геометрических фигур Важно отметить, что вычислительная мощность того времени сильно ограничивала возможности Даже распознавание простых объектов требовало невероятных усилий и занимало много времени
p&irite) использовал иерархии) «демонов» независимых подпро дая из которых специалюцровалась на распознавании определенных изображения (например, углы, линии, кривые) «Демоны» на нижних рархии анализировали пиксели, а «демоны» на более высоких уровнях iann информацию от нижестоящих, «крича» с разной интенсивностью сти от уверенности в обнаружении признака. «Дьявол децизионщик» ысоком уровне анализировал «крики» всех демонов и принимал окон решение о классификации даображения Этот подход хоть и не очень ыи по современным меркам, был новаторским в своей концепции иной обработки информации и вдохновил на дальнейшие исследова юти искусственного интеллекта и компьютерного зрения Картина с этой системе часто представляется как карикатурное изображение ) собрания «демонов», шумно спорящих друг с другом, что эффектно иллюстрирует распределенный и не строго контролируемый характер работы системы В 1980 1990 х годах произошел взлет интереса и появились первые трудно- сти исторического этапа компьютерного зрения Этот период характеризовался ростом интереса к компьютерному зрению, но одновременно столкнулся с «зи- мой ИИ» Ограниченные вычислительные возможности и сложность решения за- дач, таких как сегментация изображений и распознавание объектов в сложных условиях, привели к замедлению прогресса В ответ на эти вызовы исследова- тели разработали детекторы краев и границ, позволяюлще системам компью- терного зрения выделять важные детали и структуры на изображении Это был способ обрабатывать изображения, учитывая ограниченные ресурсы Несмотря на первоначальные успехи, прогресс в области компьютерного зрения был временно замедлен, и исследователи оказались перед сложными за- дачами, связанными с классификацией и распознаванием объектов Однако эти вызовы были источником вдохновения для разработки новых методов и техно- логий, которые стали основой для будущих инноваций в этой области В 2000 х с приходом более мощных компьютеров и новых подходов, таких как глубокое обучение, компьютерное зрение вновь ожило В 2012 году победа AlexNet в конкурсе ImageNet стала знаковым событием, продемонстрировав не вероятные возможности сверточных нейронных сетей (CNN) в задачах класси фикации изображений Точность распознавания резко возросла, почти сравняв лшсь с возможностями человека. А последующие годы принесли еще большее развитие CNN, а также появление других архитектур, например рекуррентных нейронных сетей (RNN) для обр и генеративных состяза тельных сетей (GAN) для создания реалистичных изображений Важно отметить, что точность распознавания объектов за последние десять лет выросла на порядки, что стало возможным благодаря сочетанию глубокого обучения и мощных вычислительных ресурсов История компьютерного зрения это путешествие от ранних экспериментов к интеллектуальным сис , и понимать мир вокруг
Итак что же такое компьютерное зрение7 Компьютерное зрение это область изспедоваяии и разработок которая придает компьютерам способность видеть и интерпретировать визуальные дан иые аналогично человеческому зрению Вместо того чтобы просто обрабатывать изображения компьютеры с: технологии компьютерного зрения способны понимать содержание этих изображений Важным аспектам компьютерного зрения является его широкое применение в различных областях Жепезнодороокмыи транспорт. Компьютерное зрение революционизирует железнодорожную отрасль, обеспеч ыи контроль над со стоянием путей, выявляя дефекты, такие как трещины и проседания Системы компьютерного зрения повышают безопасность на железнодорожных переездах, распознавая пешеходов и транспортные средства. Они помогают машинистам в сложных погодных условиях, оптимизируя движение поездов на основе анализа загруженности путей и распознавания силилов Кроме того, внутривагонный мониторинг, основанный на компьютерном зрении, гарантирует безопасность пассажиров и грузов, предотвращая кражи и акты вандализма Автомобильный транспорт. В автомобильной индустрии компьютерное зрение является основой систем помощи водителю (ADAS), предупреждая о по- тенциальных столкновениях путем распознавания пешеходов, велосипедистов и других автомобилей Более того, автономное вождение полностью зависит от компьютерного зрения для навигации, принятия решений и обеспечения без- опасности на дороге. Системы также контролируют состояние дорожной раз- метки и дорожных знаков Беспилотные летательные аппараты (БИЛА) Компьютерное зрение поз- воляет БПЛА эффективно ориентироваться в пространстве, избегая препятствий и выполняя различные задачи Это включает аэрофотосъемку, инспекцию линий электропередач, мостов и других объектов инфраструктуры, доставку грузов и даже поиск пропавших людей, благодаря распознаванию объектов на земле Строительство и инфраструктура. В строительной отрасли и в управлении инфраструктурой компьютерное эре ; повреждений и дефектов на зданиях, мостах и других сооружениях Автоматический анализ позволяет обнаружить трещины, коррозию и другие повреждения на ранней ста дии что способствует ' и предотвращению аварии Безопасность Применение компьютерного зрения в системах безопасности значительно повышает эффективность. Распознавание лиц, мониторинг пери метра и обнаружение подо: ным благодаря компьютерному зрению Системы контроля доступа также ак тивно используют эту технологию для идентификации личности Медицина Компьютерное зрение играет все более важную роль в медицин скоп диагностике анализируя медицинские изображения (рентгеновские снимки МРТ КТ) для выявления опухолей переломов и других патологии
Сельское хозяйство В сельском хозяйстве компьютерное зрение применя зсти выявления забо ется для мониторинга сое левании растении и анализа состояния почвы. Автоматизация сбора урожая также становится реальностью благодаря этой технологии Робототехника Компьютерное зрение является неотъемлемой частью со временной робототехники, обеспечивая роботам возможность ориентироваться в окружающей среде, избегать препятствий и выполнять сложные манипуляции с объектами Распознавание и классификация объектов являются ключевыми функциями, которые обеспечиваются компьютерным зрением Все эти примеры демонстрируют разнообразие применении компьютерного зрения и его растущую важность в различных областях Железнодорожный транспорт, автомобильная промышленность, беспипот ные летательные аппараты, строительство, системы безопасности, медицина, сельское хозяйство и робототехника лишь некоторые из областей, где компью- терное зрение демонстрирует свое широкое применение и растущую важность Это разнообразие примеров подчеркивает универсальность технологии и ее спо- собность решать сложные задачи в самых разных сферах Понимание сути компьютерного зрения упрощается, если сравнить его с че- ловеческим зрением так же, как наши глаза позволяют нам воспринимать и ана- лизировать окружающий мц>, компьютерное зрение наделяет компьютеры ана- логичными способностями, делая их более «интеллектуальными» в обработке визуальной информации Важность компьютерного зрения не может быть переоценена Эта техноло- гия способствует развитию «умных» систем от автомобилей, обеспечивающих безопасное вождение, до роботов, способных взаимодействовать с окружающей средой Благодаря компьютерному зрению технологии становятся более адап- тивными к реальному миру, что открывает новые перспективы в множестве об- ластей и формирует будущее инноваций 1.2. Биологические основы цветовосприятия Предыдущий раздел показал, насколько широко применяется компьютер ное зрение Однако, прежде чем углубляться в технические детали алгоритмов обработки изображений, важно понять основы того, что мы пытаемся имитиро вать восприятие цвета человеком. Необходимо рассмотреть биологический ме хаиизм лежащий в ос , и то, как свет и цвет преоб разуются в нервные импульсы, формирующие наше восприятие Цвет это физическая и воспринимаемая характеристика света, обуслов ленная частотой его волны Для человеческого восприятия цвет обычно опись: вается тремя основными характеристиками: оттенок (какой именно цвет) насы щенностъ (чистота или интенсивность цвета) и яркость (светимость или темнота цвета)
роль защитного слоя и помигает преломлять свет За роговицей располагается радужка со зрачком кото яруют количество попадающего в глаз света Позади радужки находится хрусталик, хогорыи меняет свою форму для фокусировки света яг. сетчатке Сетчатка является одной из самых важных частей глаза для восприятия цвета Она содержит миллионы фоторецепторных клеток, включая колбочки и палочки Колбочки делятся на три типа реагирующие на красный зеленый и синии цвета Эти колбочки формируют основу для восприятия цвета, так как Рисунок 1 4 Структура человеческого глаза Количество колбочек каждого типа может немного варьироваться у разных людей, но обычно их количество примерно одинаково В среднем, примерное соотношение колбочек к цветам в человеческом глазу составляет • колбочки, чувствительные к красному (длинноволновые) около 64 %, • колбочки, чувствительные к зеленому (’средневолновые) около 32 %, • колбочки, чувствительные к синему (коротковолновые) около 2 б % Длинноволновые колбочки, чувствительные к красному цвету, составляют около 64 % Это означает, что глаз обладает большей чувствительностью к крас ному спектру и способен более точно различать оттенки этого цвета Средневолновые колбочки, чувствительные к зеленому цвету, составляют около 32 % Зеленый цвет также будет хорошо восприниматься и отличаться бла годаря этому процентному соотношению Коротковолновые колбочки, чувствительные к синему цвету составляют цвету и восприятие этого Такое разнообразие в процентном соотношении колбочек позволяет глазу лучше адаптироваться к различным условиям освещения и окружающей среды а также обеспечивает более штфокий спектр восприятия цвета Кстати здесь можно наити объяснение, почему залрещаияций сигнал светофора красный
цвет активируются колбочки, специалтирующжся на этом цвете Таким обра зом трехкомпонентная теория цвета объясняет, что восприятие цвета возникает за счет комбинации сигналов от трех типов колбочек Электрические сигналы, созданные колбочками, передаются в мозг через зрительный нерв где они анализируются и интерпретируются Мозг обрабаты вает эту информацию и формирует представлен® о цвете объектов, которые мы видим Различные цвета воспринимаются глазом благодаря разнообразию спек трального состава света Свет, или электромагнитные волны, имеют раз иые длины воли, и каждая длина волны соответствует определенному цвету (рис 1 5) Например, в видимом диапазоне, короткие длины воля соответствуют синему и фиолетовому цветам, средние зеленому и желтому, а длинные вол ны оранжевому и красному Цвета могут быть отражены, поглощены или преломлены объектами в окру- жающей среде Когда свет падает на поверхность объекта, он может отразиться от нее и попасть в наш глаз, где затем его воспринимают колбочки Таким обра- зом, мы видим цвет объекта в зависимости от того, какие длины волн света отра- жаются от него и доходят до наших глаз Рисунок 15 Спектр света Некоторые цвета могут не попадать в наги глаз или восприниматься менее ярко из за различных факторов, таких как спектральный состав освещения абсорбция света объектом или фенологические особенности глаза Например ночью когда освещение ограничено, некоторые цвета могут быть менее види мыми из за недостатка определенных длин воли в свете, который мы видим Также некоторые объекты могут поглощать определенные цвета, что делает их
приняты чгйжческим глазом из-за ограничений в спектральной чувегвитель ности колбочек Например, ю преимущественно на ра боте палочек которые более чувствительны к синему и зеленому спектру по этому в темноте цвета могут быть менее яркими и отличимыми Кроме того некоторые животные, такие как пчелы или некоторые виды рыб могут видеть цвета, которые для человека невидимы, так как их глаза содержат другие виды фоторецепторных клеток или обладают большей чувствительно етью к определенным длинам волн света. Таким образом, хотя человеческий глаз способен воспринимать широкий диапазон цветов, его способность ограничена биологическими факторами и фи энологическими особенностями (рис. 1 б) Рисунок! 6- Фильтрация человеческого глаза В компьютерном представлении цвета используется система RGB (красный, зеленый, синий), которая аналогична способности человеческого глаза воспри- нимать цвета Каждый пиксель на экране монитора состоит из трех основных цветов красного, зеленого и синего Каждая из этих цветов имеет свой собствен- ный канал, который может принимать значения от 0 до 255, обозначая таким образом яркость 1.3. Пиксели и их представление Без глубокого понимания того, как хранится и обрабатывается информация на уровне отдельных мельчащих структурных элементов, невозможно эффек тивно работать с изображениями и видео, применять алгоритмы обработки и ана лиза и создавать собственные прило заложит необходимый базис для зву компьютерного зрения Этот раздел :более < Известно что каждое цифровое изображение состоит из миллионов крошеч ных точек пикселей Кажди [кусочекмозаики хра нит информацию о цвете и яркости, и из их совокупности складывается полная картина (рис 1 7)
Пиксель (от англ «picture element») это минимальный элемент изображе ния, обладающий определенной цветовой и яркостной характеристикой Он является базовым строительным блоком для создания изображения Совокупность пикселей образуют матрицу Матрица пикселей математи чески представляет собой простой набор чисел, расположенных в виде таблицы В случае с изображением, каждое число в матрице представляет интенсивность или цвет соответствующего пикселя Пример простой матрицы для черно белого изображения размером 5x5 255 0 255 255 56 О 255 0 66 255 255 0 255 58 255 255 d 37 255 255 255 0 255 255 255 Здесь каждое число представляет интен- сивность (или яркость) пикселя Значение О черный цвет, а 255 белый Эти числа могут из меняться для представления различных оттенков серого Таким образом, представленную матри цу 5x5 можно воспринимать как некоторое изоб Таким образом с помощью матр; решением 5 на 5, вместо привычного нам напри мер, 1280ла 720 или 2560 на 1440 юго размера можно по лучить любое изображение, например, человеческого глаза (рис 1 9) Это изоб ражение имеет один 1 , опреде) : серого Поэтому данный при мер можно записать в виде 32x32x1 Где первые д ва числа разрешение послед нее значение количество каналов Если речь идет о цветном изображении, где каждый пиксель обычно опись: вается тремя значениями интенсивности красного, зеленого и синего цве
лесообразно преобразс : в градации серого (один ка нал) что может значительно сократил, вычислительную нагрузку для некоторых алгоритмов Рисунок 1 9 - Матрица пикселей 32x32 «человеческий глаз» Когда мы говорим о том, что изображение представлено в виде матрицы пикселей, мы подразумеваем, что каждый элемент этой матрицы представляет цвет или интенсивность соответствующего пикселя на изображении Весь про цесс обработки изображений сводится к изменению значений в этой матрице, чтобы получить нужные эффекты, такие как изменение цветов, увеличение или уменьшение размера изображения я многое другое Физически пиксель представляет собой мельчайший элемент на экране устройства, спо собныи отображать свет В грубом понимании этот элемент, может быть тфедставлен, напри мер светодиодом с возможностью включения в нем того или иного цвета из пространства RGB (рис 130) Кстати, такие светодиоды образуют пространство пикселей в матрицах больших ре кламных билбордов m ж Если подвести электрическое напряжение к одному из выводов такого эле мента, он начинает светиться определенным цветом. Возможно одновременное
здгйййЯювых от е яркости достигается регулировкой тает яркость свечения увеличение । диапазоне от 0 до 255 градации где значение например, 128 соответствует половине максимального напряжения обеспечивая тем самым тонкую настройку яркости Таким образом од ин такой элемент способен воспроювести любой оттенок с любой яркостью В отличии от билбордов, на экранах мониторов пиксель представляет собой физическую точку на поверхности дисплея, которая может быть подсвечена или : объединяются в матрицу атемнена для создания определ для формирования изображения. Фюический пиксель монитора может быть представлен различными технологиями, такими как жидкокристаллические дис плен (LCD), органические светодиод ы (OLED) или другие аналогичные техно погни Разрешение экрана определяется количеством пикселей вдоль горизон тальных и вертикальных измерений, и чем выше разрешение, тем более детали аиров энным может быть изображение. Разрешение изображения определяется количеством пикселей вдоль его ширины и высоты Большее разрешение повышзет точность, может содержать больше информации, но занимает больше вычислительных ресурсов Вот неко- торые стандартные разрешения, привычные для нас низкое разрешение 800x600 пикселей, среднее разрешение 1 920* 1080 пикселей (также известно, как Full HD), высокое разрешение 3840*2160 пикселей (известно, как 4К) Для простоты понимания выше был представлен пример матрицы пикселей 32*32, где каждый пиксель определял тон всего одного цвета, в градациях серого (grayscale) одном из простейших цветовых пространств В реальности же цвет в цифровом изображении обычно представляется в более сложных цветовых пространствах, таких как, например, ROB, где каждый пиксель кодируется тремя составляющими красным, зеленым и синим Существует множество способов представления цвета пикселями Такое множество называют цветовым пространством Одним из наиболее распро страненных является RGB (красный, зеленый, синий) В цветовом пространстве RGB каждый пиксель представляется комбинацией трех основных цветов крас ного (1 й канал), зеленого (2 й канал) и синего (3-й канал) Каждый цвет (канал) может иметь интенсивность от 0 до 255, комбинация этих цветов создает полный спектр цветов (рис 111). Например, значение (255,0,0) соответствует максимальной интенсивности красного цвета, тогда как (0,255, 0) представляет максимальную интенсивность зеленого Комбинируя каналы, мы получаем различные цвета. Так добавление синего канала к зеленому (например, (0,255,255)) создает оттенки от зеленовато голубого до синего Для получ' зходимо смешать красный и зеленый каналы (например, (255, 255, 0)) Изменяя значения интенсивности каждого канала мы можем воспроизвести птирокий спектр оттенков включая различные вариации красного и желтого Важно отметить что резулътирую щии цвет пикселя вое оптическому смешиванию
Таким образом, матрица 3^3 в цветовом пространстве RGB будет иметь вид показанный на рис 1 ]] Математическая запись этого фрагмента матрицы может иметь вид (рис 1 12) 255 255 255 255,255,255 255,255 255 255 255 255 255,255,255 255169,255 - 255 255 255 116,134 142 116134,142 Рисунок 1 12 - Математическое представление фрагмента матрицы Кстати, вот что мы увидим, если сме- стимся на некоторое расстояние от экрана мо нитора при рассмотрении этого же фрагмента матрицы в результате оптического смешивания (рис 1 13) Рассмотрим черно белое твображение (рис 1 14) В качестве примера возьмем все тот же рисунок человеческого глаза, только теперь он в черно белых цветах В черно белом изображении каждый пик сель может быть только черным (кода руется 0) или белым (кодируется I) Здесь, как
Такое предВййййние изо(: ым изображением Рисунок 1 14 - Черно-белое изображение человечного глаза Процесс бинаризации, или пороговой обработки, позволяет преобразовать цветное изображение в черно-белое, где пиксели с яркостью выше определен- ного порога считаются белыми, а ниже черными В данном примере все пик- сели изображения с оттенками серого (рис 1 9) и значением больше 60 транс- формируются в белый цвет (код ]) Еще не менее важное понятие, которое облегчит понимание работы с цве- том, цветовая глубина Цветовая глубина определяет количество биг, использу- емых для представления цвета каждого пикселя Например, цветовая глуби на 8 бит позволяет использовать 256 различных цветов (28 - 256) В 24 битном цветовом пространстве (RGB) каждый пиксель представлен 8 битами для крас ного, 8 бигами для зеленого и 8 битами для синего, что обеспечивает богатую цветовую палитру, в то время как 32 битные изображения используют большее количество бит на пиксель, соответственно увеличивая количество доступных цветов и как следствие, точность цветопередачи Более высокие глубины цвета, такие как 48 битный и. изображении гея в профессиональной обработке 1.4. Цветовые пространства В прошлом разделе юго пространства а именно ее наиболее распространенный представитель RGB Однако существует мно
распрострай&вЫк RGB (Red Green, Blue) — одно из самых широко используемых цветовых пространств в компьютерной графике и фотографии (рис 1 15) Каждый цвет представлен комбиж циеи трех основных цветов красного, зеленого и синего Максимальные значения каждого цвета обычно равны 255 Прямой аналогией получения различных оттенков в этом цветовом пространстве явля- ется например, смешивания масляных красок. RGB используется в основном для отоб- ражения цветов на электронных устройствах, таких как мониторы компьютеров, телевизоры и смартфоны CMYK (Cyan, Magenta, Yellow, Key/ Black) используется в печати и изображении (рис 1 16) Он основан на комбинации четырех основных цветов голубого (cyan), пурпурно- го (magenta), желтого (yellow) и черного (key/black) Это цветовое пространство позво- ляет точнее представлять цвета, которые можно воспроизвести на печатной машине Од- нако, CMYK не может отобразить весь спектр цветов, доступный в RGB Перевод из RGB в CMYK часто приводит к потере точности цветопередачи CMYK преимущественно используется в полиграфии для печати книг, журналов, ре- кламной продукции, упаковки и широкофор- матных материалов, обеспечивая точное вос- произведение цветов на печатном оборудова HSV (Hue Saturation, Value) представ ляет цвета с помощью трех компонентов огге нок (hue) насыщенность (saturation) и значение (value) (рис 1 17) Он предоставляет удобный способ управления цветом, особенно для гра фического дизайна. пространства RGB цветового пространства HSV
: цветов от красного ремещаегейиП&4>кружносги7ЕИЛЧ1КСК до синего Это и есть параметр hue. В отличии от RGB, здесь всего одно значение этого параметра определяет выбор цвета Параметр насыщенность (satuiaUon) стоит понимать так Представьте что вы взяли некоторый пигмент цвета и начали постепенно добавлять в него воду то есть разбавлять Таким образом, вы перемещаетесь к центру нашего цилиндра. Если бы был возможен обратный процесс, i ным к поверхности цилиндра, нэка не дос было противополож сального уровня кон Что касается третьего парам,яра value, то здесь снова пример с водой Вот только вы погружаетесь в эту разбавленную водой краску все глубже и глубже пока не достигаете полной черноты. HSP часто используется в графических редакторах и приложениях для об работки изображений, где иитуити ; цветом, основанное на восприятии человеком, предпочтительнее, чем в моделях RGB или CMYK Это полезно для выбора цвета, цветокоррекции и создания градиентов LAB (CIELAB) это цветовая мо- дель, которая разработана для описа- ния всего видимого спектра цветов Она была разработана Международ- ной комиссией по освещению (QE) в 1976 году Цветовое пространство LAB разде- ляет цвет на светлоту (L*) и две цвето- вые оси а* (зеленый красный) и Ь* (синий желтый) (рис 1 18) Это про- странство более пригодно для восприя- для восприятия человеком Он; тия человеческим глазом и широко ис- пользуется в приложениях, связанных с визуальным восприятием LAB основано на принципах цве тового восприятия человеческого гла за, что делает его более естественным ста восприятия яркости кон траста и насыщенности, что делает его более соответствующим тому как люди видят и воспринимают цвета. Цветовое пространство LAB используется в профессиональной обработке изображении цветокоррекции и профилировании, где требуется высокая точ ность цветопередачи и независимость от устройства вывода Его применяют в фотопечати программном обеспечении для управления цветом и в системах контроля качества цветовоспроизведения
видении и видеотехнологиях по ряду причин. Одно из ключевых преимуществ ИЖзаключа ется в том что она представляет изображение в виде трех компонент яркости (Y) и двух цвет ностеи (U и V) что позволяет более эффек тивно кодировать и обрабатывать видеоданные Ее модель представлена на рис 1 19 Поскольку человеческий глаз более чув сгвителен к изменениям яркости, чем к измене ниям цветности, раздельное представление этих компонент позволяет сосредоточиться на сохранении качества яркостной информации, что существенно для восприятия изображения Таким образом, УW позволяет эффективно сжимать видео, сохраняя при этом важные детали Ьолее того, YUV совместима с различными типами оборудования, будь то аналоговые или цифровые системы. В аналоговых системах 1ТФ' может быть лепсо передано по аналоговым интерфейсам, а в цифровых эффективно хра- ниться и передаваться с использованием различных форматов контейнеров и ко- деков Еще одно преимущество YUI' заключается в простоте обработки и изме- нения данных Благодаря разделению компонент, их можно обрабатывать независимо, что упрощает реализацию различных эффектов и фильтров в обра- ботке видео Кроме того, ШТучитывает особенности человеческого восприятия цвета, что делает изображения более естественными и комфортными для про- смотра Цветовое пространство BGR (Blue, Green, Red) используется в компьютер- ной графике и обработке изображений Оно представляет собой способ органи- зации цветовой информации, где каждый пиксель изображения определяется тремя компонентами синим (Blue), зеленым (Green) и красным (Red) В цветовом пространстве BGR цвет каждого пикселя формируется комбина цией трех основных цветов синего, зеленого и красного Каждая из этих компо нент имеет свою интенсивность, которая определяет яркость данного цвета. Например, если все три компонента имеют максимальную интенсивность то цвет будет белым, а если все три компонента имеют минимальную интенсив ность то цвет будет черным BGR преимущественно используется в компьютерной графике и обработке изображении особенно в программировании и разработке графических прило женин Это цветовое пространство часто встречается в работе с изображениями в формате BGR, который является одним из стандартных форматов хранения изображении в компьютерных системах Он также широко применяется в биб лиотеках и инструментах для обработки изображений, таких как OpenCVв языке программирования Python
то очевидна3 ЗЙ4 они предо ’два различных способа организации цветовой информации Основное отличие между ними заключается в порядке следования компонент цвета. В цветовом гространстве BGR компоненты упоря дочены как синил зеленый и красный, в то время как в цветовом пространстве RGB порядок компонент обратный: красный, зеленый, сияли Это различие в порядке компонент имеет значение при работе с изображе ниями и обработке цвета Например, при визуализации изображении в фор мате RGB программное обеспечение, использующее эту модель, ожидает что компоненты будут представлены в определенном порядке (RGB), и, если вход ные данные будут представлены в формате BGR, это может привести к непра вильному отображению цветов Это пипп, несколько: 1 моделей, существует много других пространств цветов, каждое из которых предназначено для определенных при ложеиий и требований Вы бор цветового пространства зависит от конкретной за дачи и того, как будет использоваться изображение Важно отметить, что в Opener, как и во многих других библиотеках компь- ютерного зрения, применяется порядок BGR вместо стандартного RGB Этот выбор связан с историческими и техническими соображениями Исторический фактор связан с тем, что в начальные периоды развития цветной фотографии и видеозаписи использовались три отдельные пластинки для регистрации синего, зеленого и красного цветов соответственно Первым снимался синий, затем зеленый и, наконец, красный В процессе развития техно- логий такой порядок цветов стал устойчивым и был унаследован в компьютер- ном зрении Технический аспект заключается в том, что многие камеры и библиотеки обработки изображений в настоящее время продолжают использовать BGR, чтобы сохранять совместимость со старым программным обеспечением и фор- матами данных В ОрепСГ BGR также используется по умолчанию при чтении изображений с помощью функций библиотеки Важно помнить о порядке цветов (BGR), когда вы работаете с изображени ями в ОрепСУ, чтобы избежать недопонимания при обработке и отображении цветовых данных 1.5. Библиотеки для работы с изображениями. OpenCV Библиотеки компьютерного зрения представляет собой программный ин струментарий, обеспечивающий набор функций и алгоритмов для обработки и анализа изображений Эти библиотеки предназначены для упрощения разра ботки программ и приложений, связанных скомпьютерным зрением в том числе распознавание образов, обнаружение объектов, трекинг, сегментацию и другие задачи В мире компьютерного: гво библиотек предиа значенных для обработки, аналща и маиипушрования изображениями Каждая
которые изЧйй'-' Библиотека Pillow, известный как HL (Python Imaging Library) является библиотекой для обработки изображений, предоставляя инструменты для откры тия редактирования и сохранения различных форматов изображении Основное использование Pillow это базовая обработка изображении такая как изменение размеров, обрезка, редактирован» цветов и форматов (установка pip install pillow) Библиотека Scikit image, построенная поверх библиотеки SciPy, предостав операции с изображени ляющая инструменты для выпот ями таких как фильтрация, сегментация измерение объектов Scik.it image ча сто используется в научных исследованиях и задачах обработки медицинских изображений (устаиовкаргр install scikinmage\ Библиотека image ю предоставляет простой интерфейс для чтения и записи изображений в различных форматах. Она также обеспечивает интеграцию с аяи мацией и видео Imageio удобна для обработки различных типов мультимедий иых данных, ее легко использовать в сочетании с другими библиотеками (уста- новка pip install sclkit-image) Библиотеки PyTorch и Tensor Flaw, гвкзчально разработанные для машинного обучения, также могут использоваться для обработки изображений Они включают в себя модули для загрузки, преобразования и аугментации изображений PyTorch и TensorFlow позволяют интегрировать обработку изображений в пайплайн машинного обучения и глубокого обучения (установкар(р tensorflow и Ру Torek pip install torch i Библиотека Scipy для научных вычислений в Python, которая включает мо- дуль ndimage, предоставляющий функции для работы с изображениями, такие как фильтрация, сегментация и измерение объектов Она часто используется в научных и инженерных исследованиях Для установки необходимо выполнить команду pip installscipy Библиотека NumPy - это основная библиотека для численных вычислений в Python, широко используемая в компьютерном зрении для эффективной работы с многомерными массивами, такими хак изображения (представленные в виде матриц пикселей) Она обеспечивает быстрые векторные и матричные операции что критично для обработки изображений, реализации алгоритмов машинного обучения и работы с нейросетевыми моделями, такими как ОрепСР, TensorFlow и PyTorch, которые активно используют NumPy массивы для хранения и преоб разования данных (установка, pip install потру). Однако одной из самых популярных и широко используемых библиотек в области компьютерного зрения является OpenCV (Open Source Computer Vision) Она предоставляет множество функций для обработки изображении и видео включая распознавание обь ; движения калибровку камер и многое другое ОрепСРппфвко используется в областях компьютерного зрения машинного обучения и робототехники. Она поддерживает множество языков программирования, включая Python, C++и Java
этой библиотеки си OpenCV OpenCV гпо библиотека с открытым исходным кодом, специализирующаяся на компьютерном зре нии и обработке щображении Она предоставляет об ширный набор инструментов и алгоритмов позволя хяцих разрабатывать приложения, связанные с распо знаванжм образов, анализом изображении обработ кой видео и другими задачами, связанными с визуаль ным восприятием Кстати, из версии автора книги, в логотипе ОягпСГСрнс. 1 20) можно попытаться увидеть стили зованные буквы «О», «С» и «V» (первые буквы яазва ния библиотеки) Это добавляет еще один уровень смысла логотипу, делая его более многогранным и запоминающимся. Выбор цветов логотипа повторяет цвета RGB Это также может быть «случайным, подчеркивая связь с цифровым представлением цвета Однако, такое восприятие, скорее, субъективное и не яв- ляется официально подтвержденным объяснением создателей логотипа История создания началась в 1999 году, когда ИтсхахГронер, изра- ильский ученый, предложил создать открытую библиотеку для компьютерного зрения В это время он работал в Интеллектуальной системе обработки инфор- мации (IPL) в Университете Саи-Диего (UCSD) Позже, в 2000 году, Вадим Писаревский, российский ученый, присоединился к проекту Они объединили усилия и начали разрабатывать первую версию OpenCV Основная цель проекта заключалась в создании инструмента, который по- может исследователям и инженерам в области компьютерного зрения легко ра- ботать с изображениями, выполнять различные операции обработки и анализа Первая версия OpenCV была выпущена в 1999 году С тех пор проект ак- тивно развивался благодаря усилиям множества разработчиков по всему миру Он стал стандартом в области компьютерного зрения и используется в различ иых областях, включая медицину, робототехнику, автоматизацию промышлен ного производства, безопасность, анализ изображений и многое другое CpenCV стала популярной благодаря своей открытой лицензии (BSD) и под держке множества языков программирования, таких как C++, Python, Java и других Это позволяет использовать ее в j : и на различных платформах Для установки пакета OpenCV на.персональный компьютер и в дальнейшем использовании его в программах гв языке Python в командной строке введите pip install openev-python - эта команда установит основную версию OpenCV для Python Стоит заметить, что вышеописантя команда, устанавливает не все модули предусмотренные текущей версии библиотеки. Например позже мы можем
contrib в название пакета обычно указывает нато, что это включает дополнитель ные модули и функционал, который может быть полезен для различных прило женин компьютерного зрения Зачастую возникают проблемы с ^совместимостью версии приложении или библиотек ит д Проверка версии OpenCV это гфосто способ убедиться что у вас установлена нужная версия этой библиотеки для обработки изображении Эго по лезно потому что ОрепСУ часто обновляется, добавляя новые функции и улучшая старые Проверка версии гарантирует, что вы используете актуальную версию с нужными возможностями Также разные версии могут иметь различия в функциях и зная свою версию, вы смажете лучше использовать документацию и примеры Важно также убедиться, что другие р , работающие с вашим кодом, используют совместимую версию ОргпСТ' Так что, проверка версии это просто хорошая практика перед началом работы с ОрепСУ После установки важно убедиться, что OpenCV успешно установлена. Вы можете выполнить следующий код в вашей среде Python impart cv2 print(a>2 _yersion_) Следует учесть еще одни важные рекомендации Бывают случаи, когда вы подключаете какую-либо библиотеку, но, обращаясь к функции, не получаете должного результата Это связанно с тем, что в той версии библиотеки не преду- смотрена функция или она имеет другое название В этом случае рекомендуется проверить наличие интересующей функции следующим образом import cv2 prtnt(cv2 _version_) mailable .trackers = [fforfndtr(ci>2) rf'Tracker' mf] print(mailable-trackers) Здесь, в качестве примера, вы проверяете текущую версию ОрепСУп ищете упоминание слова «.Tracker». Таким образом, программа выведет весь перечень трекеров, которые предусмотрены в библиотеке. Если в проекте планируется использовать видеопроцессор с под держкой технологии CUDA, можно применить следующую строку кода prmt(cv2 cuda^etCudaEnaDedDeviceCixMO) Эта команда полезна при работе с ОрепСУи вычислениями на GPU Еслив результате выполнения команды про грамма возвращает 0, то нет активных видеопроцессоров с поддержкой CUDA Это может быть связано с неудачной настройкой CUDA или отсутствием совме стимого оборудования В таком случае следует проверить наличие и коррект ность установленных драйверов для видеокарты, а также совместимость исполь зуемои версии OpenCV с CUDA. Если программа возвращает 1 (или более), это означает что у вас есть I с поддержкой технологии CUDA од ин (или нес го хороший знак который указывает на то, что ваше оборудование и настройки 29
Основные характеристики и возможности OpenCV 1 Многозадачность С^иС^поддерживает широкий спектр задач начиная от базовых операций обработки жображении до более сложных таких как распознавание объектов, отслеживание движения, сегментация и даже создание трехмерных моделей 2 Поддержка различных языков QenCT^ написана на C++ и предоставляет интерфейсы для использования на других языках, включая Python Java и MATLAB Эго делает библиотеку доступной для разработчиков с разным опытом и предпочтениями. 3 Широкий спектр платформ: OpenCVподдерживает множество операци оииых систем, включая Windows, Linux, MacOS, а также платформы мо бипьиых устройств, что делает ее универсальной для различных прило же иий 4 Поддержка графических процессоров (GPU) OpenCV может использо- вать вычислительные ресурсы графических процессоров для ускорения выполнения некоторых задач, что особенно важно при работе с боль- шими объемами данных 5 Богатое сообщество и документация OpenCV имеет активное сообще- ство разработчиков, что обеспечивает поддержку, обновления и обмен опытом Документация OpenCVобширна и содержит множество приме- ров, что облегчает изучение библиотеки Заметим, что вышеперечисленные рекомендации будут полезны при изуче- нии более поздних разделов книги В дальнейшем, в каждом практическом задании мы будем решать различ- ные задачи, связанные с компьютерным зрением, рассматривая различные функ- ции библиотеки OpenCV Практическое задание Задание 1 Установите OpenCV и NumPy Задание 2 Проверьте версии библиотек и их совместимость Задание 3 Выведите лра Задание 4 Проверьте, ка >е сообщения в терминал трекинга имеются в вашей текущей фу1 библиотеке Используйте пример ж раздела. Здание 5 Используя палитру цветов, поэкспериментируйте с различными числовыми значениями каналов RGB (красного, зеленого и синего) чтобы полу чить разнообразные цвета и их оттенки. В частности, попробуйте создать следу ющие цвета желтый оранжевый, сиреневый, белый, черный и несколько оттен ков серого Задание б* Проведите операции 1 4 на микрокомпьютере
2; бСНОВЫ ОБРАБОТКИ ИЗОБРАЖЕНИИ И ВИДЕО 2.1. Представление изображений Компьютерное зрение как область искусственного интеллекта ставит своей цепью имитацию и понимание человеческого зрения с помощью вычислитель ных методов Ключевую роль в этой области играют изображения и видео предоставляя основу для анализа и обработки. В рамках данной темы рассмот рим как изображения могут быть представлены в виде тензоров, что является мощным инструментам для их обработки в компьютерном зрении Изображение в своей основе представляет собой двумерную матрицу пик селей Каждый пиксель содержит информацию о цвете или оттенке Основные характеристики изображения включают разрешение (количество пикселей), формат (например, JPEG, PNG) и цветовую гамму Понимание структуры звоб- ражения это фундамент для разработки алгоритмов обработки изображений Однако, чтобы эффективно работать с изображениями, особенно в контексте нейронных сетей, необходиморассматриватъ их как многомерные массивы данных, то есть как тензоры Представление изображения в виде тензора отгрызает возмож- ности для применения мощных математических операций, таких хак свертка. Тензор это математическое понятие, которое можно рассматривать как обобщение скаляров, векторов и матриц на произвольное число измерений В контексте программирования и обработки данных, тензор это многомерный массив, который может хранить данные различных титю в Наиболее распространенным представлением изображения как тензора яв- ляется трехмерная матрица Ее измерения определяются высотой, шириной и ко- личеством каналов Первые два индекса определяют координаты пикселя, а тре- тий индекс номер цветового канала Например, для RGB-изображения разме- ром 640*480, тетвор будет иметь размеры 640x480x3, где 3 соответствует крас- ному, зеленому и синему каналам Если изображение черно белое или в оттенках серого, то тензор будет иметь размеры 640x480x1 Это црвдставление особенно полезно для визуа [(рис 2 1) Рисунок 2 1 - Примеры тензоров
жения шляется набор отдельных двумерных матриц, по одной для каждого цветового ка нала. В случае RGB изображения это будут три матрицы 640х480х 1, каждая из которых соот ветсгвуег красному, зеленому и синему кана лам (рис. 22) Тензор это обобщение понятии вектора и матрицы на произвольное число измерении В контексте обработки изображении тензор может представлять многоканальные изобра жеиия, последовательности изображении (ви део) или признаки, извлеченные из изображения нейронной сетью Это мощное представление позволяет более эффективно обрабатывать многомерные данные, которые часто встречаются в компьютерном зрении Количество признаков в тензоре может быть больше трех (количества кана- лов) Число таких признаков ограничивается только задачей Например, на входе первого слоя сверточной нейронной сеги может быть тензор 640x480x3, а после нескольких сверточных слоев этот же тензор может преобразоваться в тензор 8x8x256, где 256 количество извлеченных гризюков изображения Это демон- стрирует гибкость тензорного представления и его важность в глубоком обучении Вектор это тензор первого ранга, матрица второго ранга, а трехмерная матрица третьего ранга Любая многомерная матрица также является тензором Понимание тензоров хак обобщенного представления данных является ключом к освоению современных методов обработки изображений. Для наглядности, рассмотрим, как создавать тензоры различных размерно- стей, в том числе с помощью библиотеки ЫитРу, которая является фундамен- тальным инструментом для работы с массивами в Python NumPy предоставляет мощные возможности для создания, манипулирования и выполнения математи- ческих операций над массивами, что делает ее «заменимой в области компью- терного зрения и машинного обучения Рекомендуется повторил. представленные коды и изучить результат их ра Пример № 1: Создание константы (скаляра)
базовый шаг который нам понадобится для дальнейших манипуляции с дан ними. Обратим внимание на то, что i — скалярная величина или тензор нулевого Теперь рассмотрим, что произойдет, если заключить значение i в квадрат ные скобки Это приведет нас к понятию вектора, который является тензором более высокого ранга, чем скаляр Пример № 2: Создание вектора (одномерного массива) или с применением НитРу В этом примере создан список с одним элементом, значением переменной i Добавим еще несколько элементов к списку в данном примере Теперь вектор I содержит J 0 элементов А сам вектор является тензором первого ранга Индексация в списках (и в массивах в делом) начинается с нуля Таким образом, первый элемент имеет индекс 0 (1(0] равен 2), а последний эле- мент имеет индекс 9 (1(9] равен 3). Можно также обращаться к любому отдельному элементу этого массива, указав его порядковый номер (индекс) Пример № 3: Изменение элемента вектора В этом примере . с индексом 6 присвоив ему сумму элементов с индексами 0 и 4 Выводится как измененный элемент так и полный список i чтобы увидеть результат
них которая называется матрицей, или тензором второго ранга Пример № 4: Создание мшрмцы (двумерного массива) В этом примере создана матрица, которая состоит из 10 строк, а в каждой строке по 10 элементов Такую матрицу называют матрицей размера 10x10 Матрицу можно представить, как таблицу со строками и столбцами В дан- ном случае количество строк и столбцов по 10 Каждый элемент матрицы имеет свой ивдекс, который состоит из двух чисел индекса строки и индекса столбца, начиная с нуля Например, элемент матрицы, который находится в третьем столбце и первой строке имеет значение 1(2,0) Теперь усложним эту матрицу, заменив каждый ее элемент на одномерный массив из трех элементов Это приведет к понятию трехмерного массива или тензора третьего ранга Пример № 5: Создание трехмерного массива (тензора) ГМК [[[255,255,255 [[255,255,255] [[255 255,255] [[255 255 255] [[255,255 255] 1, 1.1 1,1 1.1 1,1 [255,255,255] [255,255,255] [255,255,255] [255,255,255] [255,255,255] 1, ,1 ,1 1 ,1 [255,255,255] [255,255,2551 [255,255,255] [255,255,255] [255,255,255] [[255 255 255] [[255 255 255] 1.1 1,1 [255,255,255] [255,255,255] 1,1 ,1 [255,255,2 55] [255,255,255] [[255 255 255] 1,1 [255,255,255] 1,1 [255,255,255] [[255 255 255] ',1 [255,255,255] д [255,255,255] [[255 255,255] 1,1 [255,255,255] 10«10«3 1 1,1 [255,255,255] В примере 5 создали трехмерный массив, где каждая «ячейка» предыдущей матрицы теперь содержит список из трех элементов, все равные [255 255 255] Такой массив можно представить, как куб, состоящий из слоев строк и столбцов где каждый элемент представляет собой набор из трех чисел Фактически это представление цветного изображения, где 10х]0 это размер (разрешение) изоб ражения в пикселях а [255,255,255] это RGB представление цвета (в данном случае белого)
ватъ библибЧейй^пгстду хОрепСУ (Lv2)7"Hponie говоря, питру поможет создать массив данных a cv2 отобразит его гак тображение Пример № 6: Визуализация изображения при помощи ev2 [ [ ), i ,'],[, , >1 (t II"•‘•I [[255,255,255),[2 55,255,255],[255,255,255] [[ ),[: , '1,1 , , I [[ ),[ , 'J,г . . 1] [[ ],[ , 1.1 , , I ([ ),l , 1,1 , , >1 [[255,255,255],[255,255,255],[255,2 5,2 5]. [[ , 1,[ , ,5,253,(255,255,255], [255 255 255]] [255 255 255]] [255 255 255]] [255 255 255]] [255 255 255]] [255 255 255]] [255 255 255]] [255 255 255]] [255 2SS 255]] ,[255 255 2531] пралпИ) cv2 <4estroyJ22tftn<iows(> Таким образом, удалось создать трехкаиалыюе (цветное) изображение раз- мером 10x10 пикселей В данном случае оно иллюстрирует белый фон Но если изменить значения пикселей на другие значения, то можно увидеть цветные эле- менты на изображении. Стоит заметить, что библиотека питру предоставляет удобные функции для создания тензоров с более компактной записью Это особенно полезно, когда необходимо создать массивы определенного размера и с определенными значе- ниями Одной из таких функций является прfiiilQ Пример № 7: Создание тензора с помощью np.full 1=пр : и SOU , СSS, ((.'. SS,.'. SS,CS'.j ,(CSS,CSS,CSS) ,(CSS, С' ,; $], [.•55,. 5,-55]],[[_‘., 5,-5 5],(255,255,255] , [255,255,255][255,255,255]],[[255,255,255], [255,255,255],[255,25S,2SS], В этом примере используется функция npfallQ, чтобы создать тензор (трех мерный массив) размера 400x500x3 Все элементы массива заполнены зиаче нием 255 и тип данных установлен гак пр шг&8 Это означает что каждый пик сель будет иметь значения RGB (красный, зеленый и синии) равные 255 что соответствует белому цвету Обратите внимание, что сразу указывается
используется для представления значений пикселей (0 255) Ниже предлагается рассмотреть ей»: один пример, в котором показан прин цип окрашивания отдельных фрагментов воображения Пример № 8: Изменение цвета пикселей в тензоре i=np fuiu (400,500,3),255, пр uin(8) 1[50 100,50 100]=(250,0,0) .[150 200,150 200]=(О,255,0) .[250 300,250 Э00]-(0,0,255) Завершающимпримером рассмотрим, как трехмерный тензор, заполненный случайными значениями, может быть выведен как изображение с помощью биб- лиотеки OpenCV Обратим внимание на то, что некоторые функции, представ- ленные в этом и прошлых примерах (cv2.imshowt), cv2 wattKeyfO), cv2 destroyMWmdawsO) подробно будут рассмотрены в следующих разделах Пример № 9: Генерация тензора со случайными значениями 256, зАге-(100, 100, В этом примере сначала импортируем библиотеки cv2 (OpenCV) и numpy Затем мы создаем трехмерный теввор i размером 100x100x3 используя заполняет тензор случайными: । от 0 до 255 которые представляют
нения чисел в диапазоне от 0 до 255, которые соответствуют цветовым значениям После создания тензора выводил его на экран для отладки и выводим размер ностъ тензора с помощью атрибута shape, который показывает, что формат данного массива 100* 100x3 Затем, с помощью функции cv2 imshcw(Image image_tensor) отображаем этот тензор как твображение в отдельном окне с заголовком «Image» Функция cv2 wactKey(O) заставляет протрамму ожидать нажатия любой клавиши, чтобы окно не закрылось мгновенно Функция a>2.destrqyMW'indaws() закрывает все открытые окна после завершения работы программы Использование тензоров позволяет эффективно обрабатывать многомерные данные встречающиеся в компьютерном зрении, и применять более сложные математические операции, такие как свертка. Библиотеки, такие как TensorFlaw и PyTorch, обеспечивают мощными инструментами для работы с тензорными представлениями данных Несмотря на то, что в компьютерном зрении изображения часто рассмотри ваются как тензоры, важно также понимать, как они хранятся в виде файлов Раз- личные форматы файлов, такие как JPEG, PNG, BMP, TIFF, GIF и RAW, имеют свои преимущества и недостатки с точки зрения качества, размера файла и под- держки различных функций. JPEG это формат сжатия с потерями, который идеально подходит для фо- тографий, обеспечивая баланс между качеством и размером файла PNG это формат без потерь, поддерживающий прозрачность и высокое качество, но с бо- лее крупными размерами файлов BMP это простой формат без сжатия, но с большим размером файла TIFF поддерживает различные типы данных, может быть без потерь, но файлы также больше, чем JPEG GIF подходит для простой анимации и имеет ограниченную палитру цветов RAW это необработанный формат, содержащий максимальную информацию о пикселях, но требующий дополнительной обработки Цветовое пространство изображения еще один важный аспект Оно они сывает способ представления цветов в виде набора чисел Различные цветовые пространства, такие как RGB, HSV и CMYK, представляют цвета по разному что влияет на их характеристики и применение RGB широко используется в компьютерной трафике, HSV ориентирован на восприятие цвета человеком a CMYK используется в полиграфии. Выбор цветового пространства зависит от задачи и i эдиться с цветом Видео, в свою очередь, представляют собой последовательность изображе или называемых кадрами Каждый кадр обладает характеристиками статиче скоро изображения, но видео также содержит информацию о времени (кадры в секунду) и звуке Понимание последовательности кадров позволяет системам компьютерного зрения обрабатывать динамичные сцены Основные параметры: яте, частоту кадров формат видео и битрейт Разрешение определяет количество пикселей в каждом кадре
чество передаваемых данных в секунпу Также в видео присутствует аудиодо рожка, которая однако обычно не играет ключевой роли в компьютерном зрении В заключение тензорное представление изображении и видео является клю левым для обработки данных в компьютерном зрении Оно позволяет абстраги роватъся от конкретных форматов файлов и работать с изображениями как с мио гомерными математическими объектами. Это открывает двери для использова ния мощных матем: ые являются основой совре менных алгоритмов компьютд>ного зрения, в частности, нейронных сетей По нимание этого фундамеиталыюго подхода является важным шагом для любого кто хочет углубиться в мир обработки изображений и компьютерного зрения 2.2. Загрузка, отображение и сохранение изображений Прежде чем приступать к сложным алгоритмам компьютерного зрения, необходимо освоить базовые операции чтение и отображение видео- и фотодая- ных Это фундамент, на котором строится вся дальнейшая работа. Практически любая программа, предназначенная для обработки изображений (будь то фото- графии или видео), начинается им еияо с этих этапов Сначала программа должна загрузить данные ж файла (чтение), а затем отобразить их на экране (отображе- ние) для просмотра или дальнейшей обработки Для упрощения и ускорения процесса разработки мы будем использовать мощную библиотеку OpenCV, о которой велась речь ранее OpenCV предостав- ляет широкий набор функций и инструментов, которые значительно облегчат нам работу с изображениями и видео, позволяя сфокусироваться на самих алго- ритмах компьютерного зрения, а не на низкоуровневом программировании В этом учебном пособии мы будем использовать OpenCV кж основной инстру- мент, постепенно осваивая его возможности по мере изучения более сложных концепций Поэтому, начав с чтения и отображения, мы заложим прочную ос- нову для всего последующего обучения Итак Рассмотрим базовый программный код для работы с изображениями Он будет включать в себя операции чтения и отображения данных, необходимые для любой программы обработки медиаконтеига
ского материала и его отображение. То есть очередное написания новой про граммы в компьютерном зрении целесообразно начинать именно с такой зато товки Давайте разберем этот код построчно image = cv2 imreadfltaitinka.jpg') эта строка загружает изображение с име нем kartinkajpg из текущего рабочего каталога и сохраняет его в переменной image Функция im read О возврагдает гвображенпев формате, который можно ис пользовать в коде Вместо 'kartmka jpg) при необходимости нужно указать адрес где находится файл вашего изображения В данном случае изображения kartinka jpg'находится в одной паже с исходным кодом программы cv2 imshowflmage', mage): эта строка отображает изображение в окне с за головкам 'Image' Функция mshaw() принимает два параметра заголовок окна и само изображение. с)2 waitKey(0) • эта строка ожидает нажатия любой клавиши Параметр О означает, что программа будет ждать, пока не будет нажата клавиша. Если ука- зать вместо 0, например,) 0, то программа закроет окно, не дождавшись нажатия клавиши Таким образом, число в скобках определяет задержку времени в мил- лисекундах, прежде чем грограмма завершится cv2 destroyAUWmdowsO: эта строка закрывает все открытые окна Функция destrayMWmdcwe используется для освобождения ресурсов, занятых откры- тыми окнами o)2Mestroy/DWmda>vsO является хоропкй практикой и гаранти- рует чистоту среды после завершения работы программы Эта функция предот- вращает различные потенциальные ошибки (загромождения рабочего стала, ошибки очередного запуска и т д) Если необходимо закрыть только одно кон- кретное окно, можно использовать cv2.destraylVirida>v('wKH_0KHa') Теперь, если нам по какгш-либо гричинам (например, после обработки материала) необходимо сохранить изображения, применим функцию cv2 imwrite(обработанноеji3o6pabeeHuejpg', image) Обратим внимания, что, сохраняя новый файл, мы можем присвоить ему любое название и любой адрес хранения
kartinka2 jpg и сохранив его в том же каталоге. 2.3. Захват видео с камеры и из файла Поскольку видеофайл отличается от статического изображения пипп, тем что видеофайл это множество статических изображении, которые называются кадрами то программа отображения построена по принципу циклического отоб ражения картинок (кадров) Этого мы добьемся при помощи организации цикла В данном случае будем применять цикл While import cv2 строка импортирует библиотеку OpenCV cap = cv2 VideoCaptureCvideorecjmpjr^V) создается объект сор, представ- ляющий видеопоток из файла ‘videorecjmpjnp4' while True начало бесконечного цикла для отображения видеокадров Заме тим, что вместо True мы можем указать любое не нулевое и положительное число Но хорошим тоном при написании на языке Python считается вот такое представление ret frame = cap readf) чтение следующего кадра из ввдеопотока Перемен ная ret указывает, успешно ли было прочитано изображение, a frame содержит сам кадр При необходимости переменную ret мы можем использовать для про верки статуса считывания кадра True успешное считывание False неудачное считывание cv2 imshow( Video frame) создание окна и отображение текущего кадра в окне с заголовком Video' ifcv2waitKey(l)&OxFF==ord('q) проверка на нажатие клавиши q Если клавиша q была нажата, то программа выходит из цикла Заметим чтоклави ша остановки программы может быть любой, например w h 2 ит д
значение cVQ 'ife&tKeyf) мижегбйгь'ббпыае 255 (обычно это 32 битное значе ние) применение операции побитового «И» с ОхЕЕ (255 в десятичной системе) позволяет оставить только младший байт, что соответствует коду нажатой cap release)) ключевая функция в OpaiCVдля освобождения ресурсов за пятых объектом захвата видео (VideoCqrture). После завершения обработки ви деопотока, вызов cap release) освобождает ресурсы, связанные с видеофайлом или веб камерой предоп шеиие программы Отсут । и обеспечивая корректное завер южет привести к проблемам с до 1фу1 стулом к видеофайлу при последующих запусках программы или блокировке ре сурсов cv2 destroyAllWindaws) закрытие всех окон после завершения работы про граммы Как известно, источником видеоматериала может быть либо файл, который был сохранен надиске, либо камера. Для того, чтоб использовать в качестве ис- точника подготовленный видеофайл, в скобках функции cv2 VideoCapture) ука- зываем адрес к материалу cap = cv2.VideoCapture)D \papha\video a>i) Этот при- мер был рассмотрен выше А вот если необходимо использовать материал зв ви- деокамеры, то в строке с функцией cv2 VideoCapture) вместо адреса, по кото- рому хранится видеофайл, необходимо указать порядковый номер камеры cap = cv2 VideoCapturefO) Если камера в системе одна, то порядковый номер равен О, вторая камера имеет идентификатор! нт д В таком случае программа, которая работает с видео, полученным от веб- камеры, будет иметь вид. import cv2 Данная программа захватывает видеопоток с веб камеры отображает его в окне ожидает нажатия клавиши ‘q’ для выхода, азатем освобождает ресурсы и закрывает окна
щии видеофййй'кюд новям именем, применяется функция out wrste() В при мере кода показан синтаксис использования этой функции включая настройку параметров выходного видеофайла, таких как расширение файла и частота кадров Рассмотрим каждую новую функцию ОрепСР, которые представлены в про- грамме out write(frame)- эта функция записывает текущий кадр в видеофайл Для этого заранее был создан объект VideoWnter с параметрами, указывающими фор- мат видео (XVID), частоту кадров (20 0) и размер кадра (640x480) out release)) эта функция освобождает ресурсы, занятые объектом VideoWnter Также важно освобождать ресурсы после завершения записи видео Следует сказать, что представленные примеры кода в этом и предыдущем разделе это не просто демонстрации, а фундаментальные шаблоны базовые «холсты» для построения любых прогр; иллюстрируют ключевые принципы пи заботки видео в ОрепСУ Они зй просмотр кадров управле ние ресурсами (cap releaseQ, outreleaseQ), обработку событий (cv2 waitKeyO) Каждую новую программу по обработке видео целесообразно начинать с подобного шаблона, постепенно добавляя необходимую функциональ этих шаблонов носгь Тщательное изучение и пра нова для освоения более сложных тем компьютерного зрения рассматривав мых далее
iработать ci , 2 первую очередь мы ко всей матрице. К примеру, если производится захват ви = cv2 VideoCapturefO), а далее считывание первого кадра о нужно понимать, что переменная frame не что иное как педовательио, если указать значения индексов в нашем 2(20,30], мы обратимся к пикселю, расположенному по ад стъ необходимость обратиться сразу к нескольким пиксе фрагмент матрицы framefX) 40,30 63] И уже дальнейшие опера зводитъ с прямоугольным фрагментом на кадре размером 20x33 : с пикселями представляют собой различные манипуляции вы I отдельными точками изображения Под модификацией пикселей подразумевается изменение любых их числовых характеристик, включая цвет, яркость и т д Эти операции важны в области компьютерного зрения и обра ботки изображений К основным типам операций с пикселями относятся 1 Извлечение значений пикселей получение информации о цвете или ин- тенсивности пикселя Например, для изображения в формате RGB каж- дый пиксель пр едставп ей тройкой значений (R, G, В) 2 Изменение значений пикселей прямое присвоение новых значений для изменения цвета или яркости пикселя Это может использоваться для коррекции цветов, фильтрации и других манипуляций с изображением 3 Арифметические операции применение математических операций (сложение, вычитание, умножение, деление) к значениям пикселей Это может быть полезно для регулировки контраста, яркости и других ха- рактеристик изображения 4 Логические операции использование логических операций (AND, OR, NOT) для создания масок или выделения определенных областей изоб- ражения Например, бинаризация изображения путем установки порога 5 Фильтрация, применение различных фильтров к пикселям для размы тля, усиления контраста, обнаружения краев и других эффектов Напри мер, применение фильтра Гаусса. или медианного фильтра. Интерполяция вы между существую тцими пикселями Это используется лри изменении размеров изображе ния или повышении его разрешения Морфологические операции применение операций эрозии дилатации открытия и закрытия для вменения формы и структуры объектов на изображении Цветовые преобразования преобразование цветовых пространств например, из RGB в оттенки серого (grayscale) или другие цветовые про странства. и адаптировать статические и видео изображения под нужды конкретных задач в компьютерном зрении
относится К'ЛтраЦессу получения доступ! к отдельным элементам изображения (пикселям) и изменения их -значений. Это важная операция при обработке изоб ражении позволяющая аналжировать и воздействовать на конкретные части изображения включая фильтрацию, улучшение контрастности выделение обь ектов а также для точной настроится и: конкретными требованиями задачи. Напомним что изображение в компьютере представляется как двумер ная матрица (массив) Каждый элемент этой матрицы соответствует одному пикселю изображения Чтобы пот о конкретном пикселе необходимо знать его координаты. Координаты обычно задаются как пара чи сел (х у) где х горизонтальная координата (номер столбца), обычно начинается с О слева, у вертикальная координата (номер строки), обычно начинается с 0 сверху Значение элемента матрицы с координатами (х, у) содержит информацию о цвете этого пикселя В черно-белом (градациях серого) жображении (рис 2 3) это значение представляет яркость пикселя, число от 0 (черный) до 255 (белый) В цветном изображении каждый пиксель обычно описывается тремя значени- ями красным (R), зеленым (G) и синим (В), каждое из которых также находится в диапазоне от 0 до 255 Таким образом, доступ к пикселю это доступ к эле- менту матрицы по его индексам (х, у)
ветствует одному пикселю, ^вменение его значения непосредственно влияет на внешний вид изображения В черно-белом изображении изменение яркости достигается добавлением или вычитанием константы из значения каждого пикселя при этом >ы значения оставались в диапазоне от 0 до 255 В цветном изображении каждый пиксель имеет три составляю щие красный зеленый и синий цвета, изменение этих составляющих позво ляет менять цвет пикселя Ес такие как фильтрация или вы; ации обработки изображении te основаны на изменении зна чении пикселей, часто используя значения соседних пикселей для вычисления нового значения Таким образом, доступ к пикселю и его изменение это базо вая операция, на которой строятся практически все алгоритмы обработки изоб ражений Ниже представлен пример программы работы с пикселями В приведенном примере на языке Python с использованием библиотеки ОрепСГ, доступ к пик- селю осуществляется через индексы строки (у) и столбца (х) изображения Сам пиксель представлен в виде небольшого массива (В, G, R), где каждый элемент массива представляет собой значение цветовой компоненты для изображений в формате BGR (Blue, Green, Red). import cv2 х - 150 После запуска этот ход выведет в терминал три значения цветовых компо нент (В, G, R) для пикселя в указанных координатах (х, у) изображения kartmka jpg Напомним, что отчетиндексов начинается от значения 0, и порядок компонент может зависеть от используемого формата изображения (например BGRhhhRGB) Мы получили информацию о интересующем нас пикселе, давайте перейдем к его модификации (изменению). Если есть необходимость з: вы брат сель другим цветом можно добавить строку tfnage[y, х] = [О, О, 250] и затем вывести изображение на экран чтобы увидеть изменения Таким образом, нам удалось модифицировать пиксель Модификация пик селей в данном случае означает вменение значений цветовых компонент пиксе
Инверсия цвете® заключается в том, что каждая цветовая компонента (си- няя, зеленая, красная) каждого пикселя заменяется та ее дополнение относи- тельно максимального значения Нагример, если у нас есть пиксель с цветом (100,150,200), то после инверсии его значения станут (15 5, 105, 55) Или, проще говоря, вычитание из максимального значения яркости (255) текущего значения яркости и есть операция инверсии цвета. Эта операция проста, но она дает наглядный эффект изменения цветов в изображении В реальных приложениях модификация пикселей может вклю- чать в себя более сложные трансформации, такие как коррекция яркости, кон трасгности, насыщенности, а также фильтрацию, размытие и другие методы об рабатки изображений в зависимости от конкретной задачи В примере ниже изображение загружается, и для каждого пикселя происходит инверсия цветов Эго простой способ модификации пикселей кого рыи может быть использован в более сложных алгоритмах обработки изобра Отметим, что задачу модификации пикселей через инверсию цветов кого рая применяется ко всей матрице, можно и решить одной функцией cv2 biwise_not() >вое отрицание для каждого пикселя изображения Это означает, что каждый бит двоичного представления значения пикселя (0 или 1) инвертируется (0 становится 1, а 1 становится 0) По дробнее мы рассмотрим в глазе 3 «Методы обработки изображении»
По сути, данный пример программы демонстрирует возможность арифме- тических операций над пикселями Кроме того, различные арифметические операции над пикселями способны изменять их яркость и цвет К таким операциям относятся сложение, вычитание, умножение и деление значений пикселей на константу или на значения других пикселей Сложение увеличивает яркость, вычитание уменьшает, умножение усиливает контраст, а деление смягчает его Эти операции могут применяться к каждому цветовому каналу (красный, зеленый, синий) независимо или ко всем одновременно Кроме того, можно комбинировать эти операции, например, сна- чала прибавить константу ко всем каналам, а затем умножить каждый канал на отдельную константу Также возможно применение попиксельного сложения, вычитания, умножения и деления одного изображения на другое, что позволяет создавать интересные эффекты наложения и смешивания Важно помнить о диа- пазоне значений пикселей (обычно 0 255) и контролировать, чтобы после опера- ций значения оставались в пределах этого диапазона Арифметические опера- ции, особенно сложение и умножен», могут привести к выходу значений запределы этого диапазона. Если значения становятся меньше 0 или больше 255 это может вызвать неверное отображение цвета. Для корректной обработки таких ситуаций можно использовать функции cv2 saturate _cast из OpenCV или гр clip из библиотеки numpy, которые приводят значения в допу стимыи диа пазон (см Приложение) 2.5. Основные операции с изображением 2 5 7 Изменение размера изображения Изменение размера изображения относится к процессу изменения физиче ских размеров изображения Этот процгсс может включать увеличение или уменьшение размеров изображения в пикселях без изменения его содержания
ры экрана, требования социальных сетей или оптимизации для веб страниц Предположим у вас есть изображение размерил 1000x800 пикселей вы хо тите его уменьшить до 500x400 пикселей. При этил вы можете использовать про граммы для трафичеакого дизайна, такие как Adobe Photoshop или библиотеки в языке программирования Python, чтобы выполнить операцию изменения раз мера В результате изображение будет сохранять свою форму, но физически уменьшится до новых размеров. В библиотеке OpenCV эти задачи решает функция cv2 resized как для ста- тических изображений, таки для видео. Ниже приведен пример программы, в которой организовано считывание изображения kartinka jpg и сохранение его с новым разрешением под именем kartmka_nov jpg new_slse (500, 400) cv2 resizefonginaljmage, new_stze) это функция библиотеки OpenCV в Python, используемая для изменения размера изображений Функция принимает три основных параметра исходное изображение (в данном примере переменная original-image), желаемый размер выходного изображения new_sze и необяза- тельный метод интерполяции Функция cv2 resizef) принимает как минимум два обязательных параметра исходное изображение (в данном примере original—image) и желаемый размер выходного изображения fnew_sze) Третьим, необязательным параметром явля ется метод интерполяции Интерполяция в контексте изменения размера изображения это процесс определения значений пикселей в пикселей в исходном изображении. Когда мы увеличиваем или уменьшаем размер изображения, нам часто нужно создавать новые пиксели или отбра сывать существующие, и именно интерполяция определяет как это будет про исходить Существует несколько мет каждый из которых имеет свои особенности и подходит для разных ситуаций Самые распространенные
от ближайшего пикселя в исходном щображении. Он быстр но часто приводит к появлению ступенчатых контуров (артефактов), особенно при увеличении изображения Билинейная интерполяция (cv2 INTER_LINEAR) этот метод берет значения четырех ближайших пикселей в исход ном изображении и вычисляет среднее зиа чение взвешенное по расстоянию до нового пикселя Результат получается более сглаженным чем при ииге дом, и подходит для боль шинства применений Бикубическая интерполяция (pv2JNTER_CUBIC) этот метод использует 16 ближайших пикселей и полиномиальную функцию для вычисления значения нового пикселя Он дает более качественный результат, чем билинейная интер поляция, с меньшим количеством артефактов, ио требует больше вычислитель ных ресурсов Интерполяция Ланцоша (cv2JNTER_LANCZOS4) это более сложный и ре- сурсоемкий метод, который дает очень хорошие результаты при уменьшении и увеличении изображений Он особенно подходит для случаев, когда требуется высокая точность и минимизация артефактов При использовании функции cv2 resized, если метод интерполяции не ука- зан явно, библиотека CpenCV применяет билинейную интерполяцию по умол- чанию Выбор подходящего метода интерполяции зависит от конкретной за- дачи и требований к качеству изображения Для простых задач, таких как мас- цпабирование для веб-страниц, билинейной интерполяции может быть доста- точно Если же требуется более высокое качество, особенно при увеличении изображений или их обработке для машинного обучения, стоит рассмотреть би- кубическую интерполяцию или интерполяцию Ланцоша Важно понимать, что более сложные методы интерполяции, такие как бикубическая или Ланцоша, требуют больше вычислительных ресурсов и могут занимать больше времени В контексте работы с видео, это может влиять на производительность обра- ботки кадров Теперь рассмотрим пример программы изменения размера видеокадра Предлагается в качестве источника видеоданных использовать веб камеру (cap = cv2 VideoCaptureip)) В программе создаем два выходных окна (cv2 unshow) в окне с названием Video 1 отобразим видео с разрешением 1280 на 720 в окне с названием Video2 отобразим видео с разрешением 640 яа480 После чего сохраним видеофайл второго окна с именем video avt
W3S»t fourcc = cv2 VideoWrrterf<Mrcc(*'XVlD) - эта строка устанавливает кодек для видеофайла В данном случае, используется кодек XVID, который является популярным кодеком для сжатия видео с потерей качества Другие существую- щие кодеки можно подобрать из приложения в конце книги out = cv2 VideoWriter("videojwi",fourcc, 20/), stze2) зцеаь создается объект Video Writer, который предназначен для записи видео в файл Аргументы "video avi” имя файла, в который будет записываться видео, fourcc кодек для видеофайла, 2D 0 количество кадров в секунду (FPS) для видео, size? - размер кадров видео Таким образом, fourcc и out работают вместе для установки параметров за писи видео, включая формат файла, кодеки другие параметры Результат выполнения программы изменения размера виде лен на рис 2 4 >а представ В данном примере также можно задействовать один из методов интерполя ции Например resized frame = cv2 restzefframe, stze, cv2 INTERfUBIC) Следует обратить внимание, что при несоблюдении пропорциональности в изменении размера изображения его объекты могут исказиться что в даль неишем может повлиять ж качество и стабильность их обработки Поэтому следует обращать внимание на симметрию в преобразованном изображе
Рисунок 2 4 - Результат выполнения программы изменения размера видеокадра 2.5.2 Обрезка изображения Обрезка изображения это процесс выделения и сохранения только опреде- ленной части изображения, игнорируя остальные области Обрезка изображений в компьютерном зрении используется для решения нескольких задач во-первых, для выделения и фокусировки на конкретных об- ластях интереса (ROI Region of Interest), и во-вторых, для уменьшения размера данных и улучшения эффективности обработки за счет удаления ненужных ча- стей изображения Принцип обрезки изображения с использованием библиотеки OpenCV включает в себя следующие шаги 1 Загрузка исходного изображения с помощью функции cv2 imreadt) 2 Определение прямоугольной области для обрезки, заданной координа тами crop_box 3 Выполнение обрезки области изображения 4 Сохранение обрезанного изображения с помощью cv2 mwriteQ Рассмотрим пример программы, в которой осуществляется обрезка задан нои области
image_path = "kartmka jpg"—s tyx> image_path с путем к файлу изображения "kartinkajpg" Это путь к файлу, который вы хотите обрезать originaljmage = с>2 imread(image_path) считывает изображение с помо щью функции с v2 imreadO из указанного пути (image_path) и сохраняет еговпе ременной originaijmage bax = (500,100, 600,250) определяет переменную crop_bax, которая пред ставляет собой кортеж с четырьмя значениями (xl, yl, х2, у2) Эти значения представляют собой координаты левоговерхнего угла(х1, у 1) и правого нижнего угла (х2, у2) области для обрезки В данном случае, обрезаемая область начина ется с (500,100) и заканчивается в (600,250) cr<ppedjmage= originaljmage[bac[l]:bac[3J Ь<ж[0] bax[2J] используя срезы массива NurnPy, извлекаем из оригинального изображения (originaljmage) только ту область, которая соответствует определенному crop_bax Здесь [Ьах[1 ].Ъас[3] bac[0]:bax[2JJ указывает на выбор части изобра- жения в диапазоне от у] доу2 по вертикали и от xl до х2 по горизонтали cv2 imvmte("obrezannoejzcbrazheniejpg" croppedjmage) сохраняет обре- занное изображение (croppedjmage) в файл “obrezannoejzobraz'nenie jpg" с по- мощью функции cv2.imwnte(). Процедура обрезки кадравидео аналогична обрезке статического изображе- ния, с тем лишь отличием, что для видео обрезка применяется к каждому кадру в цикле
Рисунок 2 S - Результат выполнения программы обрезки фрагмента видеокадра Подведем итог обрезка изображений не только выделяет интересующие об- ласти, но и значительно повышает эффективность обработки, позволяя сосредо- точить ресурсы на ключевых участках, что особенно важно для машинного обу- чения Интерактивная обрезка и нестандартные формы, такие как обрезка по маске, открывают дополнительные возможности, но при этом важно помнить о сохранении пропорций, чтобы избежать искажений Понимание этих нюансов делает обрезку мощным инструментом для решения различных задач компью 253 Вращение изображения Вращение изображения представляет собой процесс изменения угла поло жения изображения относительно его начальной ориентации. Вращение изображения часто применяется для коррекции ориентации устранения наклонаили перевернутого положения, атакжедля аугментации дан ных при обучении моделей машинного обучения, чтобы повысить их устоичи вость к разным углам обзора. В библиотеке OpenCV для реализации процедуры вращения изображения применяют функцию cv2.getR<XationMatra2D{)
хо димую дйй арйщения жгображения .вокруг определенной точки с заданным уг лом и коэффициентом масштабирования. Ниже представлен пример программы вращения статического изображения import cv2 импортируют библиотеки OpenCV (cv2) mage_path = "kartmka.jpg"- задает переменную mage_path с путем к файлу изображения " kart тка jpg". ongmaljmage = cv2.imread(magejxeh) считывает изображение с помо- щью функции с т read О из указанного пути (image_path) исохраняег егозпе- ремвнной ongmaljmage angle = 25 задает переменную angle со значением 25 градусов, которое представляет угол вращения rotationjnatnx = cv2 getRotationMairu2D((width / 2, height 12), angle, 1) используется функция cv2.geiR0tationMatrtc2D для определения матрицы преоб разования, которая будет использоваться для вращения изображения Параметры включают центр вращения (width /2, heigh/ 2), угол angle и масштабный коэф фициент 1 (без изменения масштаба) ratatedjmage = cv2waipAffine(onginaljma^, raation_matrK, (width, height)) используется функция cv2 warpAffine для 1 определенной матрицы преобразования Результат сохраняется в переменной cv2imwrrte( vraschennoejzobrazhemejpg", rctatedjmage) сохраняет по вернутое изображение в файл "vraschermoejzcbrtaheniejpg" с использованием функции cv2 imwnte() Теперь перенесем эти операции для обработки видеокадра в потоковом ви йк и раньше отличие состоит в том, что операции преобразования будем
Результат выполнения программы вращения видеокадра, полученного с веб-камеры, представлен на рис 2 6 Следует отметить, что при вращении тображения могут обрезаться углы по скольку повернутое изображение выходит за рамки исходных границ (см рис 2.6) Чтобы избежать потери информации, часто применяют масштабирование
нения коэффициента масштаба в функции cv2g&RatcitionMatrix2D( что позво ляет сохранить структуру изображения без потери углов Более детальный обзор функции cv2^etR<XationMatrix2D() представлен в Приложении данной книги 25.4 Отражение изображения Отражение изображения это процесс создания зеркальной копии изобра жения путем изменения порядка пикселей относительно горизонтальной или вертикальной оси Отражение изобр: (еняегся как для коррекции ориентации например, для исправления зеркально отображенных изображении, так и для аут меитации данных, что позволяет увеличить разнообразие тренировочного набора данных в задачах машинного обучения В примере ниже используется функция cv2flipO. которая позволяет отра- зить изображение относительно вертикальной, горизонтальной оси или обеих осей одновременно liripoxt cv2 Здесь функция flippedfiiomattai = cv2.fiip(originai_image, I), fttpped_hori zontal = cv2flip(origmal_imag,e, 0), flippedJtortzontai = cv2flp(ortgmaljmage -1) демонстрируют различные варианты отражения изображения вокруг горизон тальнои и вертикальной осей горизонтальное О' ние горизонтальное и вертикальное отражение Применим этот принцип на видео , вертикальное отраже
Результат выполнения программы вращения фрагмента видеокадра пред ставлен на рис 2 7 Рисунок 2 7- Результат выполнения программы отражения видеокадра по горизонтали Более детальный обзор функции cv2.fiip) представлен в Приложении дан Отражение изображении это не только простой способ создания зеркаль ных копий, но и важный инструмент для р< ых задач Помимо кор рекции ориентации и аугментации данных, отражение может использоваться для создания интересных визуальных эффектов, таких как симметричные узоры или калейдоскопические композиции. При работе с отражением также стоит учиты ватъ что горизонтальное и верт : могут по разному влиять на восприятие изображения, особенно если на нем есть текст или объекты с опре деленной ориентацией В некоторых случаях, например, при распознавании тек ста, необходимо быть особенно внимательным к тому, как отражение влияет на читаемость символов Более того, отражение по обеим осям эквивалентно пово роту изображения на 180 градусов, что может быть полезно для упрощения не которых алгоритмов обработки изображений.
Конкатенация изображений, или, пролег говоря, «склеивание» изображе нии, это фундаментальная операция в арсенале компьютерного зрения позволя тощая объединить несколько изображений в одно Это подобно тому как если бы вы соединили несколько пазлов, чтобы получить облито картину но в нашем случае это делается с цифровыми жображениями В отличие от простых опера ции с отдельными пикселями или трансформациями одного изображения конка тенация работает с целыми массивами пикселей, представляющими собой от дельные изображения, и позволяет сформировать из них новое, более крупное Основной принцип конкатенации достаточно прост мы берем несколько изображений и располагаем их рядом друг с другом Это может быть горизон тальиое расположение (когдаизображеиия «приклеены» слеваяаправо) или вер шкальное (когда изображения располагаются одно над другим) Также воз можиы и более сложные схемы, когда изображения располагаются в виде сетки Представьте, что у вас есть несколько фотографий, н вы хотите сложить их в альбом Конкатенация изображений это цифровой эквивалент этого процесса. И так как все происходит в цифровом мире, то этот процесс можно автоматизи- ровать, и, в отличие от фотоальбома, результаты можно использовать для даль- нейшей обработки Технически, конкатенация изображений представляет собой операцию с матрицами пикселей Каждое изображение представляет собой двумерную мат- рицу, где каждый элемент матрицы это значение пикселя (например, цвет в формате RGB или яркость в оттенках серого) При конкатенации эта матрицы пикселей «склеиваются» другсдругом в соответствии с выбранной ориентацией Для горизонтальной конкатенации матрицы выстраиваются по горизонтали, ито- говая матрица становится шире Для вертикальной выстраиваются по верти- кали, и итоговая матрица становится выше. Важно отметить, что конкатенация изображений требует, чтобы все изобра жения, которые мы хотим соединить, имели одинаковое количество цветовых каналов (например, все RGB или все в оттенках серого) Кроме того, если вы конкатенируете по горизонтали, то изображения должны иметь одинаковую вы соту если по вертикали то одинаковую ширину Если эти условия не въшол йены то перед конкатенацией может потребоваться дополнительная обработка, например изменение размера изображений или добавление «пустых» областей Конкатенация изображений открывает множество возможностей в компью терном зрении Она используелся, например, для создания панорамных изобра женин путем объединения нескольких фотографий, для объединения разных ра курсов одного объекта, или для создания мозаик изображений Также в пракги ческом контексте она используется для сравнения изображении когда их разме щают рядом друг с другом для бс за Конкатенация это инструмент который позволяет нам «видеть» больше, чем было бы возможно
дач компыййфкого зрения Для наглядной демонстрации работы конкатенации изображении рассмог рим пример с двумя фотографиями, имеющими одинаковую высоту но различ корректно объединить только по горщонтапи, располагая их рядом В данном примере будут использованы библиотеки СргпСРи NimPy Рисунок 2 8 - Исходные фотографии для демонстрации конкатенации Представленный ниже ход демонстрирует базовую конкатенацию, однако для объединения изображений различной длины необходимо выполнить допол- нительные проверки и, возможно, масштабирование Ниже приведен упрощен- ный код, который показывает, что произойдет, если попытаться объединить изображения различной длины напрямую, без дополнительных проверок cv2 numpy import import concai enst e ((image 1, lmage2), axxs»l) Здесь mage = numpyxicncatenateffimagei, mage?), aas=i) функция numpy concatenate() объединяет массивы magel и image? по горизонтали (eras—1)
Ofans-O),тогда будет произведена попытка о в этом случае, для корректного вертикаль жны иметь одинаковую ширину а поскольку в нашем примере ширина изображений разлиш Результат работы программы приведен на рис. 2.9 Рисунок 2 9 - Результат работы программы конкатенации изображений Таким образом, для корректной конкатенации изображений необходимо учитывать их размеры и, в частности, при горизонтальном объединении убе- диться в одинаковой высоте, а при вертикальном - в одинаковой ширине, а для работы с изображениями разных размеров следует предварительно применять обрезку, добавление пустых областей или масштабирование, функции, которых рассмотрены ранее. Практическое задание Задание 1 Повторите программный код в котором создаются тензоры раз ных размеров Экспериментируйте с размером и элементами массивов Задание 2 Напишите программу, которая захватывает видеоизображение с веб камеры и выводит его без изменений в 4 окна «Fideo! », «Vtdeo2», « Video3» «Video4» Задание 3 Напишите программу, которая захватывает видеоизображение с веб камеры и выводит его в 2 окна, окно с оригинальным изображением и окно с изображением измененного размера. Предоставьте возможность выбора ме тода интерполяции при изменении размера. Задание 4 Напишите программу, которая захватывает видеоизображения с веб камеры и выводит это изображение в 2 окна, окно с оригинальным изобра жением и окно с обрезанным фрагментом воображения Предоставьте возмож ностъ задавать область о( и наблюдайте изменения ры обрезки (координаты)
с изображением повернутым на 32° по часовой стрелке Реализуйте! изменять угол поворота Измените угол поворота и наблюдайте за и Задание б Напишите программу, которая захватывает вццеоиз веб камеры и выводит его в 3 окна окно с оригинальным изображе отраженным по вертикали изображением и окно с отраженным по изображением Измените параметры отражения (вертикальное/гор! и наблюдайте изменения Задание 7 Напишите программу, в которой захват видео осуществи: с веб камеры На экран выводится четыре окна с разным отображением виде териала. оригинальное, обрезанное в районе центра кадра (область обр должна занимать половину от общего размера кадра), с вращением на 90° и с раженное по горизонтали Разрешение видео установите 1280 на’ Задание S Ншлшпте программу, в которой захват видео а веб-камеры На экран выводится одно окно с изображением, хот вращается вокруг центра, изображения. Задание 9 Напишите программу, которая захватывает видеоизображения с веб-камеры и выводит его в 4 окна, окно с оригинальным изображением, окно с отраженным по вертикали изображением, окно с отраженным по горизонтали изображением и окно с отраженным по горизонтали и вертикали одновременно Затем объедините все 4 изображения в одно окно при помощи процедуры конка- тенации Задание 10* Напишите программу для микрокомпьютера, в которой захват видео осуществляется с двух Й1Р1-камер Выведите изображения в два окна Задание 11* Перенесите задачу задания 6 на платформу микрокомпьютера Raspbeny Pi (или другого конкретного микрокомпьютера, указанного в зада- нии 8) с использованием MIPl-хамеры Задание 12 Напишите программу’, которая захватывает видео с веб-камеры и создает «калейдоскоп» из этого видео Программа должна отображать не- сколько окон (например, 4 или 9), каждое из которых показывает отраженный, повернутый или обрезанный фрагмент исходного изображения Поэксперимен тируйте с разными комбинациями преобразований для создания уникальных ка лецдоскопических эффектов
3. МЕТОДЫ ОБРАБОТКИ ИЗО БР АЖЕ Н И И 3.1. Преобразование между цветовыми пространствами Преобразование между цветовыми пространствами в компьютерном зре это изменение представления цветов из одмэй системы в другую С математической траяство это многомерная система координат, в которая каждый цвет цредставлея точкой в этом простран стве определяемой набором' : (координат) Эти координаты соответствуют определенным характеристикам цвета, таким как интенсивность основных цветов (например, в RGB), оттенок, насыщенность и яркость (напри мер, в HSV) или другие цветовые твраметры. Различные цветовые пространства представляют цвета по-разному, и каждый из них подходит для различных задач Выбор конкретного цветового пространства зависит от поставленной задачи и желаемого способа обработки цветовой информации Преобразование между цветовыми пространствами может быть необходимо по различным причинам, таким как адаптация изображений для особенностей восприятия человеческого глаза, улучшение сегментации объектов на изображе- нии, а также совместимость с требованиями конкретных алгоритмов обработки изображений OpenCV предоставляет функцию cv2jMColor(, которая используется для преобразования цветового пространства изображения Основным аргументом данной функции является код цветового пространства, который может выглядеть по-разному в зависимости от необходимости преобразования в то или иное цве- товое пространство Вот некоторые примеры, которые применяются наиболее часто в компьютерном зрении cv2 COLOR_BGR2GRAY преобразовали: из BGR в оттенки серого cv2 COLOR_BGR2RGB преобразование из BGR в RGB cv2 COLOR_BGR2HSV преобразование из BGR в HSV cv2 COLOR_BGR2LAB преобразование вв BGR в LAB cv2 COLOR_BGR2YUV преобразование из BGR в YUV cv2 COLOR_BGR2HLS преобразован® из BGR в BLS cv2 COLOR_BGR2XYZ преобразование из BGR в XYZ cv2 COLOR_BGR2LUV преобразование из BGR в LUV o2 COLOR_BGR2YCrCb' преобразование m BGR в YCiCb cv2 COLOR_BGR2HSV_FULL полная версия преобразования из BGR в HSV cv2 COLOR_BGR2HLS_FULL полная версия преобразования из BGR в HLS cv2 COLOR_BGR2YUV_I420- преобразование из BGR в YUV 1420 cv2 COLOR_BGR2 YUV_YV12 цзеобразование из BGR в YUV YV12
пространстВ3нйфимер, ci>2 COLOR_BGR2HSV_FULL, указывает на то что в от личие от стандартного преобразования, полная версия сохраняет все значения цветовых компонентов без изменений. Стандартное преобразование используе мое функцией cv2 cvtCoIorf) без суффикса _FULL, может применять урезание диапазонов или нормализацию значений. Урезание диапазонов ограничивает значения цветовых компонентов при водя их к допустимым границам (например, от 0 до 255 для S битных изображе или) чтобы они соответствовали диапазону, выделенному для хранения Норма лизация в свою очередь, масштабирует значения к определенному диапазону что упрощает дальнейшую обработку, обеспечивая сопоставимый вклад каждого канала Эти действия оптимизируют хранение и обработку данных, но могут приве сти к потере части информации Суффикс _FULL отключает урезание и норма лизацию, сохраняя исходные значения. Выбор между стандартным преобразова нием и использованием _FVLL зависит от конкретной задачи _FULL позволяет сохранить исходные данные, но может потребовать дополнительной обработки, если значения выходят за допустимые пределы. стандартное же преобразование обеспечивает соответствие стандартным диапазонам, но может повлечь за собой потерю части информации Рассмотрим простую программу, в которой над исходным изображением kartinkajpg происходит преобразование из BGR в оттенки серого После чего изображение выводится на экран и сохраняется в файл с названием kartinkuJSray jpg import cv2 gr_Image - ev2 eveColor(image, cv2.CdLOR_BO₽2e₽AY) Как и другие рассматриваемые функции библиотеки OpenCV функция cv2 cvtColorf) также работает для видеокадров Рассмотрим программный код.
Данный код открывает видеопоток с веб-камеры (номер 0), считывает каж- дый кадр (frame), преобразует его в различные цветовые пространства (с ориги- нального в оттенки серого (GRAY), HSV и LAB) с использованием функ- ции cv2 crtColar(), азатем отображает четыре окна, видео с оригинальным изоб- ражением и его версиями в разных цветовых пространствах (рис 3 1)
Преобразования между жкоторыми цветовыми пространствами могут привести к потере информации. Например, при переходе из цветового пространства RGB в оттенки серого (градации серого) теряется цветовая информация Выбор подходя: ства зависит от конкретной за дачи Например, пространство HSV часто используется для работы с цветом а пространство LAB может быть полезным для выделения объектов на изображении. Некоторые пространства цветов имеют ограниченный диапазон значе ний для каждого канала. При преобразовании может произойти обрезка значений, что мож Иногда требуется: артефакты в изображении вать значения цветовых компонентов в со При многократных преобразованиях между различными цветовыми пространствами может возникнуть (скопление ошибок, что, в свою оче- редь, скажется на точности и качестве изображения При преобразовании в различные цветовые пространства, важно выби- рать празильныеханалы, которые соответствуют конкретным потребно- стям задачи 3.2. Цветовая коррекция Цветовая коррекция изображений это процесс изменения цветовой па- литры фотографии или видео с целью улучшения ее визуального восприятия Она позволяет скорректировать баланс цветов, насыщенность и яркость для до- стижения более естественного или желаемого визуального эффекта. Цветовая коррекция необходима по нескольким причинам Во-первых, фо- тоаппараты и камеры могут зафиксировать цвета не так, как мы видим их в ре алъной жизни Во вторых, различные источники освещения (дневной свет лампы, вспышки) могут влиять на цветовую гамму снимка. Цветовая коррекция помогает привести цвета к более естественному виду или создать специфический Принцип цветовой коррекции основан на том, что цвета на изображении представлены комбинацией трех основных цветов красного, зеленого и си него (RGB) Изменяя интенсивность каждого из этих цветов, мы можем воздеи сгвовать на окончательный цвет воспринимаемого изображения Например фотография сдепаиаподразными источниками света, и цвета вы глядят нереально Используя: текции можем подогнать баланс цветов и сделать цветогкредачу более естественной Или ваше фото ка жется блеклым и ненасыщенным. Увеличивая насыщенность можем сделать цвета более яркими и насыщенными.
наоборот йфёбйченное Благодаря коррекции яркости и контраста, вы можете подогнать общую яркость изображения. Также можно поступить с изображены ями тона которых или сл или слишком теплые Балансировка красного и синего цветов может исправил, эту проблему Рассмотрим простой: >ый демонстрирует увеличение насыщен । цветового пространства HSV Выражение framel[-, , 1] =framel[:, 1] “О 3 <тк>аякя к цветовой кор рекции изображения, конкретно к изменению насыщенности Это часть массива_/га»ге/, который представляет собой изображение в цве товом пространстве HSV В данном случае, 1 ] выбирает все пиксели в изоб ражении, но только из второго канала, который отвечает за насыщенность цве frame [ значения пикселей в выбранном канале насыщенности умножаются на 0 3 Это уменьшает интенсивность цветов в этом канале Соот ветственно если этот коэф( [ 1,5, то насыщенность увеличится на 50 % Если значение пикселя было, натфимер, 100, после умножения оно ста frame[ — значения, которые мы получили после умножения затем присваиваются обратно в исходный массив в тот же самый канал насыщенности Таким образом мы изменяем исходное изображение, уменьшая/увеличивая насыщенность второго канала.
Рисунок 3 2 - Пример применения коррекции света Давайте рассмотрим, что представляют собой различные цветовые каналы в пространстве цветов BGR н HSV, которые могут быть вами использованы В цветовом пространстве BGR Канал 0 (В1ие)./гегие2[., .,0] содержит интенсивность синего цвета для каж- дого пикселя Высокие значения в этом канале делают пиксели более синими Канал 1 (Green): framel[:,I] содержит интенсивность зеленого цвета для каждого пикселя Зеленый цвет влияет на яркость и зеленоватость изображения Канал 2 (Red) framel[:,2] содержит интенсивность красного цвета для каждого пикселя Высокие значения в этом канале делают пиксели более крас- ными, В цветовом пространстве HSV Канал ОН (Hue) представляет оттенок цвета (0 360градусов), т е к какому цвету принадлежит пиксель Канал 1 S (Saturation) представляет насыщенность цвета (0 100 %), т е насколько цвет яркий Канал 2 V (Value) представляет яркость (0 100 %), т е насколько светлым или темным является цвет В данном случае цветовое пространство HSV обеспечивает интуитивно по нятную манипуляцию цветом, позволяя доводить точную коррекцию цвета сег ментироватъ объекты и оставаться устойчивым к изменениям яркости Отметим, что изменение зжчеинй в этих каналах позволяет маиипулиро вать цветовым балансом изображения ипроводить цветокоррекцию 3.3. Фильтрация цветов и цветовая сегментация Фильтрация цветов и: [ этапами об работки изображений в области компьютерного зрения Эти техники позволяют выделять объекты и структуры на изображении, основываясь на их цветовых
Фильтрация цветов направлена на выделение или подавление определенных екты обладают характерными цветовыми свойствами Фильтрация цветов и цветовая сетмеягация играют важную роль в различ ных отраслях компьютерного зрения В автотранспорте они используются для распознавания дорожных знаков и светофоров, что помогает автомобилям при ниматъ решения на дороге. В меди помогают анализировать ме дицинские изображения, такие как рентгеновские снимки или снимки с меди цинских сканеров, для выявления патологий и диагностики заболевании В же лезнодорожной отрасли фильтрация цветов и цветовая сегментация использу ются для мониторинга и анализа состояния рельсов, детекции дефектов и обес печения безопасности на железнодорожных путях В беспилотной авиации эти методы помогают БИЛА анализировать окружающую среду, идентифицировать объекты на земле и принимать решения в реальном времени для безопасного и эффективного выполнения задач Все эти примеры демонстрируют широкий спектр применения фильтрации цветов и цветовой сегментации в различных об- ластях, от управления транспортом дом едицижких исследований и обеспечения безопасности Наиболее распространенными методами фильтрации цветов являются фильтрация по порогу и морфологические огерации Фильтрация по порогу (Thresholding). Этот методзаключается в установке порогового значения для каждого цветового канала Пиксели, чьи значения цве- тов находятся выше порога, считаются интересующими, тогда как остальные по- давляются Морфологические операции. Применение операций, таких как расширение и сужение, для выделения или уменьшения объектов на основе их цветовых ха- рактеристик Это помогает улучшить контуры объектов и убрать нежелательные детали Ниже рассмотрен пример программы, которая выполняет выделение объек тов зеленого цвета из видеологока. Это достигается путем применения функ ций cv2 inEangeO и см2 bitwise_andf). uppergreen = пр array([148, 100,200])
cap = ci>2 VideoCapture(O) эта строка открывает ввдеопоток с веб камеры (номер 0) lower_green = гр аггау([4О, 40,40J, upper_green = пр array([8O 255 255]) - эти строки задают диапазон зеленого цвета в пространстве HSV Значения ниж- ней и верхней границ определены в массивах созданных с помощью функции пр аггарО библиотеки NumPy (см Приложение) ret, frame = cep.rearff)-эта строка считывает кадр из ввдеопотока. ret флаг успешного считывания, frame считанный кадр hsvframe = cv2.<ytCdor(frame, cv2 COLOR_BGR2HSV) преобразует цве- товое пространство кадра in BGR в HSV mash = cv2 tnRange(hsvframe, lower£reen, upper_green) создает маску, в которой значения в предел ах заданного диапазона остаются белыми, а вне диа- пазона становятся черными result = cv2 bitwise_and(frame, frame mask=mask) применяет маску к ори- гинальному кадру, выделяя только обьекты зеленого цвета В этой строке, cv2 bitwise_andвыполняет побитовое "И” между двумя изоб- ражениями (frame яframe) с применением маски (mask) Дважды указанное изоб- ражение frame обозначает исходный кадр, который в конечном итоге будет ис- пользоваться для создания обработанного кадра result Это сделано для того, чтобы сохранить цветовую информацию только там где маска равна 1 (белый пиксель), и обнулить цвет в местах, где маска равна 0 (черный пиксель) Таким образом, cv2.bitwise_and(frame,frame, mask=mask) при меняет маску к оригинальному кадру, сохраняя только те пиксели которые соответствуют зеленому цвету в оригинальном кадре Когда мы уз мы говорим функции, что маску для one рации "И" нужно брать из переменной mask Эго означает, что для каждого пик селя в исходном изображении и юображении, с которым выполняется опера ция "И" применяется соответствующий пиксе селя в маске равно 1 (белый), то соответствуют сохраняется в результате, иначе (если значил® ими) результат будет равен О ш маски Если значение пик в маске равно О
вого "И" с оригинальным кадром (frame) Это позволяет виде гласти изображения, которые соответствуют заданному диапа программе ключевыми функциями является cv2 mRangpQ и 10 Боле детально они описаны в Приложении в конце данной Результат работы рассмотренной программы представлен на рис 3 3 в двух вариантах выделения зеленого и красного цветов на изображении Если цветовая фильтрация направлена на выделение или подавление опре деленных цветов на изображении, используя порога или другие техники, то цве товая сегментация разделяет изображение на различные цветовые области, со здавая маску, отмечающую пиксели со схожими цветовыми характеристиками Она может использовать цветовую фильтрацию, а также другие методы, такие как кластеризация Цветовая сегментация помогает выделить объекты различ пых цветов на основе их цветовых свойств Цветовая сегментация это процесс разделения изображения на различные цветовые области или сегменты. Этот метод позволяет выделять объекты раз
цветовых пространств Например, кластеризация позволяет сгруппировать пик сели имеющие схожие цвета в определенном цветовом пространстве Рисунок 3 4- Примеры применения сегментации в разных отраслях Чтобы лучше понять универсальность и практическую значимость цвето- вой сегментации, мы рассмотрим несколько примеров ее применения в раз- личных областях Эти примеры помогут увидеть, как методы, которые вы только что рассмотрели, используются в реальном мире и для релтения разно- образных задач, от сохранения культурного наследия до обеспечения качеств а продуктов Цветовая сегментация находит применение не только в современных техно- логиях, но и в неожиданных областях, таких как археология и искусствоведение При аиалже древних фресок и картин этот метод помогает выделить различные слои краски или детали, которые со временем стали плохо различимы Это поз воляет ученым восстанавливать оригинальный вид произведений искусства и лучше понимать техники, которые использовали древние мастера В пищевой промышленности цветовая сегментация используется для авто манкированного контроля качества. Налриаер, она применяется при сортировке фруктов и овощей по цвету, помогая отделить спелые от неспелых или повре жденных Это не только ускоряет процесс, но и помогает стандарты качества продукции, что особенно важно в ма В биологии и медицине цветовая сегментация игр: анализе микроскопических изображений. При исследо или крови она помогает выделить отдельные клетки ил огромное значение для, низуче цессов Это делает данный метод незаменимым инструк следовании
ных команд по цвету формы. Эго: анализировать стратегии игры тра екгории движения спортсменов, а также другие важные игровые моменты кото рые в дальнейшем помогают командам и тренерам совершенствовать свои навыки Интересно отметить, что цветовая сегментация, хотя и кажется техническим процессом применяется в самых разных областях От археологии, где онапомо гает восстанавливать древние фрески, до пищевой промышленности где она контролирует качество фруктов, и даже в спорте для анализа игровых моментов В медицине сегментация лоз I на микроскопических из об ражениях что имеет огромное значение в диагностике Это демонстрирует уни версальноатъ и широту прим енення этого метода. 3.4. Инверсия изображения Ранее мы рассматривали инверсию и ее применение в контексте пиксельной обработки, анализируя ее воздействие на отдельные точки изображения Теперь мы исследуем инверсию как метод, который можно применять ко всему гвобра- жению целиком, чтобы оценить ее общую эффективность и возможности Инверсия изображения это процесс изменения цветовых значений пик- селей изображения на противоположные Для наглядности можно сказать, что светлые области становятся темными, а темные светлыми В общем случае, цвета меняются на противоположные в соответствии с используемым цветовым про стр ансгв ом Инверсия часто используется для создания интересных визуальных эффек- тов и дизайнерских решений, придавая изображению необычный вид и выделяя определенные детали В области медь t инверсия может при- меняться для лучшего выделения и анализа определенных структур в медицин- ских изображениях, таких хак рентгеновские снимки Также инверсию исполь зуют в процессе редактирования фотографий для создания специфических эф фектов или коррекции изображений Принцип инверсии основан на i ;иий каждого цветового ка нала пикселя на противоположный В случае RGB изображений (красный зеле ныл синий), инверсия достигается путем вычитания значения каждого канала из максимального возможного значения для дав означает что, если у пикселя было значение,: сипа данных, обычно 255 Это мер, RGB (50 100 150) после инверсии оно станет (205, 155, 105) Инверсия применима и к изображениям в оттенках серого, где инверсия так яркости из максимального значения Рассмотрим применение инверсии на примере для статического изображе ния и видеопотока полученного с веб-кам еры. Для реализации инверсии мы вое пользуемся функцией cv2bitwise_nat0
Ниже представлен пример, который демонстрирует применение инверсии для видеопотока, принятого с веб-камеры import cv2 В, i функция cv2 bitwise которая выпол няет побитовую операцию “НЕ” над каждым пикселем изображения что и при водит к инверсии цветов Эта функция, по сути, выполняет вычитание каждого цветового канала из максимального значения для данного типа данных что ана логично выражению «255 значение» для 8-битных RGB изображении Более подробную информацию о методе вы можете найти в приложении в конце дан нои книги Результат выполнения такой программы представлен на рис 3 5 73
Вот некоторые примеры применения инверсии в различных областях 1 Фотофильтры многие приложения для редактирования фотографий предлагают фильтры, включающие инверсию Это может придать фото- графии необычный и запоминающийся вид 2 Тематические дизайны в веб-дизайне или создании постеров инверсия используется для создания тематических эффектов, подчеркивания определенных элементов и привлечения внимания к деталям 3 Медицинская обработка изображений в медицинской сфере инверсия может быть полезна для выделения конкретных областей ткани или структур в рамках диагностических процедур 4 Термальное видение в автомобилях инверсия может быть применена к изображениям с телевизионных камер В автомобилях такие камеры ис- пользуются для обнаружения тепловых источников, таких как транс- портные средства или люди, особенно в условиях низкой видимости, например, в ночное время или в условиях тумана. Инверсия может по- мочь выделить и подчеркнуть тепловые образы, улучшая обнаружение объектов на дороге 5 Обратное видеонаблюдеяие: в системах видеонаблюдеиия на транс портных средствах или на территории автостанций инверсия может быть объектов и обнаружения необыч использована для пых событий Например, три обратном видеонаблюдении темные объ екгы, такие как пешеходы, могут быть более заметными на светлом ации инверсия может быть применена к изображениям Тения для выделения аварийных ситуации или подозри епьств Это может помочь операторам транспортных си ;рсия изображения представляет собой важный инстру ктировании щображений, широко используемый в раз айна до)
ИЗ ЗЬ4 --------------------- Линейное объединение двух изображении это процесс создания нового изображения путем комбииирова t двух входных изображении с ис пользованием линейной комбинации. Это позволяет контролировать яркость и контраст обоих изображений, создавая таким образом новое изображение Линейное объе/ необходимо сочетать информацию из двух изображений или корректировать яркость и контраст Это может применяться для улуч: ских научных и технически} формации, а также в медицин В основе этого принципа лежит идея создания нового изображения на ос нове взвешенной суммы интенсивностей соответствующих пикселей на исход ных изображениях Эти веса (коэффициенты) отфеделяют влияние каждого изоб ражения на конечный результат Как правило, сумма коэффициентов равна еди нице, что обеспечивает сохранение общей яркости в результате объединения Таким образом, принцип линейного объединения изображений заключается в том, чтобы создать новое изображение, объединяя информацию из нескольких исходных изображений с использованием весовых коэффициентов, чтобы до- стичь желаемых визуальных эффектов Применение на линейные объединения для статического изображения или ви- деокадра, принятого с веб-камеры, осуществляется функцией cv2.aaW№feigtee<s'0 Ниже рассмотрен пример программы с i работы import cv2 [ и результат ее
лее подробное описание функции смотри в Приложении Рассмотрим влияния коэффициентов в строке протраммы frame3 = cv2 addWeightedfframe, О 7, framel, 0 7,0) В выражении коэффициенты 0 7, 07, и 0 используются для линейного объ единения (смешивания) двух изображений:/гстяе (оригинальное изображение) и framel (отраженное изображение) Здесь функция отражения изображения рас сматривается в качестве примера, отличного от исходного изображения Оче видно вместо второго изображения может быть любое изображения с любого источника Первый коэффициент (alpha=0.7) для frame Этот коэффициент изменяется в пределах от 0 до 1 и определяет вес оригинального изображения в итоговом смешанном изображении Чем выше коэффициент, тем больше вклад оригиналь ного изображения в конечный результат Здесь 0 7 означает, что оригинальное изображение вносит больший вклад в смешанное изображение Второй коэффициент (beta =0.7) для framel Этот коэффициент жменяется в пределах от 0 до 1 и определя ег вес отраженного изображения в итоговом сме- шанном изображении Также чем выше коэффициент, тем больше вклад отра- женного изображения в конечный результат Здесь также 0 7, что означает, что отраженное изображение вносит существенный вклад в смешанное изображе- Коэффициент сдвига (gamma=O) Этот коэффициент может выступать лю- бым вещественным числом и представляет собой сдвиг яркости Он добавляется к взвешенной сумме интенсивностей пикселей В данном случае, поскольку ко- эффициент равен 0, сдвига яркости не происходит Результат выполнения такой программы представлен на рис 3 6 Таким образом, в данном случае результат (frame3) представляет собой ли неиное объединение оригинального и отраженного изображении с весами 0 7 и 0 7 соответственно Это позволяет сохранять контраст и яркость обоих изобра женин в конечном результате, приводя к комбинированному изображению где оба входных изображения вносят свой вклад
1 Улучшение контраста, линейное объединение может использоваться для । при слиянии изображении улучшения контраста! с различными уровнями яркости. Коррекция изображений: при наличии нескольких снимков с различ ними экспозициями линейное объединение позволяет создать одно Медицинская диагностика, в 1 । и детализацией сской сфере линейное объединение изображений может быть использовано для создания композитных изоб ражений, объединяя информацию с различных типов оборудования (например, рентгеновских и СТ изображений) 4 Транспорт и видеонаблюдеяие в области транспорта линейное обьеди некие может применяться для комбинирования изображении с различ иых источников, таких как видеокамеры с разными уровнями освещен ности, что позволяет получить более полную информацию об окружаю шей обстановке Линейное объединение изображений предоставляет гибкий инструмент для управления контрастом и яркостью, что делает его полезным в различных обла- стях, включая обработку изображений, медицину и транспорт 3.6. Вычисления абсолютной разницы изображений Когда мы говорим о работе с изображениями в компьютерном зрении, мы часто сталкиваемся с необходимостью сравнивать два изображения или вычис- лять разницу между ними Этоможет быть полезно, например, при обнаружении движения, отслеживании изменений в видеопогоке или просто для анализа изоб- ражений Одним из способов ера вычисление абсолют - ной разности между ними Абсолютная разность между двумя значениями это просто разница между ними без учета знака. В контексте изображений каждый пиксель представлен числовым значением, которое обычно находится в диапа зоне от 0 до 255 для изображений в формате 8-битных целых чисел (для черно белых изображений) или от 0 до 1 для тображеиий в формате чисел с плаваю идеи запятой (для изображений в оттенках серого или цветных изображении) Таким образом, когда мы вычисляем абсолютную разность между двумя изображениями, мы вычис цу соответствующими пикселями каждого изображения Например, если у нас есть два пикселя с значениями 100 и 350 то абсолютная разность между ними будет 50 Мы делаем это для каждой пары пикселей из двух изображений. В библиотеке OpenCV дня реализации абсолютной разности двух изображе нии применяется функция cv2 absdiffO Она т^инимает д ва изображения в каче сгве входных данных и во: в котором каждый
лями входаййРй^ображенпй- ~ Представим у нас есть два кадра видео, мы хотим определить гдепроизо шли изменения между ними Мы можем использовать cv2 absdiffO для вычисле ния разницы между этими двумя кадрами. Результат будет изображением на ко тором выделены области, где значения пикселей отличаются между кадрами Рассмотрим два примера. В первом примера функция cv2 absdiffO приме йена к одинаковым изображениям, во втором примере на од ном из изображении имеются небольшие изменения. Когда мы применяем cv2xtbsdiff0 к двум одинаковым изображениям ожи дается что алгоритм не найдет никаких различий между ними Это происходит потому что каждый пиксель в одном изображении имеет такое же значение как и соответствующий пиксель в другом изображении. Когда мы вычисляем абсо лютную разницу между ними, результатом для каждой пары пикселей будет ноль Таким образом, в конечном итоге мы получим черное изображение без ка ких-либо выделенных областей, что говорит о том, что между изображениями нет различий В случае, когда у нас есть двапохожих, ио не совсем одинаковых изображе- ния, мы ожидаем, что си2.absdiffO выделит области, где произошли изменения Например, если одно твображение было сдвинуто относительно другого на не- сколько пикселей, разница будет выявлена как яркая область на результате Это происходит потому, что пиксели в смежных областях этих изображений будут та, и когда мы вычисляем абсолютную раз- иметъ разные ницу, эта разница будет не равна нулю Так™ образом, на выходе мы уввдим выделенные области, которые указывают на места, где произошли изменения между изображениями Рассмотрим простой пример программы impost cv2
Основную функцию в программе выполняет строка diff= cv2 absdiffrframe 1 frame2) Эта строка кода используется дня вычисления абсолютной разницы между двумя изображениями framel aframe2 Каждый пиксель в результирую щем изображении представляет собой абсолютную разницу между соответ ствующими пикселями в framel nframe2 Если значения пикселей в framel и frame2 одинаковы, то соответствующий пиксель в diff будет иметь значение О В этом случае результирующий кадр останется без изменении Если значения пикселей отличаются, то значение соответствующего пикселя в diffбу дет равно абсолютной разнице между этими значениями Это позволяет обнаруживать раз линия и изменения между двумя изображениями На кадре отобразятся места смещения в виде четких контуров Результат выполнения рассмотренной программы представлен на рис 3 7 Как видно, смещения яа обоих изображениях отсутствуют, что подтвер- ждает результат абсолютной разности двух изображений В идеальных условиях третье изображение должно быть черным, ж> поскольку заметна разница в осве- щенности в кадрах, то эта разница все же фиксируется функцией см2 absdlffr) На следующем рисунке (рис. 3 8) уже произошло небольшое смещение объекта Рисунок 3 8- Результат выполнения программы (смещение объекта)
метиы ЭтсШ'аЙфит о тон, что объект двигается Причем, аналтвируя можем точно установить направления смещения А теперь подумаем, как будет работать рассмотренный пример если первый (опорный) кадр мы поставим внутрь цикла. В данной программе происходит постоянное вычитание текущего кадра о предыдущим И при малейшем изменении подсвечивается разница Получается интересный эффект разностного изображения Что показывает разностное изображение'* 1 Если на видео что-то движется, то это движение будет заметно на раз- ностном изображении Пиксели, которые изменились от кадра к кадру (изменили свое положение или цвет), будут иметь большую разницу, а значит, будут ярче отображаться 2 Небольшие: могут отображаться на разност ном изображении, хотя обычно они меже заметны, чем изменения, вызванные движением 3 Если объект появляется или исчезает на видео, это также будет заметно на разностном изображении Стоит заметить, что функция см2 absdifff), работая на уровне пикселей обес печивает простую и быструю обработку, что позволяет использовать ее в реальном времени для обнаружения различий между кадрами Благодаря этому область применения такогометодаможет быть очень раз нои Постоянное вычитание кадров с использованием с?2 оЬдЛ^находиг широ кое применение в различных областях, включая обнаружение движения в сис
ютерном зрении а также для обиару делая его ценным инструментом для: i дина 3.7. Преобразование изображения с использованием абсолютных значений и масштабирования Преобразование изображения с испояьзованнем абсолютных значений и масштабирования это метод вменения яркости и контраста на изображе нии Он позволяет более гибко управлять восприятием изображения, делая его ярче и контрастнее Этот метод применяется для коррекции яркости и контраста на изображе иии, что полезно, например, при улучшения визуальных характеристик фотогра фин или видео Также он может использоваться для выделения определенных деталей и улучшения визуального восприятия сцен Принцип преобразования заключается в том, что каждый пиксель на изоб- ражении заменяется с учетом масштабного коэффициента и сдвига Это позво- ляет контролировать, насколько сильно изменяются яркость и контраст на изоб- ражении Преобразование изображения с использованием абсолютных значений и масштабирования предоставляет удобный инструмент для подгонки визуальных характеристик изображений под конкретные потребности и требования Применение метода абсолютного масштабирования и преобразования типа данных для каждого пикселя статического изображения или видеокадра, приня- того с веб-камеры, осуществляется функциейcv2.c<w>ertScateAbs() Данная функция библиотеки СрепСГ выполняет абсолютное масштабиро- вание и преобразование типа данных для каждого пикселя изображения и со- стоит из четырех аргументов, из них только ткрвый является обязательным По сути, данная функций управляет яркостью изображения и не более Рассмотрим пример программы с использованием этой функции
W3W' Данная программа повышает яркость изображения, принятого с веб камеры и выводит два окна с оригинальным и преобразованным видео Результат работы описанной программы представлен на рис 3 9 Влияние коэффициентов функции/тате/ =cv2iComertScaleAs(frame 20 10) на результат программы Первый коэффициент масштабный коэффициент (alpha) Значение боль ше 1 0 увеличит яркость изображения, делая его более светлым Значение мень ше 1 0 уменьшит яркость, делая изображение темнее Earn alpha равен 1 0, то яр- кость остается неизменной В данном примере alpha = 2 Второй коэффициент сдвига (beta) Положительные значения данного коэф- фициента увеличат общую яркость изображения Отрицательные значения уменьшат общую яркость изображения Сдвиг не влияет на контраст, а только на яркость В примере выше beta = 2. Более подробный обзор ^ymataacv2a<miertScaIeAbs() рассмотрен в Прило В целом преобрази t с использованием абсолютных значе нии и масштабирования на практике может решать следующие задачи 1 Коррекция визуальных параметров преобразование используется для коррекции яркости и контраста, что делает изображение более привле кательным и четким
мых с видеокамер транспортных средств, особенно в различных уело виях освещенности 3 Анализ изображений в медицинской обработке изображении или при компьютерном зрении преобразование может использоваться для под черкивания важных деталей и улучшения общего качества изображения 3.8. Бинаризация и пороговая обработка Бинаризация это техника обработки изображении, при которой каждый пиксель изображения преобразуется в белый или черный (или в любые другие две пары цветов) на основе заданного порога. Пороговая обработка используется для преобразования изображения в бинарное (двухцветное) изображение Бинаризация полезна при выделении объектов или областей интереса на изоб ражении, а также при упрощении дальнейшего акглпза изображений Она позволяет превратить сложные изображения в бинарные, где объекты выделены контуром Принцип бинаризации основан на установлении порога интенсивности для каждого пикселя Если значение пикселя превышает порог, то он становится бе- лым, в противном случае черным Таким образом, изображение разделяется на две категории объекты интереса (белые) и фон (черный) Важно понимать, что бинарное изображение это ие обязательно черно-бе- лое Это может быть сине-черное или красно желтое изображения Не следует путать бинаризацию с преобразованием в оттенки серого, бина- ризованное (черно-белое изображение! с нзображеиизм в оттенках серого В пер- вом случае применяется только два цвета, во втором множество оттенков от 0 до 255 значений Если все это понятно, попробуете разобраться, где на рис 3 10 бинарное изображение, а где изображение с применением оттенков Применение метода бизвризации статического изображения или видео кадра принятого с веб камеры, осуществляется функцией cv2 threshold) Данная функция библиотеки ОрепСР используется для преобразования изображения в изображение с битрными (двоичными) значениями (черно белое изображение) основываясь на пороговом значении.
ИЗ ЗЬ4 Результат выполнения рассм отренной программы представлен на рис 3 11 В программном коде строка grayJrame = cv2 cvtColortframe, cv2 COLORJ3GR2GRAY) преобразовывает цветовое пространство из области BGR в область GRAY и только лотом происходит непосредственно бинаризация изобра- жения строкой _lframe5= cv2Jhreshoid(grayJrame, 127,255, cv2 THRESH_BINAR В случае с бинаризацией эти две строки всегда должны работать вместе Рассмот- рим коэффициенты этих функций gray Jrame = cv2 cvtColortframe, cv2.COLOR_BGR2(}RAY) эту функцию мы ранее рассматривали и здесь мы лишь напомним, что она служит для получения промежуточного изображения в фосграистве серых цветов Поскольку функ ция cv2threshM() использует в качестве аргумента изображение в тонах серого цвета _ frames = cv2 threshold(grayJrame, 127, 255, c\>2 THRESHJHNART) Здесь мы используем функцию cv2Jhreshoid() для бинаризации изображения в от тенках серого (grayJrame) Функция принимает несколько параметров gray Jrame исходное изображение в оттенках серого Важно заметить, в ОрепСУ функция cv2 .threshold/) возвращает два значения в кортеже первый элемент возвращаемое значение (обычно не используется и обозначается символом подчеркивания а второй элемент результат при менения порога Такой подход позволяет вам получить как пороговое значение так и результат одновре другое имя латиницеи । заменить на любое
thresh= 127 пороговое значение, которое используется для классификации пикселей Если интенсивность пикселя выше порогового значения, он будет установлен в максимальное значение (в данном случае, 25 5), в противном случае, он будет установлен в минимальное значение (в данном случае, 0) тая>а1=255 максимальное значение пикселя, которое будет установлено для пикселей с интенсивностью выше порогового значения typec=cv2THRESH_BINARY этот флаг указывает на тип бинаризации В данном случае, если интенсивность пикселя болытк порогового значения, то она будет установлена в максимальное значение (255), в противном случае в минимальное значение (0) Другие значения зтого флага, атакже полный обзор функции cv2 threshold!) рассмотрен в Приложении данной книги Бинаризация и пороговая обработка изображений имеет важно место во многах областях знаний Выделение объектов на мет меняется для выделения тканей или определения контуров на медицин ских снимках, что может быть важным для диагностики. Распознавание текста на изображениях в области компьютерного зре ния, бинаризация часто используется для выделения текста на изображе ниях, что упрощает его распознавание Обработка изображении в системах безопасности на транспортных средствах, бинаризация может применяться для выделения объектов ин тереса, таких как номера автомобилей, на изображениях с видеокамер наблюдения Распознавание номерных знаков бинаризация может быть применена для выделения номерных знаков на изображениях с камер вццеонаблю дения на дорогах Это упрощает последующий процесс распознавания номеров транспортных средств
391 Основные термины и явления фильтрации В контексте обработки жюбражеяий термин «фильтр» обозначает матема а характеристик изображе тическую операцию, выполняемую с i ния улучшения его качества или увлечения определенной информации Эта операция реализуется посредством ядра (маски) Ядро (маска) это двумерная матрлда числовых значении, представляю щих весовые коэффициенты Они определяют, как именно фильтр будет воздеи ствоватъ на изображение в процессе свертки. Свертка это математическая операция, лежащая в основе фильтрации Ядро «скользит» по изображению, и для каждого его положения вычисляется но вое значение пикселя Это происходит путем умножения значении пикселей об ласти изображения, накоторую наложено ядро, на соответствующие весовые ко эффициеиты ядра Затем полученные произведения суммируются, и результат становится новым значением центрального пикселя Подробное рассмотрение принципа фильтрации представлено в разде- ле 3 9 2, а в разделе 3 9 3 мы познакомимся с основными типами ядер, применя- емых в компьютерном зрении. Далее рассмотрим некоторы е распространенные тин фильтрации и шумов, которые часто встречаются при обработке изображений Размытие (сглаживание) это фильтрация, направленная на уменьшение резкости деталей и шума на изображении (рис 3 12) Обычно для этого исполь- зуются ядра, которые усредняют значения пикселей, например, усредняющие или гауссовы ядра Резкость (усиление контраста) это фильтрация, которая увеличивает выразительность краев и мелких деталей (рис 3 13). Для этой цепи часто исполь зуются ядра, основанные на операциях дифференцирования, такие как оператор Лапласа
Обнаружение границ это для выявления резких переходов яркости в изображении, которые соответствуют контурам объ ектов(рис 3 14) В этом случае применяются ядра, которые чувствительны к гра диеитам, например, ядра Собеля или Щарра. Рисунок 3 14- Пример фильтра обнаружения границ Теперь рассмотрим типы шумов, с которыми приходится сталкиваться при обработке изображений «Соль и перец» это вид импульсного шума, проявляющийся в виде слу- чайных, резких изменений яркости отдельных пикселей В результате на твобра женин появляются ярко белые и ярко-черные точки, напоминающие крупинки соли и перца (рис 3 15, Б)
виде белых так и черных «пятен» на тображении, являясь результатом ошибок при передаче или записи данных Импульсный шум часто является более общим понятием чем шум типа «соль и перец», но оба они представляют собой резкие случайные изменения яркости (рис. 3 15, В). Гауссов шум (нормальный шум) это вид случайного шума, при котором значения яркости пикселей отклоняются от истинного значения в соответствии с гауссовским (нормальным) распределением. Малые отклонения от истинных значении яркости пикселей более вероятны, чем большие (рис 3 15, Г) Итак мы рассмотрели основные термины и понятия фильтрации изображе нии включая ядра, свертку и виды шумов Теперь, когда у нас есть общее пред ставление о фильтрации, перейдем к более подробному изучению ее принципов и конкретных типов ядер, применяемых на практике 3.92 Принцип фильтрации Под фильтрацией шума на изображении подразумевается процесс очистки изображения от нежелательных мелких дефектов, которые могут возникнуть при его отображении Это позволяет сделать нзображешв более четким и приятным для восприятия, устраняя мелкие точки или помехи, которые могут исказить его качество Для понимания работы фильтров рассмотрим пример, когда смещение пик- селей происходят в основном по осн ординат (вертикальной оси) Это упрощение для демонстрации принципа' На рис 3 16 мы видим увеличенный фрагмент не- которого изображения, например, вершина горы Горизонтальная (ось W) и вер- тикальная (ось И) оси образуют координатную плоскость, на которой размещены пиксели изображения Таким образом, фрагмент горы имеет математическое представление в виде координат отдельных пикселей Теперь внесем умышленно помеху в виде смещения координат пикселей по оси ординат (И) То есть сложим текущие координаты наших пикселей по оси И со случайной последовательностью 20, 6, 4,15,12,9, 22,14, 8, 21,12,23,2, Например, для пикселя с координатой (W — 9, Н — 24) его обновленное зна чение пространственного положения с учетом помехи будет равно (^24 + (21))-(^3) А искажение помехой пространственного положения пикселя (W - 22 Н- 10) будет (22,10+ 4)-(22,14). Полученный разброс пикселей (рис. 3 17) в реальности может быть вызван смещением или неправильным расположением пикселей на дисплее или сенсоре Чаще всего такой лум возникает при съемке, при сжатии изображения при ошибке передачи данных, неисправности экрана и т д
Рисунок 3 16 - Фрагмент изображения (контур горы) А теперь приступим к фильтрации. Возьмем, пятый пиксель с координа той (4 4]) и пересчитаем его положение в пространстве путем сложения значения его И со значениями Н четырех предыдущих пикселей и поделим на их количе сгво то есть 5 Если присмотреться, то это не что иное, как нахождение среднего арифметического Математически это выглядит так
„ ИЗ ЗЬ4— Значении координат с: : не бывает Поэтому просто от брасываем десятичную часа Тогда, новая координата пятого пикселя будет нием пятого пикселя изображения (рис 3 16), мы увидим, что значение этого пикселя стало ближе к требуемому Повторим эту процедуру для шестого пикселя Нз= (Hi +Нз + Нз+ Н»+Нг)/5 —(31+23 + 43 + 41 + 39)/5 - 35 4 Новые координаты шестого пикселя (5,35). Для седьмого пикселя Нв=(Нз + Нз+Н«+Я>+Н«)/5 — (23 + 43 + 41 + 39+ 7) / 5 - 30,6 Новые координаты седьмого пикселя (6,30) Для восьмого пикселя Hi = (Hj + Н« +Н? +Я« +Ят)/5 -(43 + 41 + 39 + 7 + 42) /5 - 34,4 Новые координаты седьмого пикселя (7,34) Так необходимо провести расчет для каждого пикселя, пока все пиксели не обновятся и последний результат ие окажется равным нулю Результат обновленного изображения со скорректированными значениями координат всех пикселей показам на рис 3 18 Конечно, это изображение более похоже на эталонное становится узнавае- мым контур горы, но этого недостаточно Необходимо что-то изменить в нашем фильтре
будут просуммированы первые девять пикселей и их сумма будет поделена на 9 Например запись для девятого пикселя будет иметь вид На = (Но + № +№ +Н3 +Н< + Н5 + Н6 +Н7 + Hs)/9 - То есть новая координат десятого пикселя будет (9,29) Если пересчитать все координаты пикселей с делителем 9, то получится результат, который пока Сравним результаты обоих фильтров и сделаем вывод Очевидно, что чем больше смещение, тем лучше работа фильтра. Однако и вычислении становится больше что дополнительно нагружает аппаратные ресурсы Обозначим, размер данного смещения в цифровых фильтрах называется длиной фильтра В нашем примере мы сумму значений делили на 9 Также можно сказать что мы умножали полученную сумму 1/9 Избавимся от дроби используя деся тичное значение нашего коэффициента 1/9 — 0,11111 Ня = 0,111 (Но +Hi +Нз +Нз +Н4 + Н5 + Но + Н7 + На) А теперь раскроем скобки №=0111 №+ 0,111 Hi +0,111 Нз +0,111 Нз +0,111 № + 0111 № + + 0,111 № + 0,111 № + 0,111 На
значения нййь&Аотся веа>выми коэффициентами фильтра И если построить график из этих коэффициенте® по всей длине фильтра, то он будет иметь прямо угольный вид (рис 3 20) Рисунок 3 20- График весовых коэффициентов фильтра Оказывается, что если выбрать весовые коэффициенты таким образом, чтобы график имел не прямоугольную форму, а, например, треугольную, экспо- ненциальную и так далее, томожно значительно улучшить работу фильтра. Приведем примеры некоторых видов графиков весовых коэффициентов 1 Треугольный график весовых коэффициентов 01,02,03,04,05,04,03,02,01 В этом случае веса постепенно увеличиваются до максимального значения и затем снова уменьшаются обратно 2 Гауссовский график весовых коэффициентов 005,0 1, 0 2, 0 4, 06, 08, 06,04,02,0 1, 005 В этом случае веса распределены по форме Гауссова распределения, что со здает более гладкое и непрерывное воздействие 3 Экспоненциальный график весовых коэффициентов 0 05, 0 1, 0 2, 0 4, 0 8, 04,02,0 1,0 05 В этом случае веса уменьшаются экспоненциально по мере удаления от цен трального значения 4 Косинусоидальный график весовых коэффициентов В этом случае веса представляют собой здает осциллирующий характер воздействия яую форму что со А теперь с учетом этого зэиния, рассмотрим выражение для фильтра с длин нои 9 и весовыми коэффициентами образующий график треугольной формы На = 0 1 Но + 0 2 Hi + 0,3 Н2 +0,4 Н3 + 0,5 Hi + 0,4 Н5 + 0 3 Н6 + + 0,2 Hz+ 0,1 На.
те которые используют опредет :фу1 । (например, Гаусса или треуголь ную) лучше работают с нечетным числом коэффициентов для формирования симметричного окна Результат такого: коэффициентов приведен на рис 3 21 Рисунок 3.21 - Весовые ко>ффициенгы фильтра и результат фильтрации изображения Как видно на рисунке, качество работы фильтра значительно улучшилось контур горы стал более выразительным Однако, в результате использования скользящего окна фильтрации на границах изображения значения пикселей были потеряны Для решения этой проблемы необходимо применять дополнительные меры уменьшать длину фильтра и подбирать график весовых коэффициентов Зачастую в этом случае вносят дополнительные пиксели обрамляющие изображение, которыми жертвуют при таком смещении в пользу сохранения ос новного изображения Стоит заметить, оголишь общий принцип и пример работы наиболее попу лярного алгоритма пространственной фильтрации Такой принцип может быть полезен при создании фильтров для выдет (на изображении Важно отметить, что весовые коэффициентов заданной длины и формы называются окном фильтра или ядром фильтра Они являются основной харак теристикои любого цифрового фильтра Итак мы подробно рассмотрели процесс одномерном фильтрации, где для каждого пикселя вьп ; на основании соседних пикселей с применением весовых коэффициентов В реальных изображениях пиксели рас полагаются на двумерной сетке, и, как мы уже отмечали, смещение (или влияние соседних пикселей) может происходить как по горизонтали так и по вертикали 93
надвумернь'йд-ззу'чаи Вместо одномерного набора весовых коэффициентов мы будем использо вать двумерное окно фильтра (также называемое ядром фильтра) Ядро представ ляет собой небольшую матрицу чисел (весовых коэффициентов) Операция которая применяется для фильтрации изображении в двумерном пространстве называется сверткой. Свертка (convolution) это математическая операция двумерной фильтра ции которая заключается в «скольжении» ядра (матрицы весовых коэффициен тов) по изображению В каждой позиции ядра происходит вычисление нового значения пикселя путем поэз :елеи изобра жения попадающих под ядро, на соответствующие значения ядра с последую щим суммированием результатов. Таким образам, свертка является обобщением одномерной фильтрации на двумерный случай, где ядро фильтра определяет, как соседние пиксели влияют на текущий пиксель Ниже рассмотрен небольшой пример проведения свертки (двумерной филь- трации) над изображением с одним цветовым каналом в оттенках серого (рис 3 22) Для операции свертки предлагается использовать ядро фильтра представ ляющее собой двумерный усредняющий фильтр 3x3 (9 элементов) аналогично тому как мы использовали усреднение с 9 элементами в примере одномерной фильтрации Если в прошлом примере весовые коэффициенты представляли собой век тор значении 1/9 1/9,1/9,1/9,1/9,1/9,1/9,1/9,1/9 (или 0,111, 0 111 0111 0111 0111 0 111 0111 0,1 И, 0,111), тов случае двумерной свертки они будут фор мировать ядро 3x3 где каждый элемент также равен 1/9, образуя матрицу
ИЗ ЗЬ4 0,111 вдн- 0,111 0,111 0,111 0,111 Таким образом ядро фильтра (матрица 3x3 с весовыми коэффициентами) как и в примере с одномерной фильтрацией, «скользит» по изображению после довательно перемещаясь от пикселя к пикселю Для каждой позиции ядра вы полняется следующий процесс: каждый пиксель изображения, попадающий под ядро умножается на соответствуют : ядра. В се получен ные произведения суммируются, и результат становится новым значением пик То есть происходит пе селя находящегося а центре теку! ресчет значения центрального пикселя По сути, происходит расчет среднего зна чения пикселя Потому ядро называется усредняющим На рис 3 23 приведен пример скольжения ядра для перерасчета значения пикселя (0,0) и пикселя (7,2)
дующим об(ййй для пикселя (0 0) Pix[0 0] = 0 0,111 4 О ОДИ 4 О ОДИ 4 О ОДИ 4 56 ОДИ 4 4 35 0,111 4 О ОДИ 4 32 ОДИ 4 56 ОДИ = 51,75 » 52 для пикселя (8,3) Pix[7 2] = 32 0,111 4 44 ОДИ 4 45 ОДИ 4 46 0,111 4 29 0,111 4 4 45 0,111 4 30 ОДИ 4 32 0,111 4 41 0,111 = 74,75 « 75 Результатом прохождения усре по всей матрице пикселей или результатом свертки получается обновленное изображение (рис 3 24) Рисунок 3 24 - Результатом свертки изображения усредняющим ядром 3x3 Свертка является фундаментальным строительным блоком в компьютерном зрении, обеспечивая основу для многих алгоритмов и задач Она позволяет из влекать ключевые признаки из изображений, такие как границы, углы и тек стуры путем применения различных ядер, каждое из которых реагирует на опре деленные паттерны Эти признаки затем используются для распознавания обь ектов классификации изображении, сегментации и многих других задач Без свертки большинство современных моделей компьютерного зрения включая сверточные нейронные сети (CNN), были бы невозможны поскольку именно свертка обеспечивает способность моделей эффективно обрабатывать простран ственную структуру изображений. Все это нам предстоит узнать далее Таким образом глубокое понимание принципов работы свертки является ключевым для любого кто стремится работать в области компьютерного зрения
В предыдущем разделе мы подробно рассмотрели концепцию фильтрации изображении и познакомились с ащеи в основе многих алгоритмов обработки изображении. Теперь же мы углубимся в изучение клю левого элемента этого процесса ядра фильтра. Ядро, представляющее собой небольшую матрицу весовых коэффициентов, определяет, каким образом окрестности каждого пикселя изображения будут влиять на его новое значение Именно выбор ядра, его размера н 1 : обуславливает характер изменении, вносимых фильтром, будь то размытие, выделение границ или дру гие преобразования изображения Понимание принципов работы с различными ядрами является критически важным для эффективного применения фильтров в компьютерном зрении Теперь, когда мы понимаем общую концепцию ядра, фильтра и его роль в операции свертки, давайте перейдем к рассмотрению конкретных примеров Мы уже познакомились с одним нз простейших ядер усредняющим, которое, как мы видели, приводит к размытию изображения Однако существуют и дру- гие, более сложные ядра, позволяющие решать разнообразные задачи обработки изображений В следующих разделах мы подробно изучим ядра Гаусса, исполь- зуемые для создания более плавного размытия, ядра резкости, делающие изоб- ражение более четким, а также ядра Прюитта, Робертса, Собеля и Шарра, пред- назначенные для выделения границ и обнаружения перепадов интенсивности на изображениях Каждое из этих ядер обладает уникальными свойствами, что поз- воляет нам эффективно воздействовать на изображения для достижения желае- мых результатов ,6’дао усреднения (Average kernel) является одним из базовых фильтров и применяется для сглаживания деталей или размытия изображения Оно пред- ставляет собой матрицу, где все элементы имеют одинаковые значения, напри- мер, как в случае с ядром 3x3, где каждый коэффициент равен 119 [% V, 7,1 гА V9 *А- lv9 % vJ Такая конфигурация позволяет получить среднее значение интенсивно сти пикселей в окрестности центрального, что приводит к снижению конт расга и размытию границ на изображении. Важно отметить, что значения весо вых коэффициентов ядра могут быть различными, завися в том числе от размера и типа применяемого фильтра, а также от конкретной задачи обработки изобра Ядро Гаусса (Gaussian kernel) также применяется для размытия изображе ния и сглаживания его деталей, одаако, в отличие от простого усреднения оно обеспечивает более естественное и плавное размытие Это достигается за счет того что ядро представляет собой дискретизированную версию двумерного
образом из ЗЬ4 Г1 2 1] В этом ядре значения весовых коэффициентов убывают по мере удаления от центра, это означает, что пиксели, расположенные ближе к центру оказывают большее влияние на результирующий пиксель, чем пиксели на периферии Это приводит к более сглаженному размытию, при котором не так сильно заметны артефакты свойственные усредняющему ядру Ядра Гаусса часто используются для эффективного подавления шума, создания эффекта размытия и удаления вы сокочастотиых деталей жображения, сохраняя при этом общую структуру сцены Стоит отметить, что если все элементы ядра Гаусса умножить или разделить на любое ненулевое число, например, на 4, то полученная матрица все равно бу- дет представлять собой ядро Гаусса. 10,125 03 0,1251 10,125 03 0,1251 Такое масштабирование не меняет форму распределения Гаусса, оно лишь корректирует общую силу его воздействия Ядро резкости (sharpening kernel) используется для усиления резкости изоб- ражения, делая контуры и детали более четкими В отличие от ядер, которые мы рассматривали ранее, направленных на сглаживание, ядро резкости акцентирует разницу между соседними пикселями Типичный пример ядра резкости 3x3 вы- глядит следующим образом В этом ядре центральный пиксель умножается на коэффициент, боль шли единицы (в данном случае 5), а окружающие пиксели на отрицатель ные значения Таким образом, пиксели, которые значительно отличаются от своих соседей, получают еще большее усиление, что и привод ит к повыше нию резкости изображения Применение такого ядра помогает выделить кон туры сделать изображение более выразительным и подчеркнуть мелкие де тали однако слишком сильное применение может привести к появлению ар Ядро Прюитта (Prewitt’s 1 ;но для обнаружения границ на изображениях выделяя резкие переходы в интенсивности пикселей В частно сти это ядро используется для выявления как гортвонтальных так и вертикаль ных границ а также дает некоторое представление о градиенте изображения Типичные ядра Прюитта 3x3 имеют следующий вид:
для выделения п Применение этих ядер в процессе свергкик изображению позволяет вычис лять разницу в яркости между соседними пикселями в соответствующих надрав пениях Вертикальное ядро реагирует на изменения яркости по горизонтали, тем самым выделяя вертикальные границы, а горизонтальное ядро, наоборот, виде ляег гор: мнения ядра Прюитта является карта границ, на которой хорошо видны резкие изменения интенсивности, соот- ветствующие краям объектов на изображении Важно отметить, что ядро Прю- итта является довольно простым детектором границ и может быть чувствитель- ным к шуму Ядро Робертса (Robert's kernel) также предназначено для обнаружения гра- ниц на изображениях, но, в отличие от ядра Прюитта, оно использует более ком- пактные матрицы Ядро Робертса состоит из двух ядер 2x2, но для применения в свертке с изображениями 3x3 их необходимо дополнить нулями Эти ядра пред- назначены для выявления границ в двух основных направлениях [ООО] [000] горизонтального ядра 0 1 — 11 и вертикального ядра 0 1 О 1о О О J 1о -1 oJ Применение этих ядер в операции свертки позволяет оценить изменения ин- тенсивности пикселей в горизонтальном и вертикальном направлениях Как и в случае с ядром Прюитта, горизонтальное ядро выделяет вертикальные границы, а вертикальное ядро горизонтальные. Результаты свертки с этими ядрами обычно объединяются (например, путем расчета квадратного корня из суммы квадратов результатов), чтобы получись более полное представление о границах на изображении Ядро Робертса является одним из самых простых детекторов границ но из за небольшого размера и чувствительности к шуму оно менее рас пространеио на практике по сравнению с ядрами Прюитта, Собеля и Щарра Ядро Собеля (Sobel’s kernel) это ещг один популярный инструмент для обнаружения границ на: ый, в отличие от ядра Робертса, ис пользует более сложные весовые коэффициенты. Как и ядро Прюитта, оно со стоит из двух ядер 3x3, предназначенных для выделения границ в разных направ пениях
интенсиввЖйИйкселеи в горизонтальном и вертикальном направлениях Гори зонгальное ядро аналогично ядрам ПрюигтаиРобергса, выделяет вертикальные границы а вертикальное ядро гортонтальные Результаты свертки с горизон тальным и вертикальным ядрами часто объединяются, например путем расчета магнитуды градиента, что дает более полную картину границ на изображении Ядро Собеля является широко используемым детектором границ в компьютер ном зрении благодаря хорея ду точностью обнаружения границ и вычислительной эффективностью, поэтому его часто применяют при обработке изображений в режиме реапьиэго времени Оно менее чувствительно к шуму чем ядра Робертса, и обеспечивает более точные результаты по сравне нию с ядром Прюитта Ядро Щарра (Schatr’s kernel) представляет собой еще один эффективный метод обнаружения границ на изображениях, который часто рассматривается как улучшенная альтернатива ядру Собеля Подобно другим детекторам границ ядро Щарра состоит из двух м атриц Зх з, предназначенных для выявления границ в разных направлениях 13 0 3 1 Г 3 10 31 10 0 -iol и вертикального ядра О О О 3 0 -3 J 1-3 -10 -3J Как и в случае с ядрами Прюитта, Робертса и Собеля, применение этих ядер в операции свертки позволяет вычислять градиент интенсивности пикселей, вы- деляя переходы яркости в горизонтальном и вертикальном направлениях Гори- зонтальное ядро, как и ранее, реагирует на вертикальные границы, а вертикаль- ное ядро на горизонтальные Результаты свертки обычно комбинируются для получения полной карты границ Ядро Щарра отличается от ядра Собеля улуч- шенными характеристиками обнаружения границ Оно обеспечивает более вы- сокую точность и меньшую чувствительность к шуму, что делает его предпочти- тельным вариантом для задач, требующих максимальней точности обнаружения границ Од нако стоит отметить, что ядро Щарра является более сложным с точки зрения вычислений, чем ядра Робертса или Прюитта. Фильтр Лапласа (Laplacian kernel) используется для обнаружения границ на изображениях, но, в отличие от фильтров, которые мы рассмотрели ранее он яв ляется детектором границ второго порядка. Это означает, что он не просто вьще ляет перепады интенсивности, нои реагирует на скорость изменения этой интен сивности Фильтр Лапласа чувствителен к изменениям яркости во всех направ пениях и эффективно выделяет области, где интенсивность меняется быстро та Типичное ядро Лапласа 3x3 имеет следующий вид
водит к тому что пиксели, которые имеют резкие изменения интенсивности в своей окрестности получают больнее значенге на выходном изображении Фильтр Лапласа выделяет как положительные, так и отрицательные перепады яркости поэтому часто после его применения на изображении появляются как светлые так и темные линии. Важно отметить, что ядро Лапласа, как правило, очень чувствительно к шуму Поэтому в реальных приложениях его часто комбинируют с другими методами например, с размытием, чтобы уменьшить шум и получить более надежные результаты кроме того, Л а л паси: вычисления более продвинутых детекторов сиаи (LoG), о котором мы поговорим далее. гея базовым элементом для таких как гауссиан лапла Фипыпр Кирша (Kirsch filter) это метод для обнаружения границ на изоб ражениях, который позволяет выделять границы не только в горизонтальном и вертикальном направлениях, но и в диагональных Он основан на применении набора из восьми ядер, каждое из которых выделяет границы в определенном направлении Для каждого пикселя каждое из восьми ядер 3x3 применяется к звображению с помощью операции свертки, а затем из восьми полученных изображений выбирается изображение с наибольшим значением отклика для этого пикселя, определяя величину градиента и его ориентацию Ядра Кирша вы- глядят следующим образом Г-3 -3 51 Г 5 5 5 1 Г 5 5 5 1 север 1-3 0 5 северо-восток 1-3 0 -з|,восток -3 0 -31, 1-3 -3 5J 1-3 -3 з! 1-3 -3 -31 Г 5 5 —31 [5-3 -31 [-3 -3 -31 юго-восток 5 0 -з|,юг 5 0 -з|, юго-запад 5 0 -3 , 1-3 -3 -з] 1б -3 -з1 15 5 -3.1 [-3 -3 -31 [-3 -3 51 запад 1-3 0 5 [северо-запад 1-3 0 5 1-3 -3 5 J 1-3 5 -31 Фильтр Кирша имеет преимущества в обнаружении границ во всех надрав пениях и простоте реализации, но при этом имеет недостатки в чувствительности к шуму и может быть менее точным в определении величины градиента по срав нению с фильтром Щарра. Применяется доя более детального выделения границ особенно с диагонаг : направлениями, и в качестве этапа предварительной обработки перед другими видами авалвва изображений Гауссиан Лапласа (LoG Laplacian of Gaussian) это фильтр который объ единяет в себе преимущества размытия Гаусса и обнаружения границ Лапласа, что позволяет более: вать границы и .другие структурные эле менты такие как пятна, на зашумленных воображениях Идея заключается в том
нию применяется ядро. ходи интенсивности ы и другие резкие пере Формально фильтр LoG получается путем свертки изображения ядром Гаусса, а затем применения ядра Лапласа к полученному результату Это экви валентно применению одного комбинированного ядра, которое называется ядром гауссиана лапласиана. Обычно ядро LoG выптядиг как «мексикан ская шляпа» положительные зжчения в тригре, окруженные отрицатель ными Однако вычисление ядра LoG нацтямую достаточно сложно, и на прах тике чаще используют разделение на отдельные операции свертки с Гауссом и Лапласом Применение фильтра LoG к изображению приводит к выделению границ линий и других резких изменений интенсивности Благодаря предварительному размытию, фильтр менее чувствителен к шуму по сравнению с обычным Лапла сом и обеспечивает более четкие и надежные результаты Фильтр LoG особенно полезен для обнаружения структур, которые имеют определенный размер (например, пятна или блумы) и часто используется для предварительной обра- ботки изображений перед дальнейший этапами анализа Фильтр разницы гауссиан fDoG Difference of Gaussians) является еще од- ним методом для обнаружения границ и других структурных элементов на изоб- ражении, который приближает эффект фильтра LoG (гауссиан лапласиана), но делает это более вычислительно эффективным способом Основная идея DoG за- ключается в том, чтобы применить к изображению два размытия Гаусса с раз- ными параметрами размытия (стандартными отклонениями), а затем вычесть одно размытое изображение из другого В этом разделе рассмотрены множество различных ядер фильтров, начиная от простых усредняющих и заканчивая более сложными, такими как ядраГаусса, Лапласа, Собеля, Щарра, а также их комбинации, например, LoG Каждое ядро, благодаря уникальной комбинации весовых коэффициентов, обеспечивает опре- деленный эффект при свертке с изображением, позволяя решать широкий спектр задач от размытия и сглаживания до выделения границ и обнаружения ключе вых элементов изображения Важно отметить, что хотя многие примеры пред ставлены с использованием ядер 3x3, размер ядра не ограничен этим значением Ядра могут иметь и другие размеры, такие хак 5x5,7x7 и более, выбор размера ядра является критически важным. Увеличение размера ядра, как правило при водит к усилению эффекта фильтрации, например, более сильному размытию (рис 3 12) или выделению границ (рис. 3 14). При этом, также увеличивается вычислительная сложность операции свертки И наоборот, более маленькие ядра обеспечивают более локальное воздействие на изображение Таким образом, выбор подходящего ядра включая его размер является ключевым этапом в процессе обработки изображении и за висит от конкретной задачи, желаемого результата и вычислительных ограни
из 364 нелинейные фильтры В предыдущих разделах мы подробно рассмотрели фильтры основанные на операции свертки с использованием ядер, где каждый пиксель изображения об рабатывался на основе фиксированного наборавесов Однако существуют и дру гие методы фильтрации, которые не используют ядра свертки, а применяют дру гие подходы Эти методы часто называют нелинейными фильтрами, и они поз воляют достигать интересных эффектов, особенно в случаях, когда требуется со хранить резкость границ и деталей при сглаживании шума Одним из ярких примеров нелинейных фильтров является билатеральный фильтр (Bilateral filter) Билатеральный фильтр (Bilateral filter) это нелинейный фильтр, который используется для сглаживания изображений, при этом, в отличие от гауссового фильтра, он сохраняет края и детали (рис. 3.25). Рисунок 3 25 - Применения сглаживания с сохранением четкости границ Это достигается за счет того, что билатеральный фильтр использует два компонента весов при вычисл ении значения выходного пикселя пространствен- ный вес, который, как и в обычном гауссовом фильтре, определяется рассгоя нием от центрального пикселя до соседнего, и фотометрический вес, который определяется разностью интенсивности между центральным пикселем и сосед ним В отличие от сверточных фильтров, таких как Гаусс или Собель, билате ральный фильтр не имеет фиксированного ядра, которое можно применить ко всему изображению, его веса зависят не только от пространственного располо жения пикселей, но и от значений их интенсивности Применение билатераль ного фильтра приводит к сглаживанию областей изображения с однородной ин тенсивностью в то время как резкие переходы между областями остаются одно сительно нетронутыми, делая его очень полезным для удаления шума при сохра нении четкости границ Он часто применяется для предобработки изображении в задачах компьютерного зрения, где необходимо сохранить структуру объектов и при этом снизить уровень щума. Медианный фильтр (Median filter) это нелинейный фильтр который часто го шума («соль и перец») из изображении, 103 применяется для у;
фильтр заменяет значение каждой окрестности Для каждого пикселя в тображении определяется окрестность обычно квадратной фс зсти пикселей, входящих в эту окрестность собираются и сорт>фуются по возрастанию или убыванию Медиа на это среднее значение в этом отсорт^юванном списке, если количество пиксе леи в окрестности нечетно, или среднее арифметическое двух средних значении, если их количество четно Затем значит® цаггралыюго пикселя заменяется на вы численную медиану Меди to удаляет импульсный шум королю сохраняет четкость границ, поскольку медиана не подвержена влия нию экстремальных значений, и алгоритм достаточно прост в понимании и реали зации Однако мед ианный t [гауссова шума, вычисление медианы требует сортировки значений, что может быть более вычис литепьно затратным по сравнению с усреднением, и при использовании больших окрестностей может «размазывать» мелкж детали Медианный фильтр широко применяется для удаления «соли и перца» и других видов импульсного шума из изображений, используется для предобработки изображений перед дальнейшим анализом, чтобы уменьшить шум и повысить качество, а также в тех случаях, когда требуется сгладить жображение, ио три этом не размыть границы объектов Нелокальный фильтр среднего это нелинейный фильтр, используемый для шумоподавления на изображениях Он отличается от классических фильтров, та- ких как фильтр Гаусса, тем, что учитывает не только локальные пиксели, но и пиксели на значительном удалении от рассматриваемого Алгоритм ищет подоб- ные участки изображения, усредняя значения пикселей в этих похожих областях Это позволяет лучше сохранять мелкие детали и текстуры изображения, чем сверточные фильтры, которые, как правило, размывают эти детали В отличие от билатерального фильтра, нелокальный фильтр среднего не учитывает локальные различия в значениях яркости пикселей, а вместо этого фокусируется на близо- сти пикселей в более широком контексте всего изображения Этот алгоритм ши роко используется для подавления щумав изображениях, особенно когдаважно сохранять мелкие детали и границы объектов Фильтр моды (Modefilter) это нелинейный фильтр, который используется для сглаживания изображений и подавления шума, при этом сохраняя границы и детали, заменяя значение каждого пикселя на моду наиболее часто встреча ющееся значение интенсивности пикселей в его окрестности Для каждого пик селя в изображении определяется окрестность, значения интенсивности пиксе леи входялщх в эту окрестность, собираются, и для каждого значения подсчи енсивности, которое встреча тывается количество их повтор егся в окрестности чаще всего, выбирается в качестве моды и центральный пик сель заменяется на найденную моду Фильтр моды хорошо справляется с удале нием «пятнистого» шума, хорошо сохраняет границы и мелкие детали и алго ритм довольно прост в понимании и реалтации, но может приводить к эффекту «постеризации» не очень хороню обрабатывает изображения с гладкими гра
«пятнистого» шума moi г задачах сегментации для упрощения изображения выделяя основные регионы, и иногда используется для предобра Этот фильтр как и другие, добавляет полноты нашему обзору и позволяет глубже понять разнообразие мет Теперь мы имеем достаточно широкий арсенал фильтров для работы с изображениями 3 95 Практическое применение фильтров После изу» ьтрации и различных типов филь тров включая линейные и нелинейные, мы переходим к их практическому при менению В этом разделе будут рассмотрены применение наиболее популярных фильтров для обработки изображений с помощью языка Python и библиотеки OpenCV ОрепСРпредоставляет широкий набор функций для применения раз личных фильтров, что позволяет нам увидеть их эффект на изображениях и по- нять, как они могут быть использованы для релвния конкретных задач в компь- ютерном зрении, таких как шумоподавление, выделение границ и улучшение ка- чества звображений Мы рассмотрим, как задавать ядра свертки, применять го- товые фильтры ОрепСР и создавать собственные, а также проанализируем ре- зультаты их работы на реальных изображениях Фильтр Гцусса этоматематический алгоритм, широко применяемыйв об- работке изображений и сигналов Он базируется на распределении Гаусса (нор- мальном распределении) и используется для сглаживания изображений, устра- нения шумов и выделения ключевых особенностей. Примером изображения, для которого целесообразно применить фильтр Гаусса, является изображение с высоким уровнем «соли и перца» шума Фильтр Гаусса эффективно сглаживает изображение, уменьшая влияние шу- мовых пикселей, не искажая слишком сильно детали изображения В этом случае, благодаря своей характеристике гладкости и спэсобзюсти уменьшать резкие скачки яркости, фильтр Гаусса позволит сгладить случайные, внезапные измене ния значений пикселей, характерные для шума «соли и перца» В результате изоб ражение станет менее «зернистым» и более однород ным (рис 3 26)
Гаусса на ЛрбйИм программном коде Данный код загружает изображение из файла "kartinxajpg" и применяет к нему фильтр Гаусса с указанными параметрами (размер ядра 15x15 и значение ssgma_x, равное 0) для размытия изображения После чего сохраняет полученное размытое изображение в файл "na_shum_kartinkajpg " Коэффициенты kernel_size и sigma_x влияют на характеристики и результат применения фильтра Гаусса к изображению Коэффициент kernel_jize (размер ядра) оц>еделяет размер окна, используе- мого для вычисления взвешенной суммы пикселей вокруг целевого пикселя Боль- ший размер ядра означ аег большую область сглаживания и более заметное размы- тие изображения Однако слишком большой размер ядра может привести к потере деталей в изображении и к значительной вычислительной нагрузке На практике зачастую достаточно применимым является размер ядра 5x5 Этот размер явля- ется балансом между качеством сглаживания и сохранением важных деталей изображения, а также обеспечивает приемлемое время обработки Увеличение размераядра ведет к более сильному размытию, что мс зприсиль ном шуме, но может также сделать твображение менее четким Выбор размера вдра зависит от конкретной задачи и характеристик изображения, требуя экспери ментального подбора для достижения наипучшего результата. Коэффициент sigma_x (стандартное отклонение по X) управляет степенью размытия Чем больше sigma_х, тем более размыто становится изображе ние Если sigma_x равно 0, берегся значение на основе размера ядра Значе ние sigma_x также может быть автоматически рассчитано Оно связано с шири нои гауссова распределения, которое используется для вычисления весов пиксе На рисунке 3 27 приведен результат применения фильтра Гаусса в про
Рисунок 3 27 - Результат выполнения программы применения фильтра Гаусса Как видно, для фильтра Гаусса рисунок легко избавляется от зернистости, однако теряет контуры изображения Для сравнения рассмотрим этот пример снимка с применением билатерального фильтра Билатеральный фильтр (Bilateral Filter) это метод фильтрации изобра- жений, который используется для сглаживания изображений, уменьшения шума, но при этом сохраняет ребран грани Этот фильтр применяется в обработке изоб- ражений с целью улучшения их визуального восприятия, сохранения деталей и устранения шума Билатеральный фильтр учитывает, как пространственные (геометрические) различия между пикселями, так и яркостные различия Таким образом, он пред- назначен для сохранения ребер и граней, учитывая одновременно простран- ственные и яркостные характеристики изображения Этот фильтр использует две функции весов для определения влияния каждого пикселя на результат Одна функция определяет веса на основе про- странственного расстояния между пикселями, а другая на основе различий в яркости Проще говоря, билатеральный фильтр, анализирует небольшую область во круг каждого пикселя изображения, но при этом использует два типа «весов» Первый вес зависит от расстояния чем дальше соседний пиксель от централь ного тем меньше его влияние Второй вес зависит от схожести яркости чем больше разница в яркости между соседним и центральным пикселем, тем меньше влияние первого На основе этих весов происходит взвешенное «смешивание» значении соседних пикселей, где близкие и похожие по цвету вносят больший вклад В результате шумные пиксели, сильно отличающиеся от соседей оказы вают меньшее влияние, а пиксели внутри однородных объектов сглаживаются При этом пиксели на границах объектов, где цвета резко меняются не смешива ются сохраняя четкость границ. Рассмотрим пример применения функции cv2.bilateralFilterf) билатераль ного фильтра на простом программном коде.
Для корректной работы билатерального фильтра необходимо настроить три параметра d диаметр окрестности каждого пикселя Этот параметр определяет, какие пиксели включаются в окрестность каждого пикселя при вычислении весов Зна- чение d - 20 означает, что для каждого пикселя будут рассматриваться пиксели, находящиеся в радиусе ] 0 пикселей от него (диаметр равен 2 х радиус) Чем больше значение d, tew больше соседних пикселей будет участвовать в фильтра- ции, и тем сильнее будет эффект размьпия Однако слишком большое значение может привести к потере деталей, а слишком маленькое не даст желаемого эф- фекта сглаживания Значение 20 является достаточно большим и может приво- дить к заметному сглаживанию. sigma_colar стандартное отклонение по цвету Этот параметр контроли- рует, насколько различия в яркости влияют на веса. Большее значение сглажи- вает изображение больше Более высокие значения sigma_color означают, что пиксели с более значительными различиями в цвете будут считаться «похожими» и будут участвовать в сглаживании Если sigma_color слиш ком мало, то фильтр будет бот ься на различия z цвете, и сгла живание может быть более «тонким» и не будет затрагивать границы объектов При sigma_coiar = 100 фильтр будет более толерантен к различиям в цвете что приведет к более сильному сглаживанию, но с сохранением границ, так как их перепады яркости, как правило, значительно выше sigma_space стандартное отклонение по координатам Этот параметр от иа веса Чем больше определяет, насколько пространствен значение stgma_space, тем дальше расположенные пиксели будут влиять на сгла живание Параметр sigma_space контролирует пространственное размытие по этому при увеличении значения, фильтр будет применять большее размытие с сохранением границ Значение sigma_space = 120 в данном случае приведет к заметному размытию с сохранением границ. Результат работы рассмотренного кода представлен на рис 3 28
фекгы кожи (например, мелкие морщины, прьпцики, неровности текстуры) но при этом требуется сохранил, четкость контуров и важных детален лица (глаза, губы волосы) Рисунок i 28 - Применение билатерального фильтра на фото В отличие от фильтра Гаусса, который сглаживает изображение, не учиты- вая границы, билатеральный фильтр сохраняет резкость границ, размывая только те области, которые близки по цвету и яркости Это достигается за счет исполь- зования двух функций пространственной и яркостной Пространственная функ- ция определяет, как далеко находятся пиксели от целевого, а яркостная насколько они отличаются по яркости от него Благодаря этому, билатеральный фильтр может сгладить неровности кожи, не размывая при этом края лица, брови, ресницы и другие важные детали Как было сказано выше, выбор между билатеральным фильтром и фильтром Гаусса или каким-либо другим фильтром зависит от конкретной задачи и требо- ваний к обработке изображений Если важно сохранить ребра и грани, билате- ральный фильтр может быть предпочтительным В других случаях, когда глав ное сглаживание, фильтр Гауссаможет быть более подходящим Нелокальный фильтр среднего (Non Local Means, NLM) относится к нели неияым фильтрам шумоподавления. В отличие от сверточных фильтров адалти руст свою работу к содержимому изображения, что позволяет ему более эффек тивно удалять шум, сохраняя при этом детали. Он является более продвинутым методом шумоподавления по сравнению с Гауссовым фильтром и хорошо под ходит для обработки изображений, где 1 .границы и текстуры Би латеральный фильтр, также нелинейный, является промежуточным вариантом Данный фильтр работает no npi чает его от классических сверточных пиксель опираясь только на его близ .ного усреднения что отли то того чтобы обрабатывать , этот алгоритм анализирует
усредняет ЯйлВйия пиксатий'из ток похожих областей Чем больше сходство областей тем больший вес при усреднении получает пиксель из этой области Это позволяет шум, не размывая при этом границы и мел кие детали изображения, поскольку усреднение происходит на основе сравнения областей, а не только их пространственной блтвости Ниже приведена сравнительная таблица классических фильтров использу емых для шумоподавления Фильтр NLM (1artNIM eansDen о iviii g) Характеристика фильтр Линейный, сверточный Принцип работы Свертка с ядром Гаусса Сглаживание с сохранением границ Усреднение по похожим областям Сохранение границ Плохое Хорошее Отличное Сохранение дезалей Плохое Среднее Хорошее Учет глобального контекста Нет Пег Да Скорость вычислений Высокая Средняя От средней до низкой Ниже рассмотрен программный код с применением функции cv2fasMMeansDenoising библиотеки ОрепСУ, реализуемый алгоритм быстрого нелокального среднего для подавления Шумана изображении
ритм нелой&ййбго усредаеяия'^г’йгайажПешко^О из библиотеки ОрепСУ для удаления шума, используя заданные твраметры для степени сглаживания и размеров окон поиска, азатем отображает оригинальное и обработанное изоб ражения в отдельных окнах В данном примере функция cv2 JastNlMeansDenoising принимает следую щие параметры входное зашу в данном случае img па раметр определяющий степень сглаживания, чем выше, тем сильнее шумо подавление но больше потеря деталей (в данном случае h_yalue = 15) раз мер окрестности вокруг пикселя, используемой для сравнения (в данном слу чае template_size - 9), размер окна поиска подобных окрестностей (в данном слу чае tempiateWind<nvSize=template_size). Более детально параметры функции fasMMeansDenoismgO рассмотрены в Приложении Результат работы программы представлен на рж 3 29 Рисунок 3 29 - Применение нелокального фильтра среднего Филыпррасширения (dilaticn) и фильтр суженая (erosion) это две часто применяемые операции в обработке изображений, используемые в компьютер ном зрении для изменения формы и размера объектов на изображениях Давайте разберемся с каждым из них Фильтр; । для увеличения яркости и размера объек тов на изображении Он работает следующим образом Каждый пиксель изобра жения рассматривается вместе с его окрестностью, называемой структурирую щим элементом Структурирующий элемент это небольшое изображение (обычно квадрат ное или прямоугольное), которое определяет форму и размер окрестности нс пользуемой для анализа каждого пикселя на изображении при применении one рации морфологической обработки, таких как сужение и расширение Структу рирующии элемент применяется к каждому пикселю на изображении Он разме щается таким образом, чтобы его центр находился в центре окрестности пикселя к которому применяется операция.
ние 1 (белый? д^черно ба кущии пиксель устанавливается в значение 1 Это приводит к тому, что объекты да изображении «растут» или «рас ширяются» а шум или маленькие дырки в । ; могут быть заполнены для одного структурирующего элемента В данном случае область структурирующего элемента 3x3, который подле- жит преобразованию, представлена квадратом Поскольку в область попадает единственно значение 1 (белый цвет), то ре- зультирующая область будет иметь вид Что касается фильтра сужения, то здесь наоборот Он используется для уменьшения объектов на изображении. Он работает следующим образом Каж- дый пиксель изображения также рассматривается вместе со своей окрестностью, структурирующим элементом Если все пиксели в окрестности имеют значение
0 0 1 ООО ООО Но поскольку область не состоит ич единиц (белый цвет), то результирую щая область будет иметь вид ООО ООО ООО К примеру, область с красным квадратиком остается неизменной, поскольку все ее значения равны единице В библиотеке компьютерного зрения ОрепСУ функции cv2erode() и cv2 dilatel) используются для применения этих операций соответственно Обе функции принимают в качестве параметров исходное изображение и структу- рирующий элемент, который определяет форму окрестности для каждого пикселя Рассмотрим программный код с применением функций сужения и расшире- Этот код использует библиотеку ОраъСИ'для выполнения морфологических операции Сначала создается структурирующий элемент (ядро) размером 5x5 Затем загружается исходное чего применяются операции сужения и расширения с использованием созданного структурирующего эле мента Результаты обеих операций (рис. 3 32) сохраняются в отдельных файлах
турирующии элемент kernel, определяющий форму и размер окрестности для операции Форма ядра (прямоугольник, эллипс, крест) и его размер влияют на способ обработки объектов, определяя, какие детали изображения будут под вертнуты эрозии или дилатации. Параметр iterations контролирует количество применении операции, усиливая эффект обработки Необязательные параметры anchor borderiype и bo/derlr'alueвлияют зато, как обрабатываются края изобра жения и как определяется якорная точкаядра, хотя чаще всего используются зиа чения по умолчанию Правильный выбор формы, размера ядра и числа итерации критически важен для достижения желаемого эффекта морфологической обра ботки Более детальная инструкция пршае в Приложении к данной книги рассмотрена Рисунок 3 32 - Результат применения фильтров сужения и расширения над исходным изображением В цветных изображениях, таких как RGB, фильтры dilation и erosion приме- няются отдельно к каждому цветовому каналу (красному, зеленому, синему) То есть для каадогоканалаизображеяие рассматривается как отдельное, «черно- белое» изображение, к которому применяются операции dilation/erosion Результатом является изображение, в котором каждый цветовой канал был обработан независимо Это может привести к изменениям не только в форме но и в цвете объекта Например, если вы применяете dilation к красному каналу то красные части объектов расширятся, но не обязательно все объекты Таким образом, если, например, рассматривать изображения портрета чело века то эти два фильтра приводят к следующим изменениям Операция сужение на изображении может привести к удалению мелких де талей таких как тонкие волосы, мелкие морщины или детали кожи Возможно сглаживание контуров объектов, что приведет к уменьшению детализации изоб Операция расширение на изображении может сделать контуры объектов бо лее толстыми и заметными Вс . пустот или разры вов в объектах что может сделать объекты более плотными и компактными
ния а также от особенностей звображения Важно экспериментировать с пара метрами и выбирать подходящие структурирующие элементы в зависимости от желаемого эффекта Медианный фильтр —это метод сглаживания изображении используемый для уменьшения шума при сохранении границ объектов В отличие от фильтров использующих веса, медианный фильтр оперирует непосредственно значениями пикселей в окрестности. Для понимания его работы необходимо знать понятие «медиана» это значение, находящееся в середине отсортированного набора чи сел При применении медианного фильтра, по изображению «скользит» окно за данного размера, обычно квадратное, например 3x3 или 5x5 Для каждого поло жених окна извлекаются значения пикселей внутри него, которые затем сорти руются по возрастанию (по яркости). Медиана, то есть среднее значение в от сор тированном списке (или среднее арифметическое двух средних значений при четном количестве элементов) используется для замены значения центрального пикселя в исходном изображении Грис. 3 33) Таким образом, медианный фильтр не имеет ядра в виде матрицы весов, а основывается на скользящей окрестности и алгоритме вычисления медианы Основная идея фильтра заключается в том, что лгу иные пиксели являютци еся выбросами, имеют Поскольку фильтр выбирает меди ану а не сред нее арифметическое, он более устойчив к таким выбросам сохра няя при этом края объектов Ва ого фильтра от фильтров на основе среднего арифметического значения, где суммируются все значения и делятся на их количество Например, применение медианного филь тра к изображению с белым фоном и черной точкой шумом сократит шум со хранив контуры объектов, включая, в большинстве случаев контур самой чер нои точки если она не одиночный пиксель.
уменьшитьий^*й4 на изо£ при этом важные детали Функ ция cv2 medianBlurf) в библиотеке ОрепСУ позволяет применять медианный фильтр к изображениям в Python. Ниже представлен пример программы с применением этой функции В данном примере программ а загружает изображение с именем kartinka jpg, применяет медианный фильтр с ядром размером 5x5 и записывает обработанное изображение Результат рассмотренного примера для размера представлен на рис 3 34 Рисунок 3 34- Результат применения медианного фильтра На рисунке для сравнения приведен фильтр с ядром 5x5 и 11x11 Первое изображение является исходным Более детальное описание функции cv2jnedianBlurO представлено в Прило Фильтр Лапласа это базовый оператор обработки изображении, исполь зуемыи в компьютерном зрении для выявления резких С) изменении яркости или перепадов соответствующих границам объектов Он помогает выделить кон туры и границы где яркость резко меняется Фильтр работает следующим образом: представьте, что у вас есть изобра жение и вы хотите найти места с резкими перепадами яркости Фильтр Лапласа позволяет обнаруживать та ая в роли детектора границ
Фильтр Лапласа работает по принципу свертки, детально изложенному в разделе 3 92 «Принцип работы фильтра» Рассмотрим пример вычисления данного фильтра (рис 3 35) Суть работы таких фильтров заключается в; ий пикселей на соответствую щие весовые коэффициенты ядра и последующем суммировании полученных произведений Однако в процессе свертки иногда возникают ситуации, когда итоговое значение выходит за пределы допустимого диапазона яркости пикселя например, превышает 255 для 8- На рисунке 3 35 значения выходящие за пределы допустимого диатвзона яркости, отмечены красными га дочками Для корректной обработки таких случаев часто применяются методы нормализации или отсечения Нормализация масштабирует результирующие значения, приводя их в допустимый диапазон Отсечение, в свою очередь, огра- ничивает значения сверху и снизу, отсекая значения, выход ящие за пределы диа- пазона Выбор конкретного метода зависит от поставленной задачи и желаемого результата Полученное после свертки значение наказывает степень изменения яркости Чем больше абсолютное значение, тем более резкое изменение Положительные и отрицательные значения указывают на увеличен» или уменьшение яркости соответственно Недостаток! ьтра Лапласа может привести к усилению шума на изображении В OpenCV задача применения фильтра Лапласа решается при помощи функ ции о2 Laplacian(
Из результата выполнения программы видно, что фильтр Лапласа необхо- димо применять вместе с другими фильтрами, такими как сглаживающие филь- тры, чтобы улучшить качество обработки изображения Это связано с тем, что фильтр Лапласа чувствителен к шуму и может гфивести к усилению шума на изображении Применение предварительного сглаживания позволяет снизить уровень шума и улучшить обнаружение краев ica. изображении Фильтр Собеля это один из основных операторов обработки изображе нии используемый для выявления границ на изображении Он является частью обширного арсенала инструментов компьютерного зрения Этот фильтр работает следующим образом Представьте, что у вас есть изображение в оттенках серого, например, фотография Когда мы говорим о вы явлении границ мы хотим найти места на воображении, где происходит резкое изменение яркости или интенсивности пикселей. Эго и есть границы объектов на изображении Фильтр Собеля выполняет: . интенсивности каждого пикселя Градиент показывает, насколько быстро меняется интенсивность в каж дом направлении (горизонтальном и вертикальном). Это позволяет нам опре
Процесс вычисления фильтра Собеля включает следующие шаги 1 Применение горизонтального ядра. 2 Применение вертикального ядра. 3 Получение карт градиентов 4 Объединение градиентов 5 Визуализация границ Применяется ядро к каждому пикселю гвображемия (обычно 3x3 или 5x5) оно проходит через каждый пиксель и 1 Для вычисления градиента по горизонтали используется следующее ядро Это ядро выделяет горизонтальные границы Для вычисления градиента по вертикали используется следующее ядро Это ядро выделяет вертикальные границы После применения обоих ядер к изображению, мы получаем две отдельные карты градиента одну для горизонтальных изменений и другую для вертакаль- Затем эти две карты градиента объединяются для получения общей карты градиента Обычно используется формула. градиенты по горизонтали и вертикали соответственно Полученная карта градиента показывает, где на изображении находятся гра ницы объектов Таким образом, фильтр Собеля помогает выявлять границы объектов на изображении, что является важным шагом в обработке изображений в компью терном зрении Он широко используется для различных задач, таких как обнару жение краев, сегментация объектов и другие. Рассмотрим пример программы, которая реализует фильтр Собеля посред сгвом функции cv2 Sobelf) Этот код применяет фильтр Собеля для вычисления горизонтального и вер тикального градиентов изображения Результаты сохраняются в отдельные файлы "sobel_xjpg” и "sobel_yjpg" Зачастую требуется изменить размер ядра (ksize) в зависимости от требуемой чувствительности к границам
В примере, для демонстрации результатов вычисления градиентов по осям не выполнена процедура их объединения. Ниже представлен код программы с учетом математического объединения градиентов, формула которой была рас смотрена выше В этом коде применяется функция cv2magnttude( для объединения резуль татов вычислений горизонтального и вертикального градиентов в общую карту градиента Результат сохраняется в файл Hsobel_kartmka.jpg”
Результат выполнения программы слияния двух градиентов Собеля пред ставлен на рис 3 38 Рисунок 3 38 - Результат применения фильтра Собеля (сумме градиентов) Важно понимать, что фильтр Собеля, как и многие другие операторы выде- ления границ может быть недостаточно устойчив к шуму на изображениях (рис 3 38) Высокийуровеиьзашумленняможетпривесгикложному обнаружению границ и неточностям в результатах Чтобы повысить точность работы фильтра Со беля на зашумленных изображениях, рекомендуется предварительно выполнить сглаживание, например, с помощью фильтра Гаусса. Фильтр Гаусса уменьшает шум размывая мелкие детали и сглаживая резкиз перехода, что помогает фильтру Собеля точнее определять истинные границы. Кроме того, при последовательных преобразованиях изображения, згичения пикселей могут выходить за пределы до пустимого диапазона яркости В таких случаях необходимо применять нормализа цию которая масштабирует значения пикселей к заданному диапазону (например от 0 до 255 для 8 битных изображении), обеспечивая корректное отображение Стоит заметить что существует и другие фильтры, которые представлены биб а также фильтр функцией cv2fiiter2D() Более детальный обзор и при
Напомним что все ра видеокадру В этом случав । находиться в теле цикла чте кадру могут применяться и к сняться последовательно к каждому 3.10. Нормализация и масштабирование значений пикселей После применения различнь границ (например, фильтра Собе ьтров, в том числе фильтров выделения ачения пикселей в выходном изображе нии могут превышать максимальное допустимое значение или опускаться ниже минимального Это явление, известное как переполнение, может возникнуть из за суммирования результатов свертки, где отдельные слагаемые могут быть больше 255 (для 8-битного изображения) или меньше 0 (рис 3 34, красные га- лочки) Переполнение приводит к искажению изображения, потере деталей и снижению качества обработки Например, резкие перепады интенсивности (края объектов) могут быть представлены неточно или вообще потеряны Кроме того, негативные значения пикселей не имеют физического смысла в контексте яркости Для коррекции этого эффекта применяется нормализация Основная цель нормализации привести значения пикселей в выходном изображении к желае- мому диапазону (наприм ер, от 0 до 255) Эго гарантирует, что все значения оста- нутся в допустимых пределах и не вызовут проблем цри дальнейшей обработке или визуализации Математически нормализация значений пикселей выглядит следующим об- разом : в целевом диапазоне нормализации нормализованное значение пикселя, минимальное значение в исходном диапазоне пикселей, максимальное значение в исходном диапазоне пикселей, минимальное значение в целевом диапазоне нормализации Если перенести эту математическую запись на пример (рис 3 35) где в ре зультате фильтрации текущее значение пикселя выходят за нижнии и верхний приделы то получим такое обновленное тображение (рис 3 39)
Рисунок 3 39 - Результат нормализации знамений пикселей В данном примере минимальное значение пикселя в матрице 634, макси- мальное 510, минимальное значение пикселя нормализованной матрицы 0, мак- симальное 255 Тогда для пикселя с координатой (0,1), значение которого равно 44, нормализованное значение будет равно Хп (810-(-в34)) + U Вначале может показаться, что первое изображение (ненормализованное) значительно праще для восприятия Однако на самом деле большое количество ценой информации будет потеряно Особенно это важно для формирования карт признаков в сверхточных слоях жйроиной сети Теперь рассмотрим результат практического примера, в котором применен фильтр Собеля (рис 3 40) В результате большая значения превышаю щие 255 вследствие чего изображение имеет преимущественно белое пятно
жение с помощь функции нормализации. Для нормализации значений пикселей в вышеописанной программе можно применить функцию cv2.normalize/) бибпиотхкиСрепСГ В основе данной функции лежит математический методиыч 1я, который описан выше Ниже приведен программный код, который решает вопрос переполнения пикселей для данной задачи Данная программа демонстрирует обработку изображения для выделения гра ниц Сначала изображение в оттенках серого считывается из файла (рис 3 41 А) Затем применяется фильтр Гаусса с ядром 15x15 для подавления крупных шумов (рис 3 41 Б) После этого, используя фильтры Собеля, вычисляют горизонталь ныи и вертикальный градиенты (в формате с плавающей запятой cv2 CV_64F для точности) которые затем объединяются в модуль градиента (рис 3 41 В) Однако большая часть области воображения содержит переполненные пиксели Для корректного отображения и обработки модуль градиента нормализуется (рис 3 41 Г) в диапазон 0 255 (cv2JJORMJUNMAX, cv2 CV_8U) В конце про граммы выводятся исходное, сглаженное и нормализованное изображения а также модуль градиента.
В данной программе: фут является cv2 normalized, которая масштабирует значения пикселей модуля градиента, полученного после приме нения фильтров Собеля, к диапазону от 0 до 255 Это обеспечивает корректное отображение и дальнейшую обработку изображения, предотвращая потерю ин формации из-за выхода значений за допуспнше пределы 3.11. Выделение контуров и краев на изображениях 3J11 Обнаружения границ Выделение контуров л краев на изображениях это процесс выявления гра- ниц объектов или переходов между различными областями в гвображении Это помогает выделить важные детали и структуры Эта техника имеет множество применений, таких как распознавание обра- зов, сегментация объектов, улучшение качества изображений, медицинская диа- гностика и другие области Выделение границ н контуров помогает выделить объекты на изображении, делая их более заметными для последующей обра- ботки Основной принцип выделения границ это выявление изменений в яркости или цвете пикселей изображения Граница объекта обычно представляет собой резкое изменение яркости Для этого используются различные методы, такие как детекция градиента, фильтры или морфологические операции На рис 3 42 приведен пример, который демонстрирует резкий переход цве тов некоторых объектов на изображении, что используется в качестве признака для детекции границ самих объектов Как вид но на рисунке, край бутана цветка с цветом (237, 85, 106) резко от личается от заднего фона принтера (79, 80, 91) благодаря этой разнице можно локализировать место границы двух объектов Причем, чем выше разрешение тем выше детализация и тем ; границ Выделение контуров и краев это мощный инструмент в обработке изобра женин который помогает выявлять структуры и особенности делая изображе ния более информативными и удобными для анализа.
Этот принцип может быть полезен во многих областях знании Так, напри мер, при выделении контуров лиц можно более точно определил, их форму, что полезно в системах распознавания лиц Выделение контуров на медицинских изображениях может помочь в выявлении изменений в тканях или органах Роботы, применяющие камеры для навигации, могут использовать выделение контуров для определения границ объектов и предотвращения столкновений При повышении четкости контуров объектов можно улучшить общее визуальное восприятие изображения и т д В библиотеке CpenCVдля обнаружения границ на изображении применяют функцию cv2 Cannj>() с использованием алгоритма Саппу Алгоритм Саппу, реализованный в cv2 СаппуО, представляет собой много- ступенчатый процесс для точного выделения границ на изображениях Первым шагом применяется фильтр Гаусса для снижения уровня шума, который мог бы привести к ложному обнаружению границ Затем, для определения резких изменений в интенсивности изображения, вычисляются градиенты яркости Градиент в данном контексте это вектор, показывающий направление и око ростъ изменения яркости пикселей. Он вычисляется как изменение интенсивно сти в горизонтальном и вертикальном направлениях, и его величина указывает на то, насколько резким является перепад яркости Высокая величина град иента обычно соответствует границе объекта. Далее, для утончения границ и сохранения только значимых пикселей ис пользуется немаксимальное подавление Этот этап оставляет лишь локальные максимумы градиента вдоль направления этого градиента, тем самым убирая из быточные значения и делая контуры более четкими На завершающем этале при меняется гистерезисная пороговая обработка с использованием двух пороговых значении высокого и низкого Пиксели, вепичинаградиентакоторыхвыше верх него порога, однозначно считаются границами. Пиксели, величина градиента ко торых находится между двумя порогами, включаются в контур только в том слу чае если они связаны с уже определенной границей Такой подход позволяет
слабые и мййеййчимые переходи:— Рассмотрим пример программы, которая исполиует алгоритм Саппу для об наружения границ на входном щображении с применением порогов гистере зиса 50 и 150 и отображает оригинальное воображение и результат обнаружения cvlCoioxiftwe, cv2.COLOR? ) 50, 150) В предоставленном коде функция cv2.Cannf(frame, SO, 150) применена к каждому кадру frame видеолотока. Первое значение называется threshoidl -50 параметр представляет собой ниж- ний порог градиента. В данном случае, пиксели, чья величина градиента ниже 50, отбрасываются, так как они считаются шумом или малозначимыми изменениями Пиксели с градиентом, равным или повышающих 50, становятся кандидатами на Второе значение называется threshold! —150 параметр представляет собой верхний порог градиента Пиксели с градиентом выше этого порога будут рас сматриватъся как часть «сильных» контуров Пиксели с градиентом между 50 и 150 могут стать частью контура, только если они связаны с пикселями, которые уже были идентифицированы как «силь ные» границы Этот подход, известный как гистерезисная пороговая обработка, позволяет более точно! турах t шум и избегая разрывов в кон На практике значения порогов могут варьироваться в зависимости от кон кретнои задачи и особенное этих порогов может
значения слишком низки, могут возникнуть лажные положительные контуры из Таким образом, при настро метров важно провести экспери менты и выбрать оптимальные значения для конкретного случая Результат работы программы гриведен рисунке 3 43 для трех различных ва риантов коэффициентов threshold. 3 112. Обнаружения контуров Обнаружение границ и обнаружение контуров это даа важных этапа в об работке изображений Обнаружение гранит ния мест на изображении, где происходит зияет собой процесс выявле меиение яркости или интен сивносги Эго может быть вызвано изменением текстуры, цвета или освещения на изображении Обычно это делается с использованием алгоритмов таких как алго ритм Саппу функцию которой мы рассмотрели выше, или оператора Собеля Ре зультатом этого процесса является бинарнэе изображение, на кагором белые пик сели обозначают обнаруженные границы, а черные отсутствие границ Обнаружение контуров, с другой стороны, является следующим шагом по еле обнаружения границ Онозаключается в поиске кривых которые описывают границы объектов или форм ва щображении. Обычно это делается на основе
Таким образом обнаружение границ помогает нам определить места изме нении на изображении, тогда хак обнаружение контуров позволяет нам выделить и описать эти изменения в виде кривых. Обнаруженные контуры могут быть нс званы для множествазадач,: ; объектов на изображении анализ их формы, измерение их размеров и многое другое Как было сказано выше, функция cv2 СаппуО используется, чтобы наигиме ста, где цвета на изображении меняются очень резко Она помогает нам наити контуры объектов, обозначая места, где яркость на изображении изменяется зкты заканчиваются или начинаются >ы, а просто выделяет места, А вот для создания контуров и работы с ними применяют две функции cv2 findContawsO и cv2.drawContaws(). После применения алгоритма Саппу с помощью функции cv2 Саппу О, кото рая выделяет границы объектов, мы можем воспользоваться функцией cv2findContaurs() для определения контуров этих объектов Далее, функция cv2 drm>Contaurs() позволяет визуализировать найденные контуры, отображая их непосредственно на изображении Таким образом, для извлечения и отри- совки контуров на изображении обычно используют эти две функции, cv2 findContoursQ и cv2drawContow-s( Важно отметить, что использование с2 СаппуО не является обязательным шагом перед cv2 ftndContaursQ Для нахождения контуров достаточно преобра- зовать исходное изображение в бинарный формат и уже к этому бинарному изоб- ражению применить функции cv2findContcursO и последующую отрисовку cv2 drmvContaursO Именно такой пример программы рассмотрен ниже NAI, cvZ CHAIN APPROX NONE!
В данной программе чего применяется бииаризт зуется в оттенки серого после iepHO белое изображение Затем на бинаризованном изображении находятся контуры объектов, используя функ дню cv2 fmdContoursO Найденные контуры затем отображаются на исходном цветном кадре с помощью функции cv2jdrawContows() Функция cv2findContairsQ вызывается с тремя артумеятами binar cv2 RETR_EXTERNAL, cv2 CHAlNjlPPROXJfONE Первый аргумент binar бинартвованное изобра жение, на котором мы хотим найти контуры. В нашем случае это черно белое изображение кадра, полученное после преобразования в оттенки серого и бина ризации Второй аргумент режим пожка контуров В данном случае используется ci>2 RETR_EXTEPNAI., что означает, что функция будет извлекать только внеш- ние контуры, игнорируя внутренние. Третий аргумент метод аппроксимации контуров Здесь используется cv2 CHAIN_APPROX_NONE> который сохраняет все точки контура без сжатия или аппроксимации Таким образом, эта строка кода ищет внешние контуры на бинаризованном изображении В функции frame это исходное изображение, на котором будут нарисованы контуры В данном контексте переменная frame содержит кадр с веб-камеры, на котором происходит обнаружение контуров, kontur это переменная, хранящая найденные контуры Эти контуры были определены с помощью cv2findCMOws0 и представляют собой массив данных Каждый внешний элемент этого массива соответствует отдельному контуру а каждый контур, в свою очередь, является массивом точек (с координатами х ну) описывающим его форму Таким образом, kontur содержит список всех об наруженвых контуров, где каждый контур это последовательность точек фор мируютцих его границу. индекс контура для отрисовки Значе это параметр, определят ние 1 указывает на необходимость отрисовать все найденные контуры Если вместо ] указать 0, будет отображен первый контур Аналогично можно указать индекс любого из найденных контуров для его отображения, (0 255 О) определяет: левый цвет в формате BGR, фов В данном случае это зе
терес Результат рассмотренной программы представлен на рис 3 44 Рисунок 3 44 - Результаты выполнения программы обнаружения контуров Такой подаод отрисует контуры, у которых порядковый номер лежит в диа- пазоне or 150 до 200, а остальные контуры будут проигнорированы Как было отмечено, при необходимости отрисовать один конкретный кон тур из списка, вместо ) можно использовать его порядковый номер Однако как показывает практика, на каждом кадре индекс контура может меняться из за ди намики изображения Это приводит к тому, что при фиксированном индексе на разных кадрах будут отображаться разные контуры Для точного выделения нуж ного контура и снижения вере» контуров, требуются дополнительные методы, повышающие точность распознавания границ Задача отс за возникает, когда необходимо следить за определенным объектом на видео, контур которого был выделен Из за динамики изображения, порядковый номер этого контура в списке посто явно меняется делая неэффективным простое использование индекса для его от рисовки Основная цель заключается в обеспечении стабильного отслеживания желаемого контура, несмотря на вменения в его порядковом номере что требует разработки способа распознавания и идентификации нужного контура на каждом кадре
ния на порядковый номер можно использован свойства контура, такие как пло щадь центроид периметр, или отслеживать движение контура с помощью опти ческого потока, фильтра Калмаиа или специализированных трекеров OpenCV Эти подходы будут рассмотрены при дальнейшем изучении книги Выбор кон кретного подхода зависит от сложности сцепы, требуемой точности доступных вычислительных ресурсов и других факторов, но все эти методы направлены на создание стабильной связи между отслеживаемым объектом и его контуром на каждом кадре 3.12. Гомография изображений Гомография изображений это математический метод который позволяет преобразовывать одно изображение в другое. Гомография используется, когда нужно сделать два изображения одного и того же объекта или сцены похожими друг на друга Например, если есть две фотографии одной достопримечательно- сти, сделанные с разных точек зрения, гомографию можно использовать, чтобы объединить их в одно изображение так, чтобы оно выглядело, хак будто было сделано из одной точки (рис. 3 45). Кроме того гомография широко применяется в сгереозрении когда сцену снимают с двух разных точек (таз), получают два изображения этой сцены Го мография используется для выравнивания этих изображении так чтобы можно было точно сопоставить каждую точку на одном изображении с соогветст
для создания трехмерных эффектов в фильмах или видеоиграх В томографии пиксели модифицируются путем применения аффинногопре- образования к исходным координатам пикселей Томография представляет со- бой матрицу, которая описывает это преобразование Каждый пиксель на изоб- ражении представлен координатами (х,уХ и томография позволяет нам пересчи- тать эти координаты в новое положение (х\у‘) с учетом преобразования Томография задается матрицей размера 3*3 Каждая координата (х, у) пред- ставляется в виде гомогенных координат (х,у, 1) После применения гомографии к этим координатам мы получаем новые гомогенные координаты (х1,^, w), где w может быть отличным от 1 в общем случае. Для получения финальных координат (х1, у') мы делим новые гомогенные координаты (х1, у, w) на w Это учитывает возможные изменения масштаба и сдвига, которые могут происходить в результате томографии. Таким образом, модифицируются коор динаты пикселей с учетам преобразования, заданного гомографией Рассмотрим небольшой пример применения этой функции. Предположим у нас есть две фотографии mi jpg и m2jpg (рис. 3 47), в которых необходимо наити точки соединения, и далее объединить фотографии в одну Причем одна из них не соосна с другой Весь процесс работы над изображениями можно описать так Сначала при меняется алгоритм ORB (OrientedFAST and Rotated BRIEF) для нахождения клго левых точек и их дескрипторов на каждом щображении Дескрипторы представ ляют собой компактное между собой , позволяющее сравнивать их
После этого применяется алгоритм BFMatcher (Brule Force Matcher), кото- рый сопоставляет дескрипторы ключевых точек на обоих изображениях и нахо- дит соответствия между ними Сопоставления сортируются по расстоянию между дескрипторами Далее извлекаются координаты ключевых точек для сопоставленных парна обоих изображениях Затем с помощью метода RANSAC находится гомография, то есть преобразование перспективы, которое позволяет выравнять одно изобра- жение относительно другого После нахождения гомографта применяется преобразование к одному изоб- ражению таким образом, чтобы оно выравнивалось с другим Затем два изобра- жения сливаются в одно, чтобы получить окончательный результат, где эле- менты обоих изображений выровнены и находятся на своих местах Наконец, объединенное изображение отображается, и пользователю предо ставляется возможность увидеть результат выполнения программы В библиотеке OpenCVтомография воображений осуществляется функцией c>2findHom agraphyO Приведенный ниже исходный код выполняет сопоставление и слияние двух изображении посредством функции cv2finiHomographyO
Рассмотрим в программе основные ее этапы Конструктор cvi ORB_create() создает объект ORB, который используется для обнаружения ключевых точек и вычисления их дескрипторов на изображе- Функция detectAndCompiaef) выполняет обнаружение ключевых точек и вы числение их дескрипторов на заданном изображении с использованием апго ритма ORB После выполнения этих строк кода тЕремениые keypoints 1 и keypoints? содер жат обнаруженные ключевые точки на соответствующих изображениях а перемен ные descriptorsi и descriptors? содержат их соответствующие дескрипторы Следующие строки кода ых точек между двумя изобра жениями с помощью метода BFMatcher, который использует подход перебора всех возможных пар для нахождения наииучших соответствии
нием алгоритма ORB эта» ется наилучшим выбором Пара метр crossCheck=True указывает на то, что сопоставления будут проверены в обоих направлениях, что улучлиет качество сопоставлении Далее выполняется сопоставление дескрипторов descriptors! и descriptors2 с использованием объекта bf созданного раже. Результатом является список объектов DMatch> представляющих собой соответствия между ключевыми точ ками двух изображений Каждый объект DMatch содержит индексы соответству ющих дескрипторов из descriptors! и descnptors2 а также расстояние между этими дескрипторами Функция sortedf) принимает список объектов DMatch (matches) и сортирует его Аргумент key=lambdax xdistance указывает на ключ сортировки, который в данном случае является расстоянием между дескрипторами Таким образом сопоставления будут отсортированы по возрастанию расстояния, что позволит оставить наилучшие соответствия в начале списка Следующая строка кода находит томографию (преобразование перспек- тивы) между наборами точек s*cjitsndst_pts с использованием методаRANSAC где src_pts набор исходных точек, заданных в виде массива Nutrify, dst_pts набор соответствующих точек, к которым необходимо выровнять исходные точки, также заданный в виде массива NumPy, cv2 RANSAC это метод оптимизации, который используется для оценки гомографии с учетом выбросов в данных RANSAC (Random Sample Consensus) позволяет найти наиболее вероятную модель гомографии, игнорируя выб- 50 этот параметр представляет собой пороговое значение для определения того, является ли точка выбросом или нет Значенж 5 0 показывает, что точка будет считаться выбросом, если она находится на расстоянии более 5 пикселей от модели Результатом выполнения этой строки будет матрица гомографии И, которая содержит информацию о преобразовании перспективы между двумя наборами точек Строка использует функцию cv2 warpPerspectcueO, чтобы применить гомографию Н к image! и создать новое изображение result. Размер нового изображения опреде ляется как сумма ширины mage! и mage2 по горизонтали и максимальная вы сота ж двух изображений по вертикали.
копирует содержимое image2 в левую верхнюю часть result чтобы наложить его на image! Диапазон [О image2.shape[0], О tmage2shtpe[l]] указывает на об ластъ где будет расположено mage2 в result Таким образом, в результате result будет содержать слияние image! и image2 причем image2 будет наложено на image! с использованием найденной гомографии (рис 3 48) Рисунек 3 48 - Результат программы (томография) В заключение скажем, что гомография является мощным инструментом для преобразования изображений и работы с перспективой Мы рассмотрели ос- новные принципы вычисления гомографии и ее применения для выравнивания изображений, создания панорам, коррекции искажений и проекционных преоб- разований Практическое использование гомографии требует внимательности к деталям и точности вычислений, однако овладение этим инструментом откры вает широкие возможности в компьютерном зрении и смежных областях На еле дующем этапе мы рассмотрим, хак эти цшнциша могут быть применены для ре шения более сложных задач, таких как 3D реконструкция 3.13. Вычисление гистограммы изображения Гистограмма изображения является одним из фундаментальных инструмен тов в компьютерном зрении и обработке изображений Она предоставляет наглядное представление о распределении интенсивности пикселей в изображе нии позволяя анализировать его характеристики, такие как яркость контраст и общее распределение тонов В этом разделе мы рассмотрим определение гисто граммы способы ее вычисления и применения в задачах компьютерного зрения
эты всГрйЧ'айь злучае монохромных (черно-белых) изображении уровни ярко ируются от 0 (черный) до 255 (белый) Для цветных изображе л могут строиться для каждого цветового канала (например го и синего в RGB модели) или дня общей интенсивности име по горизонтальной оси откладываются уровни яркости а по оличество пикселей, имеющих соответствующий уровень ярко Таким образом, гистограмма визуализирует распределение тонов I и позволяет судить о его характеристиках гстограммы позволяет получить ключевую информацию о харак абражЕния (рис 3 49): сметшие гистограммы влево указывает на темных тонов, вправо светлых, а ширина распределения отра жает контрастность изображения, где узкий диапазон свидетельствует о низком контрасте, а широкий о высоком Наличие большого количества пикселей с крайними значениями яркости (0 или 255) может сигнализировать о переосве- щенных или затемненных областях, в то время как модальность гистограммы (количество пиков) может указывать на наличие объектов с разными уровнями яркости Гистограммы находят широкое трименение в компьютерном зрении, позво- ляя корректировать яркость и контраст, определяя необходимость улучшения изображения по форме распределения яркостей, обеспечивают автоматическую обработку изображений с помощью алгоритмов, которые анализируют гисто- граммы для коррекции качества помогают в сегментации изображений, выделяя объекты по аналтву распределения яркости, а также способствуют обнаружению и коррекции переосвещеииых или затемненных областей, предоставляя инфор- мацию об участках с высокой или низкой яркостью Анализ гистограммы позволяет получить ключевую информацию о харак- теристиках изображения (рис 3 49): смещение гистограммы влево указывает на преобладание темных тонов, вправо светлых, а ширина распределения отра- жает контрастность изображения, где узкий диапазон свидетельствует о низком контрасте, а широкий о высоком Наличие большого количества пикселей с крайними значениями яркости (0 пли 255) может сигнализировать о переосве щенных или затемненных областях, в то время как модальность гистограммы (количество пиков) может указывать на наличие объектов с разными уровнями яркости Гистограммы находят зшфокое гримепение в компьютерном зрении позво ляя корректировать яркость и контраст, определяя необходимость улучшения изображения по форме распределения яркостей; обеспечивают автоматическую обработку изображений с помощью алгоритмов, которые анализируют гисто граммы для коррекции качества, помогают в сегментации изображении выделяя объекты по анализу распределения яркости; а также способствуют обнаружению и коррекции переосвещеииых или затемненных областей предоставляя инфор мацию об участках с высокой или низкой яркостью

библиотежй1©^МС'Г cv2 calcHistfimages, channels, mask, histSize, ranges hist accumulate) где images список изображений, для которых вычисляется гистограмма channels мяцихса каналов, для которых вычисляется гастограмма. Напри мер для изображения в оттенках серого это может быть [0], для цветного [0 1 2] mask маска изображения Гистограмма будет вычисляться только для пик histSize количество корзин в гистограмме, ranges диапазон значений пикселей Обычно это [0, 256], но может быть настроено на конкретный диапазон значений; hist (опционально) результирующая гистограмма, accumulate (опционально) если установлено в True, гистограмма будет накапливаться Поясним некоторые аргументы функции histSize в функции cv2 calcHist() представляет собойколичествокорзин (или бииов) в гистограмме Мы уже гово- рили, что гистограмма это столбчатая диаграмма, которая представляет собой распределение значений в изображении (например, интенсивности пикселей) Так вот эта диаграмма делится на несколько «корзин» или интервалов, и histSize определяет, сколькотахих интервалов будет использовано для построения гисто- граммы Чем больше histSize, тем более детализированной будет гистограмма, по- тому что она будет иметь больше столбцов, отражающих различные значения в заданном диапазоне Например, если histSize равно 256 (что часто используется для оттенков серого), гистотрамма будет иметь по одному столбцу на каждое значение интенсивности от 0 до 255 Однако стоит помнить, что слишком большое количество «корзин» может привести к потере обобщающей способности гистограммы, особенно если дан ных мало Поэтому выбор оптимального histSize зависит от конкретной задачи Параметр mask в функции cv2.calcHist() представляет собой маску изобра жения Это изображение того же размера, что и оригинальное изображение но оно содержит значения 0 и 1 Гистограмма будет вычисляться только для тех пикселей оригинального изображения, тде соответствующие значения маски равны 1 (ненулевые) Использование маски 1 , ограничить область инте реса при вычислении гистограммы. Это может быть полезно, когдаважиы только определенные части изображения и вы хотите проигнорировать или учесть только определенные области. Рассмотрим пример программы, в который производится считывание черно белого изображения, а затем расчет и вывод его гистограммы
Рассмотрим некоторые строки программы более детально В данном коде изображение преобразуется в оттенки серого с помощью флага cv2 IMREAD_GRAYSCALB при чтении image - cv2 imread(hcojpg', cv2IMREAD-GRAYSCALE) Таким образом, этап преобразования в оттенки се- рого, как gray = ct2.cvtCcior(image, cv2.COLOR_BGR2GRAY) не требуется В строке hist = cv2.calcHist([image], [О] None, [256], [О, 256]) осуществ- ляется вычисление гистограммы изображения в оттенках серого (image) Рас- смотрим аргументы функции [image] это изображение в оттенках серого, для которого строится гисто- грамма Функция ожидает список изображений, поэтому изображение переда- ется в списке, [0] указывает на индексы каналов, для которых будет вычислена гисто- грамма В данном случае у нас есть только один канал оттенков серого, поэтому используется [0], None это параметр маски, который позволяет вычислить гистограмму только для отределенных областей изображения В данном случае маска не ис- пользуется, поэтому установлено значение None, [256] определяет количество бинов (или интервалов) в гистограмме Бины представляют собой ните юти пикселей В данном случае используется 256 бинов, чтобы охватить весь диапазон оттенков серого (от О до 255) [О 256] определяет диапазон иигенсивтюстей пикселей, для которого бу дет вычислена гистотрамма В данном случав, это весь диапазон от 0 до 25 5 что соответствует всем возмог зности для оттенков серого pltfigure() создает новое окно дня построения графика, pitplotfhist) строит трафик гистограммы, используя значения из перемен нои hist В отличие от предыдущего варианта, здесь используется plot для огоб ражения гистограммы в виде линии, а не столбцов,
(Количестй^йййселеи) добавляет заголовок иподаиси к осям трафика для бо лее понятного представления гистограммы; pit showQ отображает окно с гистограммой, ожидая, пс не закроет его самостоятельно Результат выполнения рассмотренного гримера треде В заключение к разделу можно сказать, что гистограм: егся мощным и универсальным инструментом в области кс Она дает наглядное представление ораспредепеииияркост! анализировать такие важные характеристики изображения. и наличие пере или недоэкспонированных областей Используя полученную из гистограммы, мы можем автоматизировать процес изображении, сегментации объектов, а также улучшения их каче, ностъ аналтва гистограмм с помощью таких библиотек, как ОрепС инструмент доступным и важным для широкого круга задач в обра жеиий и компьютерном зрении эрреювш 3.14. Сегментация изображений Сегментация изображения это фундаментальный процесс в компьютер- ном зрении, заключающийся в разделении изображения го семантически значи- мые области (сегменты), каждая из которых соответствует определенному объ- екту или части изображения. В отличие от классификации, которая присваивает метку всему изображению, сегментация стремится к более детальному понима- нию сцены, присваивая метку каждому пикселю (рис 3 50) Целью сегментации является создание подробной карты изображения, где каждый пиксель отнесен к конкретному классу или объекту, что позволяет компьютеру «видеть» и пони- мать содержание изображений на уровне отдельных элементов Сегментация находит широкое применение в различных областях таких как медицинская диагностика (аяалзв снимков MRI/СТ), автоматическое вождение (распознавание дорожных объектов), робототехника (восприятие окружающего
из сцен) и muoihx друг Существует множестве» методов сегментации, которые можно классифици роватъ на несколько основных трупа, каждая из которых имеет свои особенно сги преимущества и недостатки. Выбор подходящего метода зависит от кон кретнои задачи, характеристик изображения и требуемой точности Методы основанные на пороговых значениях, являются одними из самых простых и интуитивно понятных. Они работают путем разделения изображения на сегменты посредством сти каждого пикселя с одним или несколькими заданными порогами. Если яркость пикселя превышает порог или находится в определенней диапазоне, он отгюсится к одному сегменту в противном случае к другому Простая пороговая сегментация использует одно глобальное пороговое значение для всего изображения, что подходит для изображений с четко выраженным контрастом, но неэффективно для изображе ний с неравномерным освещением. Адаптивная пороговая сегментация, в отли чие от простой, использует локальные пороги, которые меняются в зависимости от области изображения, позволяя обрабатывать изображения со сложной струк- турой и неравномерным освещением Несмотря из простоту реализацииивычис- лительяую недороговизиу, эффективность пороговых методов сильно зависит от выбора пороговых значений и качества изображения, в частности наличия шумов Методы, основанные на кластеризации, используют алгоритмы для груп- пировки пикселей с похожими характеристиками в отдельные сегменты Каждый сегмент рассматривается как кластер пикселей, имеющих общие черты, такие как цвет, текстура или яркость Алгоритм K-means стремится раз- делить пиксели на заданное количество кластеров, минимизируя сумму квадра- тов расстояний от каждой точки до центра своего кластера Этот метод требует предварительного определения количества кластеров Алгоритм Mean Shift, в свою очередь, не требует предварительного задания количества кластеров, а ищет области высокой плотности пикселей в пространстве признаков и объ- единяет их в сегменты Методы кластеризации хорошо подходят для сегмента ции изображений с несколькими четко различимыми объектами, но требуют хорошего выбора признаков и могут быть вычислительно дорогими для боль Методы основанные на градиенте, или методы обнаружения границ наце лены на выделение границ объектов путем анализа резких изменений интенсив ности пикселей Границы часто между различными объектами или областями Оператор Собеля вычисляет приближение градиента изображения используя свертки с ядрами, определяющими производные по го ризонтали и вертикали, что пос < вертикальные и горизонтальные границы Оператор Кэнни является более продвинутым алгоритмом обнаруже ния границ который включает сглаживание изображения расчет градиента, немаксимальиое подавление и гистерезисную пороговую обработку Он обеспе чивает высокую точность обнаружения границ но является более вычис
ляет внутренние области объектов, поэтому часто требуется комбинация с дру гими методами Методы основанные на региональном росте, основываются на принципе последовательного добавления пикселей к регионам на основе критериев схоже сги Сегментация начинается с выбора одного пли нескольких «зародышевых» пикселей которые затем расширяются путем добавления соседних пикселей ьный рост начинается с выбора удовлетворяющих: начальных пикселей (семян) в разных областях изображения Затем пиксели каи дидаты соседние с сушестиуютциаи регионами, проверяются на схожесть с ними Если критерии схожести выполнены, пиксель добавляется к региону Слияние регионов, в свою очередь, это процесс объединения соседних регионов которые являются достаточно схожими по характеристикам, в один Региональ иые методы хорошо работают в областях с однородной структурой и позволяют получить связные сегменты, однако их работа зависит от выбора начальных пик- селей и критериев схожести В последние годы методы глубокого обучения, особенно сверточные нейронные сети (CNN), стали доминирующими в области сегментации Эти ме- тоды обучаются на большом наборе размеченных данных и способны автомати- чески извлекать сложные признаки из изображений и достигать высокой точно- сти сегментации Сеть U-Net является распространенной архитектурой для сег- ментации, особенно в медицинских изображениях Она имеет архитектуру ко- дера-декодера с пропущенными соединениями, что позволяет сохранить про- странственную информацию и получить точную сегментацию Mask R-CNN, в свою очередь, является еще одной мощной архитектурой, особенно для сегмен- тации отдельных объектов Она расширяет архитектуру Faster R CNN, добавляя ветвь дня генерации масок сегментации для каждого обнаруженного объекта. Методы глубокого обучения могут достигать очень высокой точности, но тре- буют большого количества размеченных данных и значительных вычислитель- ных ресурсов Хотя конкретные шаги зависят от выбранного метода, общий алгоритм сег ментации включает следующие этапы подготовка данных, включающая за грузку и предобработку изображения, выбор подходящего метода, применение выбранного методак изображению, постобработка для очистки и улучшения сег ментов оценка качества полученных результатов с помощью различных метрик анализ и интерпретация полученных сегментов Для оценки качества сегментации используются различные метрики Наиболее распространенными являются Intersection aver Union (IoU) Dice Score precision recall и Fl scare IoU определяет перекрытие между предсказанным и эталонным сегментами Dice score похожа на IoU, но более чувствительна к ма лым областям Precision, recall и Fl score используются, когда мы сегментируем изображения с несколькими классами, оценивая точность и полноту выделения каждого класса
ции их преимуществ и ограничений, а также умение применять эти методы на практике является ключевым навыком для работы с компьютерным зрением Развитие методов на основе глубокого обучения постоянно расширяет возмож ности сегментации и открывает новые области ее применения Практическое задание Задание 1 Напишите программу, которая изменяет цвет пикселей в задан нои прямоугольной области изображения на зеленый (RGB 0,255, 0), используя прямой доступ к пикселям Задание 2 Попробуйте понять, какой функционал заложен г программу За тем повторите программу на компьютере, изменяя коэффициенты Сделайте вы вод Import cv2 х-200 у-200 Ln range(400)i с у in range (4 00) if frame(x ,y, 1)>200. Задание 3 Напишите программу, которая принимает изображение и инвер тирует его цвета, используя функцию cv22>twtse_not Исследуйте изменения ви зуально и определите, какие козе Задание 4 Создайте два ра i влияют на результат тдра и объед ините их линейно с ис пользованием функции cv2-add№eighled. Исследуйте изменения коэффициентов и их влияние на прозрачность объединенного воображения Задание 5 Примените: абсолютных значении и масштаби роваиие к изображению с использованием функции cv2 comertScaieAbs Иссле дуйте изменения коэфс и яркость изображения и их влияние на контраст
ные пороговые значения и их влияние на результат бинаризации Задание 7 Создайте два различных кадра и примените арифметические one рации (сложение выч между ними с использова нием библиотеки OpenCV Исследуйте вменения коэффициентов и их влияние на результат Задание 8 Напишите программу для динамического смещения по гори зонтапи и вертикали одного или нескольких пикселей в пространстве изобра Задание 9 Напишите программу, которая загружает изображение и преоб разует его из цветного в оттенки серого с использованием функции cv2 cvtColorO Выведите два окна оригинальное и измененное изображения Задание 10 Создайте программу, которая загружает цветное изображение и преобразует его в изображение в формате HSV (оттенок, насыщенность, зяаче ние) с использованием функции cv2£vtColorO Попробуйте изменить значения каналов в этой области и проанализировать их влияние Выведите два окна ори- гинальное и измененное изображения Задание 11х На платформе микрокомпьютера с использованием двух MIPI-камер Напишите код, который использует алгоритм цветовой фильтрации Для изображения первой камеры используйте один цвет, для изображения с дру- гой камеры используйте другой цвет Напишите сравнительный отчет о работе на персональном компьютере и микрокомпьютере Задание 12 Напишите программу с применением функции билетареального фильтра и фильтра Гаусса для видеокадра с веб-камеры Исследуйте влияния ко- эффициентов фильтра на результат работы программы Задание 13 Разработайте программу, которая применяет комбинированную фильтрацию к загруженному изображению, сначала осуществляя размытие по Гауссу для уменьшения шума, затем усиливая резкость с помощью фильтрарез- кости, после чего выполняет выделение границ с использованием детектора Кэнни, позволяя пользователю регулировать параметры каждого фильтра и де тектора, и выводит на эк ; результаты после размытия и резкости, а также окончательный результат с выделенными границами Проанализируйте влияние параметров на качество выделения границ и визуальное восприятие изображения. Задание 14 Разработайте программу, которая автоматически применяет по следовательность фильтров к загруженному зашумленному изображению ис пользуя заранее заданные параметры медианный фильтр для удаления импуль сного шума, гауссовский фильтр для размытия и билатеральный фильтр для со хранения границ, выводя на экран исходное и обработанное изображение про тестируйте программу на разных типах зашумленных изображении и проведите анализ эффективности данной последовательности фильтров для автоматиче ского улучшения качества изображений, основываясь на визуальной оценке и если возможно на метриках качества тображения.
гепийи постройте график затем добавьте дальную всИЙР^бгенерируйг столбец со случайным шумом, количество значении которого соответствует первому столбцу и суммируйте соответствующие значения создав третий столбец с зашумленными данными, построив его график, далее примените к за шумленным данным фильтр скользящего среднего, подбирая ширину окна та ким образом чтобы среднеквадратичное отклонение между графиком исход ных данных и отфильтрованных данных было минимальным, построите график отфильтрованных данных и сравните все три графика, прокомментировав вли яние фильтра на залпу? ного сигнала и эффективность восстановления исход Задание 16 Создайте простое черно-белое изображение 16x16 (матрицу пикселей) в формате, поддерживаемом Excel. Примените к изображению филь тры с ядром 3*3 Гаусса и ядром резкости. Получите результирующие изобра Задание 17 Создайте простое черно-белое изображение 32x32 (матрицу пикселей) в формате, поддерживаемом Excel Примените к изображению филь- тры с ядрами 3x3, 5x5 Гаусса и ядром резкости Измените размер ядра на 5x5 Получите результирующие изображения Сделайте вывод. Задание 18 Создайте простое черно-белое изображение 32x32 (матрицу пикселей) в формате, поддерживаемом Excel Примените к изображению филь- тры с пятью ядрами 3x3, которые изучены в разделах о фильтрации Получите результирующие изображения Сделайте вывод Задание 19 С помощью функции cv2 Cannyf) представьте программный код, в котором будут комфортно отображаться границы объектов Добавьте фильтр Гаусса, а затем фильтр резкости к исходному изображению Оцените ре- зультаты Задание 20 Повторите программный код объединении двух разных, но свя- занных сюжетом, фотографий при помощи операцией томографии Задание 21 * Разработайте систему, работающую на микрокомпьютере с MIP1 камерой, которая в реальном времени отслеживает объект заданного цвета и формы, захватывая видеолотох с камеры, пршхеияя цветовую фильтрацию для выделения объекта, выполняя поиск контуров для определения формы и отеле живая положение объекта в кадре, выводя на экран координаты центра объекта и ограничивающий прямоугольник вокруг него, а также измеряя и отображая ча стогу кадров, проведите сравнительный анализ работы системы при различных условиях освещения и на различных скоростях движения объекта, определив ее ограничения и точность отслеживания Задание 22 Разработайте программу на Python с использованием OpenCV которая загружает изображение в оттенках серого, вычисляет его гистограмму и среднюю яркость а затем корректирует яркость изображения путем добавления значения или умножения на коэффициент, если сред няя яркость ниже заданного порога, отображая исходное и скоррекг краткое описание подхода к коррекции. ое изображения и предоставляя
4. ИНТЕРАКТИВНОЕ УПРАВЛЕНИЕ В КОМПЬЮТЕРНОМ ЗРЕНИИ 4.1. Общие сведения об интерактивном управлении пивное управление ключевой аспект в приложениях компьютер Хе необходим анализ и обработка изображении Оно обеспечивает , с визуальными данными выпол няя различные операции, анализ и принимая решения на основе визуальной ин формации В этом контексте библиотека OpenCV предоставляет мощный набор инструментов для создания интерактивных приложении, способных работать как со статическими изображениями, так н с видеопотоками Интерактивное управление значительно улучшает пользовательский опыт и повышает эффективность работы с изображениями Оно позволяет пользова- телю манипулировать и анализировать данные в режиме реального времени, что особенно важно в таких областях, как компьютерное зрение, медицинская диагностика, системы видеонаблюдения и многих других Основными элементами управления в приложениях компьютерного зрения, разработанных с использованием OpenCV, являются интерактивные окна, ви- джеты, слайдеры, кнопки, а также обработка событий клавиатуры и мыши Эти элементы позволяют пользователям гибко настраивать параметры алгоритмов обработки изображений, выбирать интересующие области, запускать и останав- ливать процессы анализа. Глазная особенность интерактивного управления в OpenCV заключается в его гибкости и адаптивности Пользователь может мгновенно настраивать параметры обработки, наблюдая за результатами в реальном времени Это поз- воляет оперативно оптимизировать работу алгоритмов под конкретные задачи и условия Таким образом, интерактивное управление в компьютерном зрении с ис- пользованием OpenCV это мощный инструмент для эффективного анализа и обработки изображений, обе* с визуальными данными Для реализации интерактивного управления OpenCVпредоставляет различ иые инструменты Рассмотрим основные из них Интерактивные окна и виджеты предшзначены для отображения изобра женин и вцдео на экране Кроме того, они позволяют пользователю взаимодеи сгвовать с отображаемым контентом, гапример, изменять его размер переме щать масштабировать и т д Спайдеры (ползунки) влкя ъозмажяосп, настраивать параметры обработки изображении в реальном времени, такие как яркость, контрастность пороговые значения и другие Пользователь, переменяя ползунок, может моментально ви деть эффект изменения параметров на изображении
работки изббрМсении Напр’ жет запустить процесс обрабс тром кнопки «Применить фильтр» мо ия выбранным пользователем филь Обработка событии клавиатуры и мыши дает возможность пользователю управлять приложением при йств ввода Например можно использовать стрелки для навигации по щображению или щелчок мыши для вы деления областей интереса 4.2. Интерактивные окна и виджеты Интерактивные окна и виджеты в библио теке OpenCV представляют собой графиче- ские элементы пользовательского интерфейса (рис 4 1), которые позволяют отображать изоб- ражения и видео на экране компьютера и взаи- модействовать с ними. В OpenCV для работы с интерактивными окнами и виджетами используются следующие функции cv2 imsItowO отображение изображений в окне Функция cv2.mshcw() является ключе- вой в библиотеке OpenCV для визуализации изображений Она отвечает за отображение графических данных (изображений и видеокад - ров) в окнах на экране. Это делает ее незамени- мой для просмотра результатов обработки Рисунок 41 - Элемент интерфейсе - окно изображений, отладки алгоритмов и интерактивного взаимодействия с вжуаль- ной информацией Функция принимает два обязательных параметра wtnname (строка) имя окна, в котором будет отображено изображение Если окно с таким именем еще не существует, оно будет создано Если окно с таким именем уже существует, то изображение в нем обновится Имя окна позволяет управлять окнами (например, закрывать определенные окна) Важно помнить одинаковые имена окон в программе недопустимы, поскольку последнее создан ное будет блокировать работу предшественника. mat (NumPy array) это само изображение, которое необходимо отобразить Обычно это массив NumPy, представляющий собой изображение в цветовом пространстве BGR (по умолчанию в OpenCV) или в оттенках серого Пример применения функции: cv2 namedWmdowf) управление окнами Функция о2 namedWmdaw() в библиотеке OpenCV предназначена для создания имено
ми окна по сравнению с простым: : cv2 imshaw() Использование cv2 named Windaw() позволяет задавать параметры окна, такие как его размер тбирова Функция cv2 namedWmdawQ) принимает два основных параметра winname (строка) имя окна, которое вы создаете Это имя используется для последующего отображения изображения в этом окне с помощью cv2 imshow( а также для управления свойствами этого оив. flags (целое число, опционально) параметр определяет свойства окна Он может принимать одно из следующих значений (или их комбинации) cv2 WINDOW_NORMAL(yK>y№ospwsaoy. позволяет пользователю изменять размер окна вручную, cv2 W1NDOW_AUTOS1ZE размер окна автоматически подстраивается под размер отображаемого изоС шается, । не разре cv2 WINDOW_FREERAT1O- позволяет свободно изменять соотношение сто- рон окна, cv2 WINDOW_KEEPRATIC' сохраняет соотношение сторон изображения при изменении размера окна, cv2 WINDOW_GVI-EXPANDED включает расширенный GUI для окна (по- лезно для некоторых интерактивных элементов) Пример применения функции с V2.nanedWindow(~Okпо", с »2. WtNOOW_N3R«AL) или с двумя флагами CV2 namedWlndOwC Okno",CV2 WINDOW_FREERATIO|cv2 WINOOWJ3UI_EXPANDED) cv2moveWlndowO перемещение окон Функция cv2.m<weWindoyv( в биб- лиотеке ОрепСУ позволяет программно перемещать окна с изображениями на экране Это полезно для организации интерфейса приложения, расположения не скольких окон в удобном порядке или создания сложных визуализации cv2 moveWindawQ позволяет точно указать координаты верхнего левого угла окна, обеспечивая гибкое управление их положением на экране Функция cv2 moveWmdowO принимает следующие параметры winname (строка) имя окна, которое нужно переместить Это имя должно совпадать с именем окна, которое было создано с помощью cv2 namedWindaw() или используется при cv2 imshawf) х у (целое число) координаты х (горизонтальная) и у (вертикальная) верх него левого угла окна на экране. Пример применения функции:
лиотеке является важным инструментом для создания интерактивных приложении компьютерного зрения. Она приостанавливает выполнение про траммы и ожидает нажатия клавиши пользователем, позволяя создавать прило жения которые реагируют на ввод с клавиатуры. Эта функция часто использу ется в сочетании с cv2 imshowf) для корректного отображения окон с изображе ниями и их интерактивного управления. Функция cv2 waitKeyO принимает один необязательный параметр delay (целое число, опционально) время ожидания в миллисекундах Если delay равно О пни бесконечно (пока поль зователь не нажмет какую-либо клавишу) Если delay равно положительному числу функция будет ждать указанное количество миллисеку вд Если в течение этого времени клавиша не 1 продолжится .фу1 ет 1, и выполнение программы Пример применения функции: cv2.w«itKey(0) key • c»2.waitKey(1009) cv2 SestroyAUWlndowsO закрытие окон OpenCV. Функции cv2 destrcryM- Windcws() в библиотеке OpenCV предназначены для закрытия окон, созданных с помощью cv2 namedWmdcwO или cv2 mshaw() cv2 destroyWindowQ закрытие отдельного окна Функция ci>2 destrcyWindowQ позволяет закрыть конкретное окно, заданное по его имени Это полезно, когда нужно закрыть только одно окж> из нескольких открытых Эти функции являются важной частью процесса управления ресурсами при- ложения и должны использоваться для корректного завершения работы с ок- нами, предотвращая утечку памяти и другие проблемы Функция cv2 destraylirmd<wO принимает один параметр winname (строка) имя окна, которое нужно закрыть Это имя должно совпадать с именем, исполь зованным при создании окна с помощью cv2jKmedlVindaw() или cv2 tmshow) Сводная информация всех описанных функций и их параметров представ лена в Приложении книги. Рассмотрим простой программный код, который демонстрирует работу всех четырех рассмотренных функций.
Результат работы этой программы представлен на рис 4 2 В приведенной программе производится считывание даух изображений catl jpg я cat2jpg посредством функции сч2 imreadO- После чего создаются два окна 'Oknoi' и 'Окпо2\ в которых размещаются изображения catl jpg и cat2 jpg Это реализуется с помощью функций crt.namedWindowO и с»2 tmshowf) Правый верхний угол каждого окна размещен в координатах (0,0) для окна 'Oknoi и (300,0) для 'ОЬю2', что позволяет точно позиционировать изображения в пространстве экрана Функция cv2.wan£ey(0) бесконечно ожидает нажатие лю- бой кнопки клавиатуры, прежде чем завершит программу и закроет окна 4.3. Слайдеры Слайдеры в программировании представляют собой элементы интерфейса, которые позволяют пользователю выбирать значения из определенного диапа зона, перемещая ползунок (рис 4 3). В OpenCV слайдеры часто используются для настройки параметров обработка тображвний в реальном времени что поз воляет пользователям мгновенно видеть изменения и подбирать оптимальные значения
Функция принимает следующие параметры: trackbarmme (строка), имя спайдера. Это имя используется для идентифи кации слайдера и программе, winname (строка) имя окна, в котором будет размещен слайдер Это имя । с помощью cv2 namedWmdowO или должно совпадать с именем окна, cv2 imshawO, value (целое число) иачальн новлено при создании слаадера, count (целое число) максим: дера Это значение будет усга дера Минимальное значе ние всегда равно 0 Диапазон значений слайдера будет от 0 до court, onChange (функция): функция обратного вызова, которая будет вызываться каждый раз, когда пользователь изменяет положение слайдера Эта функция должна принимать один параметр текущее положен» слайдера, onChange(value) здесь value - это текущее значение слайдера cv2 getTrackbarPosf) получение текущего положения слайдера Функция позволяет получить текущее положение ползунка слайдера, созданного с помо- щью cv2 createTrackbarO Эта функция необходима для доступа к значению слайдера в любой части программы, что позволяет использовать его для динами- ческого управления параметрами обработки изображений Функция cv2.getTrackbarPosO принимает следующие параметры trackbamame (строка)" имя слайдера, значение которого нужно полу- чить Это имя должно совладать с именем слайдера, созданного с помощью cv2 createTrackbarO, winname (строка) имя окна в котором расположен слайдер Это имя должно совпадать с именем окна указанным при создании слайдера с помощью cv2 createTrackbarO Функция cv2getTrackbarPos() возвращает целое число, представляющее текущее положение ползунка слайдера. Это число находится в диапазоне от О до максимального значения, заданного при создании слайдера (count в cv2 createTrackbarO) Ниже представлен простой пример программы применения слайдера В этом примере создается окно с названием "Окно Slider1' и слайдер с назва нием "Slider", который может принимать ззвчеиия от 0 до 100 При изменении положения слайдера вызывается функция update_coeff, которая выводит текущее значение коэффициента (coefficient) в терминал
Результат выполнения данной программы представлен на рис 4 4 Рисунок 4 4 - Результат работы программы функционирования слайдера Ках видно на рисунке. перемещение ползунка слайдера влево или вправо, его текущее положения будет выводиться в терминал Данный коэффициент мо- жет быть использован в дальнейшем для изменения яркости изображения, пере- мещения каких-либо графических объектов в окне и настройки других парамет- ров программы Более детальная информация рассмотренных функций для работы с элемен том слайдер cv2 createTrackbarf) и cv2.getTrackb>arPosO представлена в Прило 4.4. События мыши События мыши играют важную роль в создании интерактивных приложе нии в том числе и в области компьютерного зрения с использованием библио чеки OpenCV Эти события лек 1ать с программой и управ События мыши дают воэмс । взаимодействовать с изоб ражением или объектами на экране. К событиям мыши относятся клики мышью перемещения и нажатия/отжатия кнопки мыши. События мыши могут быть
управления'курсором и других действий; Например, события мыши часто ис пользуются для выбора точек иг изображении, обозначения объектов или конгу ров а также для создания интерактивных элементов пользовательского интер феиса В общем события мыши, как и i ляют создавать более удобные и инп гуры (cv2 waaKey(O)) позво ложения, которые лучше со ответствуют потребностям пользователей. В контексте компьютерного зрения они помогают пользователю легко взаимодействовать с изображениями про сматривать результаты обработки и принимать решения на основе визуальной информации В OpenCV для обработки событий мыши используются функция cv2 setMouseCailbaekO Подробная структура данной функции рассмотрена в Приложении к книге Эта функция устанавливает функцию обратного вызова для обработки со бьгтий мыши в указанном окне Она принимает имя окна и функцию обратного вызовав качестве параметров Функция обратного вызова получает информацию о событии мыши, такую как тип события (например, нажатие кнопки или пере- мещение мыши), координаты точки нажатия и т д Функция обратного вызова должна быть определена пользователем и принимать определенные аргументы в зависимости от типа события Рассмотрим пример применения функции cv2.setMouseCallback() в про- грамме Эта программа позволяет отслеживать и выводить в терминал информа- цию о событиях мыши в окне с изображением, например, нажатия кнопок мыши или перемещения курсора. import cv2 cv2 EVMT_I,BtJTTOHt>OWH: cv2. EVEHT_RBU1TO»CMV el if event — cv2 EVEHT_MOVS£MOV£: В протрамме функция onAfouse является функцией обратного вызова, кого рая будет вызываться при каждом событии мыши в окне с изображением Она
2 которой ЯрМЙбшло cot тьные флаги и параметры В этой программе функция onMcuse используется для отслеживания следу ющих событии мыши cv2 EVENT_LBUTTONDOIVN пажатш левой кнопки мыши При возник новении этого события программа выводит сообщение о координатах точки в которой произошло нажатие левой кнопки мыши, cv2 EVENT_RB UTTONDOWN нажатие правой кнопки мыши При воз никновении этого события программа выводит сообщение о координатах точки в которой произошло нажатие правой кнопки мыши. cv2 EVENT_MOUSEMOVE ыши При кавдом перемеще нии мыши программа выводит сообщение о текущих координатах курсора Стоит заметить, кроме: поддерживает следу ющие события мыши отпущена левая кнопка мыши, опущена правая кнопка мыши, нажата и отпущена средняя кнопка мыши (если она есть), прокрутка ко леса мыши вперед и назад, горизонтальная прокрутка колеса мыши (если под- держивается), нажата клавиша Shift, нажата клавиша Ctrl, нажата клавиша Alt Полный синтаксис этих событий представлен в Приложении данной книги После определения функции обратного вызова onMouse, программа создает окно с именем "Image" с помощью cv2jiamed№'inciow0, а затем устанавливает эту функцию обратного вызова для обработки событий мыши с помощью cv2 setMouseCallback(). Наконец, программа ожидает нажатия клавиши, чтобы завершить свою ра- боту с помощью cV2 waitKey(0), и после завершения закрывает все окна с помо- щью cv2 destrcyMWmdcwsi). Практическое задание Задание 1 Создайте окно с помощью cv2.namedWindow() и загрузите любое изображение Отобразите изображение в окне с помощью cv2 imshowO Исполь зуйте cv2 setMouseCallbackQ для установки функции обратного вызова, которая будет выводить в терминал координаты курсора мыши при нажатии левой кнопки мыши Убедитесь, что окно отображается корректно с помощью cv2 waitKey(0) He забудьте корректно з; Задание 2 Создайте шесть оком с зльзуя функ цизо cv2 moveWuidowQ, разместите их упорядоченно по экрану например в виде сетки или в ряд. Отобразите в каждом окне произвольное изображение (можно использовать одно и то же тображение или разные) Не забудьте кор ректно закрыть окна Задание 3 Создайте окно с шображеншм и начальным расположением в координатах (0 0) Организуйте автоматическое изреметцение окна по экрану в цикле в любом направлении (например, по диагонали или по прямоугольнику) Для перемещения используйте функцию cv2jnoveWmdow() Обеспечьте плав
Задание 4 Создайте окно с помощью cv2_namedWindow() и загрузите изоб ражение Создайте три слайдера с помощью cv2 createTrackbarO для регулировки яркости контрастности и, например, порогового значения изображения Исполь зуите функцию обратного въвова для динамического изменения параметров изображения на основе положений спайдеров Выводите значения слайдеров в терминал в удобном формате, а также отображайте вмененное изображение Не забудьте корректно закрыть окна. Задание 5 Создайте окно с помощью ст2 namedWindowQ и загрузите или создайте пустое изображение. Используйте ст2 setMouseCalibackQ для реализа ции интерактивного рисования на изображении при нажатии и удержании левой кнопки мыши рисуйте линию, соединяя последовательные положения мыши а при нажатии правой кнопки мыши очиняйте изображение Для рисования ис пользуйте функцию cv2 lineQ Обеспечьте плавное отображение, используйте cv2 waitKey(l), и не забудьте корректно закрыть окна. Задание б Создайте окно с помощью cv2.namedWindow() и загрузите изоб- ражение Реализуйте интерактивное выделение прямоугольной области на изоб- ражении при нажатии левой кнопки мыши запоминайте начальную точку, при перемещении мыши с зажатой левой кнопкой отрисовывайте прямоугольник, апри отпускании левой кнопки мыши выделяйте и отображайте выделенную об- ласть в новом окне Используйте cv2 setMouseCallbackQ для отслеживания собы- тий мыши и cv2 rectanglef) для рисования прямоугольника Для отображения вы- деленной области используйте cv2 unshowf) в новом окне Обеспечьте плавное обновление прямоугольника во время рисования, используйте cv2 waitKey(l), и не забудьте корректно закрыть все окна Задание 7 Создайте окно с помощью cv2 namedWmdowQ и загрузите лю- бое изображение Реализуйте возможность переключения между различными цветовыми пространствами (например, RGB, Grayscale, HSV) по нажатию кла- виш При нажатии клавиши ‘г’ отобразите исходное RGB изображение, при нажатии ‘g ’ сероеизображение, при нажатии * h’ изображение в HSV Исполь зуйте функции cv2 cvtColorQ для преобразования цветового пространства и cv2 imshowQ для отображения Обеспечьте корректное отображение, исполь зуите cv2 waitKey(l) и корректное закрытие окон Задание 8 Создайте два окна с помощью cv2 namedWindowQ Затру зите одно и то же изображение в оба окна. В одном окне реализуйте размы тие Гаусса (Gaussian blur) с: функции cv2 GaussianBlutQ Изначально радиус размытия должен быть небольшим (например, 5x5) Добавьте слайдер cv2 createTrackbarO Для изменения размера ядра размытия В другом окне отоб ражаите оригинальное изобр значения слайдера пересчи тываите размытие и отображайте результат Используйте cv2 waitKey(l) для плавного обновления и не забудьте 1
5. ГРАФИЧЕСКИЕ OTP И СОВКИ В КОМПЬЮТЕРНОМ ЗРЕНИИ 5.1. Графические отрисовки В этом разделе мы рассмотрим применение инструментов для графической отрисовки в Python, используя функциотльность библиотеки OpenCV Эти ин струм енты значительно расширяют возможности программ компьютерного зре ния делая их более t и информативными. Графические отри совки представляют собой мощный способ создания изображении и визуализа ции данных, что, в свою очередь, повышает доступность и понятность инфор мации Мы изучим различные функции OpenCVдля рисования базовых геометри ческих фигур, таких как линии, круги и прямоугольники, а также методы добав- ления текста к изображениям Библиотека позволяет гибко настраивать внешний вид отрисовок, изменяя цвета и толщину линий, что придает изображениям выразительность и позволяет выделить важные детали Возможность добавления текстовых меток, атакже других графических эле- ментов, предоставляемых OpenCV, дает нам удобный инструментарий для созда- ния информативных и наглядных визуализаций Такой подход упрощает работу с изображениями в программном коде и обеспечивает ясное представление данных Для демонстрации практического применения графических отрисовок, да- вайтерассмотримпримерстелеметриейнабортусамолета(рис 5 1) Вэтомкон- тексте графические визуализации играют ключевую роль в анализе и представ- лении данных о состоянии воздушного судна. Графические отрисовки могут быть реализованы в виде интерактивных ин- дикаторов, диаграмм и графиков, отображающих различные параметры полета. Например, линейные трафики позволяют отслеживать изменения высоты или скорости во: муг показывать распределение рас хода топлива между двигателями, а цветовые карты визуализировать данные о температуре или давлении в j Добавление текстовых меток к графикам обеспечивает дополнительную ин формацию, например, конкретные 1 I или значения параметров Тах меткана трафике может указывать на момент взлета или посадки делая ана лиз данных более точным и удобным В контексте распознавания образов и классификации, графические отри совки играют столь же важную роль, как и в задачах телеметрии Представьте систему компьютерного зрения, анализирующую видеопоток с камеры наблюде ния для идентификации людей и их действий.
Рисунок 5 1- Графические отрисовки данных телеметрии в самолете Без графической отрисовки мы бы имели дело лишь с наборами числовых данных, таких как координаты обнаруженных лиц и их предполагаемые дей- ствия Одаако для визуального контроля и интерпретации этих результатов гра- фическая отрисовка становится необходимостью Вокруг распознанных людей, автомобилей, зданий и других объектов рисуются прямоугольные рамки, позво- ляющие быстро определить, хого/что и где обнаружила система (рис 5 2)
век» «вдейй&й «стоит», конкретизирую перемещении объекта по кадру, рамка и : ются наглядно демонстрируя отслеживал сам объектов или действий можно назначи ип объекта и его действие При также динамически перемеща ижения системой Разным клас личные цвета рамок и меток для ческие отрисовки помогают i ^телеметрии самолета они не понятный способ интерпретации и отпадай результатов работы алгоритмов ком пьютерного зрения Без этой визуалт : эффективность и корректность рас познавания и классификации оставались бы непрозрачными и тру дао оцеиивае мыми Наиболее частыми :ских отрисовок явля ются создание элементов интерфейса, таких как кнопки, текстовые поля и иконки, которые пользователь видит ж экране, для чего применяется отрисовка геометрических фигур Визуализация данных с использованием геометрических фигур позволяет создавать различные графики, диаграммы и схемы, что делает процесс анализа данных более наглядным При создании анимаций, отрисовка геометрических форм используется для создания движущихся объектов, измене- ний форм и других визуальных эффектов В компьютерных играх отрисовка гео- метрических фигур применяется для отображения персонажей, объектов окру- жения и спецэффектов Графическая отрисовка также важна в охранных систе- мах, автомобильном, железнодорожном и других видах транспорта, где исполь- зуются системы, основанные на искусственном интеллекте Стоит отметить, что увеличение количества графической отрисовки на изображениях, как правило, требует больше аппаратных ресурсов Особенно это критично при работе в ре- жиме реального времени Даже увеличение толщины отрисованной линии ведет к изменению большего количества пикселей, что увеличивает нагрузку на про- цессор Все эти факторы необходимо учитывать на этале разработки программ- ного обеспечения для конкретной аппаратной платформы 5.2. Отрисовка геометрических фигур Отрисовка геометрических фигур представляет собой процесс создания изображений различных геометрических форм, таких как пинии, круги, прямо угольники, треугольники и другие. Этот процесс часто используется в компью терном зрении для визуализации объектов и данных Отрисовка ге оме с частью визуализации ин формации Она позволяет наглядно представпять различные объекты и струк туры данных на экране Это необходимо для создания пользовательских интер феисов визуализации данных, анимации и других компьютерных приложении Принцип отрисс 1ван на использовании гра фических примитивов, таких как точки, линии и плоские формы Система коор динат используется для определения положения и размеров этих геометрических 160
сновные функции библиотеки OpenCV которые исполь ых геометрических фигур Мы будем рассматривать это бъекгов в кадре, полученном с веб камеры Процедура stcx пипп. тем, что мы считываем 52 1 Отрисовка линий Функция ОрепСУ, которая используется .для отрисовки линии, называется cv2 line() Давайте рассмотрим ее структуру, аргументы и их значения где img изображение, на котором будет производиться отрисовка линии, ptl хоардрнлты первой точки (ауХ pt2 координаты второй точки (х, у), color - цвет линии в формате BGR (синий, зеленый, красный) Например, (255, 0, 0) Тфедсгазляет собой синий цвет, thickness толщина линии Если значение отрицательное (например, 1), то линия будет закрашена, linetype тип линии Эго параметр, который определяет форму концов ли- нии По умолчанию используется cv2 LINE_8. Другие возможные значения включают cv2 LINB_4 и cv2.UNE_AA (антиалиасинг), shift количество битовых сдвигов при вычислении координат Обычно устанавливается в 0 Ниже приведен пример программы с использования cv2.lineQ для отрисовки линии на видеокадре, полученном с веб-камеры
В данной программе, производится захват ввдеопотока с камеры компью тера. На каждом кадре рисуются две линии с помощью функции cv2 line Первая линия идет от точки м координатой (50; 50) до точки с координатой (200 200) и имеет зеленый цвет (0, 255, 0) Вторая пиния идет от точки с координа тон (60, 300) до точки (260, 350) и имеет красный цвет (0, 0, 255) В первом слу чае все значения переменных функции cv22me0 выведены в отдельные строки во втором случае все коэффициенты фупкцяиуказаиы явно Результат вьшолне ния такой программы пр едставп ен на рис. 5 3 522 Отрисовкапрямоугольника Функция библиотеки OpenCV, которая позволяет отрисовать прямоуголь ник с любыми геометрическими и цветовыми значениями, называется о2 rectangleQ Рассмотрим ее структуру, аргументы и их значения где mg - изображение, на котором будет производиться отрисовка прямоуголь ptl — координаты верхнего левого угла прямоугольника (х у) 162
толщина гранил Если значение отрицатель ное прямоугольник будет закрашен; lineType тип линии границы. По умолчанию используется cv2 LIME_8 Другие возможные значения включают cv2 LINE_4 и cv2 LINE _АА (антиали асинг) shift количество битовых сдвигов при вычислении координат Обычно устанавливается в 0 Пример использования функции cv2 rectar^fef) в программном коде для отрисовки прямоугопьникапредставлеп ниже ptl - (150, 200) pt2 - (300, 350) cv2 rectangle(frame,(300, 400), (400, 450), (0, 0, 255), 12) Здесь на каждом кадре рисуется зеленый прямоугольник с верхним левым углом в точке с координатой (150; 200) и нижним правым углом в точке с коор динатои(300 350) Тс углом 2 точке (300, 400) и ни линии этого прямоугольника' [оутольника установлена г 2 пикселя асный прямоугольник с верхним левым гым утлом в точке (400, 450) Толщина говпеиав 12 пикселя Результат выполнения такой программы гуиведен на рис 5 4 Отметим что если применить отрицательную величина толщины линии (thickness) то произойдет заливка площади прямоугольника указанным цветом Причем модуль этого значения не играет роли
Рисунок 5 4 - Результат работы программы отрисовки прямоугольника 5.23. Отрисовка кругов иэмипсов Для отрисозки кругов и эллипсов с различными геометрическими и цвето- выми параметрами в библиотеке ОрепСУ применяют функции cv2circle() и cvi ellipse/) соответственно Рассмотрим каждую из них- где mg изображение, на котором будет производиться отрисовка круга, center координаты центра круга (с,у), radius радиус крута, color цвет круга в формате BGR (синий, зеленый, красный), thickness толщина границы круга. Если значение отрицательное, круг бу- дет закрашен, linetype тип линии границы. По умолчанию используется cv2 LINE_8 Другие возможные знач асинг) cv2.LINE_4 я cv2 LINE_АА (антиали shift количество битовых сдвигов при вычислении координат Обычно устанавливается в О где mg изображение, некотором будет производиться отрисовка эллипса, center коорд инаты центра эллипса (х, у), axes длины полуосей эллипса (major axis, tmnor_axis),
color цвет эллипса в формате BGR, thickness толщина границы эллипса. Если значение отрицательное эллипс будет закрашен linetype тип линии границы. По умолчанию используется cv2 LINE_8 shift количество битовых сдвигов ври вычислении координат Обычно устанавливается в О Пример применения функций cv2 circief), cv2ellipse0 а программном коде для отрисовки круга и эллипса представлен ниже (150, 150) 100 :о, 0, 255) center - (300, 350) axes - (200, 50) 360 , 255, 0) Здесь на каждом кадре рисуется красный круг с центром в точке (150 150) радиусом 100 пикселей и толщиной линии 2пикселя Также на каждом кадре отрисовывается зеленый эллипс с центром в точке (300 350) полуосями (длина, ширина) равными (200, 50) углом поворота 30° начальным углом 0° и конечным углом 360°, толщиной линии 2 пикселя
Результат выполнения программы приведен на рис 5 5 Рисунок 5 5- Результат работы программы отрисовки круге и эллипсе 52.4. Отрисовка полигональных фигур Полигональная фигура это геометрическая фигура, ограниченная конеч- ным числом прямых отрезков, называемых сторонами Полигональные фигуры могут иметь различные формы, включая треугольники, квадраты, многоуголь- ники и другие В библиотеке OpenCV для отрисовки полигональных фигур используется функция cv2 polylines)) Это важная функция, которая позволяет воссоздать практически любую геометрическую фигуру, включая имитацию трехмерной и в какой то степени округлую сложную фигуры. Рассмотрим ее структуру, аргу где img изображение, на котором будет производиться отрисовка полигона, pts список точек, задающих вершины полигона. Это трехмерный массив N х 1 х 2 гдеИ количество вершин; isClosed флаг, указывающий, замкнут ли полигон Если True то полигон замкнутый (первая и последняя вершины соединены линией), color цвет линии полигонав формате BGR, thickness толщина линии полигона. Если значение отрицательное полигон будет закрашен
shift количество битовых сдвигов при вычислении координат Обычно устанавливается в О Пример применения функций cv2pofylmes() в программном коде для отри совки многоугольника представлен ниже. Здесь создается массив pts, представляющий вершины полигона В данном случае это пятиугольник с координатами вершин На каждом кадре рисуется зеленый пэлигон с использованием функции cv2polylines!) Передается массив вершин pts, зеленый цвет (0, 255, 0), флаг isClosed указывает, что полигон замкнут (последняя вершина соединяется с пер вон), и толщина пинии установлена в 2 пикселя. Результат выпот । программы представлен на рис 5 6 Особенностью данной программы является активное применение библио теки NumPy, которая используется для работы с многомерными массивами включая массивы пикселей изображений. В отерного зрения изображения предсгавляютсяименно в виде таких массивов, где каждый элемент содержит информацию о цвете пикселя ОрепСР тесно взаимодействует с NumPy позволяя эфф( и модифицировать эти массивы например для отрисовки графических элементов, как это показано в примере с полигоном Использование NianPy обеспечивает высокую производительность при работе с изображениями, так как позв, вами данных быстро и эффективно ' выполнять операции над масси
Рисунок 5 6 - Результат работы программы отрисовки многоугольника Кстати, если параметр ^Closed в программе будет иметь значения False (то есть кривая не замкнута и не образует многоугольник), то получится кривая Кривые Безье представляют собой математические кривые, описываемые параметрическим уравнением. Они используют управляющие точки для опреде- ления формы кривой Кривые Безье широко применяются в компьютерной гра- фике и дизайне, где они используются для создания гладких и красивых криво- линейных форм Они обладают свойствами гладкости, контролируемости и лег- кости анимации 52.5 Создание холста Холст в программировании графики представляет собой пространство, на котором можно рисовать изображения или выполнять другие графические one рации Это своего рода «пустая картина», которую вы можете заполнить цве тами формами и другими элементами. Холсты используются для создания визуальных представлений данных Например, построение графиков, диаграмм или изображений Визуальные приложения, такие как редакторы изображении видеоигры и программы компьютерной графики, используют холсты для взаимодействия с графическими элементами В данной части мы познакомимся с функцией прzerosf) библиотеки NumPy которая поможет нам создать пустое изображения для нанесения на него различ ных отрисовок Ф zeros( это функция библиотеки НитРу, тредназначенная для создания массива элементы которого: и аргументы этой функции нулями Рассмотрим структуру
из ЗЬ4 — где shape это кортеж, оп мерного массива (5) для да еры массива Например для одно , (3,4), и так далее dtype (необязательный) опциональный аргумент, указывающий тип дан ных элементов массива По умолчанию используется float Может принимать значения такие как М,float, грмМ8, и другие, order (необязательный) опциональный аргумент, который определяет по рядок размещения элементов в памяти Может быть 'С (по умолчанию) для по рядка С style (по строкам) или ‘Р* для гюря/огл Fortran-style (по столбцам) Рассмотрим несколько строк пример создания массивов с помощью этой , dtype-np ulne8) Здесь shape определяет размер и форму массива Параметр dtype определяет тип данных элементов массива Напржлер, прмт18 используется для 8-битовых беззнаковых целых чисел, что может быть полезно, например, при работе с изоб- ражениями, где значения цветов обычно варьируются от 0 до 255 order обычно не требует явного указания Однако, при работе с большими массивами, порядок размещения в памяти может влиять на производите льнэсть операций Если рассматривать изображение с точки зрения математики, то оно представ- ляет собой матрицу пикселей Функция rpaeresO может быть применена для иници ализации «пустого» холста Напрмаер, вызов прзегое((500, 500, 3), dtype=np usnt8) создаст трехмерный массив размером 500x500, представляющий RGB изображе ние, где каждый пиксель инициализирован нулевыми значениями Этот подход позволяет заранее определи! нить цветами, создавая или < Кения, которую затем можно запол еские данные Рассмотрим пример программы, в которой создается пустая матрица пиксе леи на которую нанесем различные геометрические фигуры
В этой программе предусмотрено- • создание черного изображения размером 5 00* 500 пикселей, • отрисовка синей линии с начальными координатами (20, 30) и конеч- ными координатами (250,200) на черном изображении; • отрисовкакрасного крута с центром в(150,100)ирадиусом 50пикселей, • отрисовка зеленого прямоугольника с верхним левым углом (120, 180) и нижним правым углом (400,480) и толщиной линии 6 пикселей, • отрисовка желтого прямоугольника с верхним левым углом (300, 300) и нижним правым утлом (350, 350) и толщиной линии 40 пикселей Обратите внимание, что если убрать решетку перед строкой image = = пр ones((500, 500,3), Луре=прм1гп8) ‘ 255, то программа создаст белый холст размером 500x500 пикселей, представленный в виде матрицы единиц Ис- пользуется диапазон значений яркости от 0 до 25 5, где 0 соответствует черному, а 255 белому цвету Умножение на 255 обеспечивает, что все пиксели холста будут максимальной яркости, создавая белый фон для последующего рисования графических элементов Результат такой программы показан марж 5 7 Рисунок 5 7 - Резуль
np zeros (buu, 500, 3) замену вместо 3 устало 5.3. Позиционирование геометрических фигур Позиционирование геометрических фигур в компьютерном зрении это важный аспект обработки изображений и анализа .д анных Изменение положения геометрических фигур на изображениях часто используется для выявления объектов отслеживания движения, а также для создания различных визуальных эффектов При перемещении геометрических фигур по изображению, каждая фигура представляется набором пикселей, имеющих определенные координаты (х, у) Процесс перемещения фигур осуществляется путем изменения координат х и у этих пикселей в соответствии с; i иля смещением Рассмотрим пример с квадратом (рис. 5 8), который описывается функцией cv2 rectangle(frame,(20,40),(70/Х>),(0Л5/))^) Порядковый номер колонки пикселей Например чтобы переместить квадрат на изображении вправо на 100 пик селен необходимо увеличить значение х координаты каждого пикселя квадрата на 100 (рис 5 9) Аналогично для перемещения влево на 100 пикселей нужно уменьшить зна чение х координаты на 100 При вертикальном перемещении квадрата вверх координаты соответствующим образом
временно Рисунок S 9 - Перемещение квадрата на 100 пикселей вправо После завершения перемещения пикселей, обновленное изображение с пе- ремещенной фигурой можно отобразить на экрана или сохранить для дальней- шего использования Таким образом, перемещение геометрических фигур на матрице изображе- ния осуществляется путем изменения их координатных значений х и у, что поз- воляет достичь различных визуальных эффектов и обработать изображения в со- ответствии с требованиями конкретной задачи Ниже представлена программа, реализующая автоматическое перемещение квадрата в области кадра.
Данная программа на каждом кадре видеопотока рисует зеленый квадрат размером 50*50 пикселей, который начинается с координат (х,у) и с каждой иге рацией смещается вправо и вниз на 2 пикселя Таким образом, зная закон пере мещеиия квадрата, мы можем программно перемещать его, следуя закону по мат- рице пикселей 5.4. Динамическая отрисовка прямоугольной области Динамическая отрисовка прямоугольной области подразумевает создание и обновление прямоугольной области на изображении в реальном времени в ответ на действия пользователя или изменения внешних условий Например, с помощью функции обратного вызова мыши в программе можно динамически отрисовывать прямоугольник на изображении при перемещении или нажатии кнопки мыши пользователем Это позволяет пользователям выделять области интереса на изображении и взаимодействовать с ними в реальном времени В данном разделе мы рассмотрим огрисовку прямоугольной области на видео- кадре Как вы уже поняли, отрисовка геометрических фигур на видеокадре имеет свои особенности по сравнению с работой со статическими изображениями Каждый кадр видео постоянно м еняется, поэтому любые графические элементы такие как линии, прямоугольники или окружности, должны перерисовываться на каждом кадре Важно обеспечить эффективность отрисовки, чтобы не замедлять производительность программы, особенно если видео содержит большое коли чество кадров в секунду Координаты фигур могут быть заданы относительно размеров кадра, что может потребовать преобразования координат, если разре । фигуры должны быть частично шеиие видео отличается отр прозрачными важно обеспечить их правильное отображение на фоне видео кадра При взаимодействии с видео, например, при рисовании фигур по щелчку мыши необходимо корректно и синхронизировать их с кадрами видео При отрисовке фигур нужно обеспечить плавность анимации чтобы объекты выглядели естественно, особенно если они двигаются на видео
важно учитывать эти особенности, чтобы обеспечить корректное отображение и взаимодействие графических элементов с видеокадрами Ниже приведен пример отрисовки прямоуголыюй области, которая в даль неишем может служить в качестве области интересов в программе отслеживания объектов Данная протрамма использует библиотеку OpenCVдля захвата видеопотока с веб камеры и отображения его в окж Она также позволяет пользователю ри совать прямоугольник на кадре, используя события мыши нажатие левой кнопки мыши начинает рисование, а ее отпускание завершает процесс Прямо угольник отображается на кадре, пока пользователь его рисует, после чего он сохраняется на кадре до следующего изменения или завершения программы В протрамме xi,yi -координаты начальной точки прямоугольника, х2, yl -координаты конечной точки прямоугольника. drawing - флаг, указывающий начало и конец процесса рисования global XI, yl,
В программе функция drawjectangle служит как обработчик событии мыши для рисования прямоугольника на изображении При нажатии левой кнопки мыши (cv2 EVBNT_LBimONDOWU) функция запоминает начальные • drawing в True Этим координаты х иу для прям оугольника и; флагом фиксируется начало процесса отртюовки При движении мыши (cv2 EVENT_MOUSEMOVE) и при активном режиме рисования (drawing = = True), функция обновляет координаты конца прямоугольника х2 и у2 Когда кнопка мыши отпускается (cv2.EVENT_LBUTTONUP), функция записывает ко вечные координаты прямоугольника х2 и у2 н устанавливает флаг drawing в False, завершая процесс рисования. Если флаг drawing установлен, осуществляется отрисовка прямоугольной области cv2 rectanglefframe, (xl,yl), fc2,y2) (О 255,100), 2) На рисунке 5 ] 0 представлено изображение, поясняющее описанный выше Этот пример алгоритма позволяет пользователю в реальном времени выби рать и выделять интересующие его объекты на тображении Пользователь мо жет легко определить область интереса, которая будет подвергнута анализу или отслеживанию что обеспечивает бс эе определение объектов
вать трекер1Эйй«&и как, например, MedianFlow или CSRT (рассмотрены в раз деле 6) чтобы отслеживать объект в последующих кадрах, что облегчает авто матизацию процесса отслеживания 5.5. Добавление текста к изображению рисовка текста в компьютерном зрении с использованием библиотеки 7может быть полезной в различных сценариях, таких как добавление ан 1 к изображениям, создание визуальных элементов в видеопотоке марки бьектов на изображении и другие приложения Это может быть полезным тях компьютерного зрения, где важна предоставить дополнительную ин формацию или пометки для анализа изображений В библиотеке OpenCV для отображения текста используется функция cv2 putTextQ Рассмотрим ее структуру, параметры и их значения где j»jg изображение, на котором будет производиться отрисовка текста, text строка с текстом, который вы х отите отобразить, org координаты начальной точки текста (левый верхний угол) в форма- те (х, у), fontFace шрифт текста. Напржиер cv2.FONT_HEPSHEY_SIMPLEX, fontScale масштаб текста, color цвет текста в формате BGR thickness толщина линии (если отрицательная, текст будет отображен с за- крашенным фоном), linetype тип линии По умолчанию используется c^2.LINE_AA, batLefiOr флаг, который указывает, что начальная точка текста левый нижний угол (если True) Пример применения функции cv2putText() представлен ниже
В этой протрамме создается текстовая строка, содержащая фразу Привет МИР1 и определяются параметры для ее отображения на кадре координаты начала текста (100, 100), выбор шрифта (cv2 FONT HERSHEY COMPLEX) масштаб (1), цвет (0, 255, 0) и толщина линии текста (2) Затем эта текстовая строка добавляется на текущий кадр ввдеопотока с помощью функции cv2putTextf), что позволяет визуально шложгпъ текст на изображение перед его отображением Результат выполнения такой программы гриведен на рис 5 И В данном разделе были рассмотрены фундаментальные методы графиче скои отрисовки с использованием библиотеки OpenCV Полученные навыки создание геометрических фигур, добавление текста и визуализация данных представляют собой ентарий для эффективной работы с результатами обработки изображений. Эти приемы позволяют визуализировать ключевые параметры и результаты, повышая наглядность и понимание анализи руемых данных В последующих разделах этиметоды графической отрисовки будут активно использоваться при разработке и реалтации алгоритмов связанных с обра
которые будут опираться на освоенные в данном разделе принципы отрисовки Например для анализа движения необходимо будет не только отображать объ екгы на изображении, ио и отслеживать их гвменения в последующих кадрах а также визуализировать траектории движения Дальнейшее изучение будет со средоточено на алгоритмах и методах, необходимых для эффективного и точного отслеживания и анализа движущихся элементов, интегрируя навыки трафиче скои отрисовки для визуализации результатов Практическое задание Задание 1 Создайте изображен» с несколькими труппами фигур разных форм ицветов Используйтеcv2.circleQ, cv2.rectangle() исч2 putTextQ для созда- ния эффектного мультиструппнроваиного изображения Задание 2 Используйте cv2jectangle0, cv2 circle!) я cv2 polylines!) для со- здания геометрического узора на черном фоне Экспериментируйте с пара- метрами, такими как цвет, толщина линии и радиус, чтобы создать интересный узор Задание 3 Используйте cv2 ellipse!). cv2 circled hcv2 polylines!) для созда- ния изображения с радужным эффектом Например, создайте изображение с цветными эллипсами, окружающими центральный круг Задание 4 Создайте изображение с цветовым градиентом, используя cv21me(), cv2 rectangle!) и cv2 circle!) Экспериментируйте с различными цве- тами и направлениями, чтобы создать гладкий переход между цветами Задание 5 Используйте cv2 ellipse!), cv2 putTextf) hcv2 circle!) для создания изображения, некотором текст окружает эллипс Экспериментируйте с парамет- рами, чтобы достичь эстетически гфиятиого распределения Задание б Используйте cv2 polylines!) для создания сложной области инте- реса (многоугольник) Преобразуйте изображение внутри в оттенки серого Задание 7 Используя одну из функций для создания геометрической фи гуры создайте программу автоматического перемещения фигуры по экрану по какому то углу (не по вертикали и горизонтали). При этом, доходя до границы окна фигура должна начать перемещение в другую сторону Задание 8 Используйте cv2 polylmesQ, cv2.putTextQ и cv2 rectangle!) для co здания изображения с несколькими полилиниями, каждая из которых содержит текст Попробуйте разные стили и расположения текста. Задание 9 Используя cv2.putTextt)H cv2.iectangle(), напишите программу и повторите формат текста, который представлен на рис 5 12 Подумайте каким образом можно создать тень от текста. пользованием MJPI камеры этера с нс
Задание 11" Реализуйте на платформе микрокомпьютера алгоритм слеже ния за перемещением красного объекта. Объект необходимо «заключить» в зе левую квадратную рамку
б; О&РАБОТКА ДВИЖУЩИХСЯ ОБЪЕКТОВ 6.1. Основы обработки движущихся объектов Обработка движущихся объектов является важной частью компьютерного зрения предоставляя машинам возможность автоматически обнаруживать и от слеживатъ движущиеся объекты нагвображешых и звдеопотоках Этот процесс находит широкое применение в реальном мире, включая области видеонаблюде ния автоматизации и робототехники. Важность обработки движущихся объектов проявляется в способности си стемы следить за динамикой сцен, что делает ее эффективной в решении различ иых задач Обнаружение движущихся объектов фокусируется на выявлении их присутствия на изображении, в то время как отслеживание позволяет системе отслеживать перемещение объекта в пространстве со временем Эти даа про цесса в сочетании позволяют системам реагировать на изменения в реальном времени Рассмотрим несколько примеров использования обработки движущихся объектов Допустим, у нас есть торговый центр с камерами наблюдения Обра- ботка движущихся объектов может автоматически выявлять подозрительное движение или оставленные предметы, предупреждая службу безопасности и обеспечивая безопасность посетителей Методы обработки движущихся объектов широко применяются в управле- нии беспилотными летательными аппаратами (БИЛА) Здесь алгоритмы обра- ботки движущихся объектов могут использоваться для наблюдения и отслежи- вания других воздушных судов, препятствий или целей на земле Это позволяет автономным дронам избегать столкновений и выполнять полетные миссии без- опасно Именно благодаря способности дроиэв к анализу движущихся объектов, некоторые функции этих машин делают их автономными В автомобильной отрасли системы компьютерного зрения помогают води телям и автопилотам распознавать л отслеживать другие транспортные средства, пешеходов, сигналы дорожного движения и опасные ситуации на дороге Это может быть особенно полезно для систем помощи водителю, таких как системы предупреждения о столкновениях или автоматического торможения В железнодор. компьютерного зрения могут нс пользоваться для наблюдения за поездами и железнодорожными путями обна ружения препятствий на путях, а также для мониторинга безопасности навокза лах и перегонных пунктах Это помогает повысить эффективность и безопас ностъ железнодорожного движения, предотвращая аварии и обеспечивая более надежный пассажирский и грузовой транспорт Обработка движущихся объектов охватывает ключевые концепции такие как обнаружение и отслеживание, и их роль в создании более интеллектуальных систем компьютерного зрения.
слеживания и анализа движущихся объектов в видеопотоках или на изображе ниях Основные подходы включают в себя вычитание фона, оптический поток детекторы движения, методы машинного обучения, алгоритмы отслеживания объектов сегментацию кадра и глубокое обучение Метод вычитания фонаислэльзуется для выделения объектов путем вычи таиия статического фона из текущего кадра, а оптический поток измеряет дви жение пикселей между последовательными кадрами Детекторы движения выде ляют области, где происходят изменения на изображении, а методы машинного обучения такие как S VM и нейронные сети, мотут классифицировать и анапизи ровать движущиеся объекты Алгоритмы отслеживания объектов, такие как корреляция и фильтры Кал мана, позволяют системе отслеживать д вижущиеся объекты через несколько кад ров Сегментация кадра используется для выделения объектов на изображении, что упрощает их последующее отслеживание Глубокое обучение, особенно сверточные нейронные сеги, применяется для более точного обнаружения и классификации движущих ся объектов Все эти методы взаимодействуют, обеспечивая системам компьютерного зрения эффективные инструменты для работы с движущимися объектами в раз- личных сценариях применения Далее рассмотрены методы обработки изображений в видеопотоке, детек- ции и отслеживания движущихся объектов, чтобы получить более глубокое по- нимание этой темы Делать это будем на конкретном примере, который будет усложняться от темы к теме путем добавления новых функций в рамках данного раздела Задача будет заключаться в отслеживании заранее выбранного движуще- гося объекта. 6.2. Предварительная обработка изображений Предварительная обработка изображений в контексте обработки движу щихся объектов представляет собой важный этап подготовки данных для после дующих алгоритмов и методов Этот этап нацелен на улучшение качества изоб ражении, повышение их контрастности, снижение туман обеспечение более оп тимального входа для алгоритмов обнаружения и отслеживания движущихся Одной из ключевых задач предварительной обработки является фильтрация шума. Применение методов сглаживания, таких как Гауссовский или медианный фильтр помогает уменьшить случайные изменения яркости пикселей что может
обнаружений движущихся объектов Преобразование цветового пространства также является важным этапом Использование функции, например, cv2^vtCdor в OpenCV, позволяет эффек тивно переходить между различными цветовыми пространствами Это может быть особенно полезно для учетатвмежний в освещении и выделения объектов оптимальным образом Бинаризация изображения, т е треобразование его в черно белый формат ьнои обработки. Это также является распространенным мет упрощает процесс обнаружения объектов и является эффективным способом снижения сложности данных для последующих алгоритмов Использование морфологических операций, таких как расширение и суже ние а также заполнение дыр в объектах, дополняет процесс предварительной об работки, обеспечивая лучшую форму и структуру объектов на твображении В целом, правильная предварительная обработка изображении играет клю чевую роль в подготовке данных, что, в свою очередь, повышает эффективность системы обработки движущихся объектов, обеспечивая более точные и стабиль- ные результаты Перейдем к реальному примеру, в котором поэтапно в каждом разделе мы будем наслаивать дополнительные функции Напомним, наша задача заключается в отслеживании движения указанного объекта В качестве объекта выберем искусственный цветок на переднем плане кадра (рис б 1) На этапе предварительной обработки изображения в программе приведен пример применения двух мет и фильтрация цветового пространства
Обратим внимание иа то, что ранее в своих примерах мы не проверяли успешность считывания кадра. В данном примере это реализовано строкой if not ret break Как известно, функция cap readf) используется для чтения следую- щего кадра из видеопотоха, а переменная ret будет содержать логическое значе- ние, указывающее на успешность операции чтения Если чтение прошло успешно (ret = = True), то переменная frame будет содержать сам кадр Однако иногда возникают ситуации, когда поток видео может быть недо- ступен или закончиться (например, если камера отключена или видеофайл завер- шился) В таких случаях cap readO вернет ret == False, что указывает на ошибку или конец видеопотока Проверка ifnet ret позволяет проверить, был ли успешно прочитан следующий кадра из видеопотока. Если ret = = False, то это может озна- чать конец ввдеопотока или ошибку, и код внутри блока i/может выполнить со- ответствующие действия, например, выйти из цикла чтения видеопотока break Преобразование в оттенки серого: gray = cv2 cvtColor(fmme,cv2.CC>LOR_BGR2GRAY) Этот метод преобразует цветное изображение в оттенки серого, что уменьшает количество каналов (вме сто трех каналов, один) и облегчает последующую обработку Кроме того для многих задач обработки изображении, таких как выделение контуров обнаруже ние объектов или распознавание обьекн так важна, как информация о яркости. По о цвете может быть не ование в оттенки серого позволяет упростить алгоритмы обработки и ускорить их выполнение Размытие для егламсивания гаобрамеения и уменьшения шума blurred = cv2 GaussianBIurfgrqy, (5, 5), О) Здесь используется гауссовское размытие (GaussiaiiBlur) для воображения и уменьшения шума
качество изображения и сделать последующую обработку более эффективной и надежной Напомним что кол фильтров в библиотеке OpenCV немалое И в лучшем случае следует вывести результаты нескольких фильтров чтоб выбрать тот, который отвечает данным требования задачи Результат работы программы представлен на рис 6 2 Если видео достаточно качественное и нет сильного шума, то применение размытия может быть излишним и даже нежелательным, так как оно может ухуд- шить качество изображения и уменьшить его четкость Размытие часто исполь зуется для снижения шума или уменьшения детализации изображения, что мо жет быть полезно при работе с изображениями низкого качества или при нали чин значительного лтума Очевидно, что фильтрация изображения в данном примере это лишняя процедура, поскольку изображения достаточно качественное и не содержит шу мов Фильтрация здесь применеж в цепях демонстрации процедуры подготовки кадра к дальнейшей его обработке. 6.3. Выбор области интереса Выбор области интереса (Region of Interest, ROI) в контексте отслеживания объекта в компьютерном зрении представляет собой процесс выделения опреде ленной области изображения, которая содержит интересующий нас объект
редогочптьвычиспигепьные ресурсы (процессорное время пько той части тображвния, где находится интересую . определяет область ин указывая границы объекта па изображении, например с помо ника, многоугольника или маски В автоматическом режиме ал териого зрения могут использоваться для обнаружения и виде основываясь на признакам, таких как цвет, текстура, форма ?ого могут использоваться алгоритмы выделения контуров об иове признаков (например, Haar подобные признаки), или мо зли нейронных сетей для обнаружения объектов Рисунок 6 3 - Пример выбора области интереса (ROI) в кадре Выбор области интереса позволяет уменьшить объем данных, которые необходимо обрабатывать, что, в свою очередь, повышает эффективность алго ритмов отслеживания объектов Кроме того, это позволяет сократить вычисли тельные затраты, что важно в реальном времени при обработке видеопотока В применении к отслеживанию объектов такие технологии, как машинное обучение, могут быть использованы д ля автоматического обнаружения и выбора области интереса. Это: тироваться к изменениям в поло женин объекта и окружающей среде, обеспечивая стабильное отслеживание в различных условиях Важно отметить, что размер области интереса ROI может существенно вли ять на производительность и точность системы отслеживания объектов в компь ютерном зрении Большие KOI ; вычислительных ресурсов для анализа так как увеличивается количество пикселей, которые необходимо обра ботать Это может привести кт тельности системы особенно в режиме реального времени. Это особенно важно, когда система работает
устойчивой к изменениям в положении объекта или его окружении Если объект переместится за пределы ROJ, ься с трудностями в от слеживании объекта, особенно при ткремеп^нии, изменении масштаба или из менении освещения Это связано с несет область интересов som информации которую Размер ROI также может влиять ла способность системы обобщать отеле живание на новые сценарии и объекты. Слишком жесткое определение ROI мо жет сделать систему менее гибкой и менее способной к адаптации к различным условиям съемки Размер ROI также может влиять на способность системы выделять и исполь зоватъ признаки объекта. В некоторых случг за RO1 может помочь в более точном анализе текстур, цветов и других признаков, что может улучшить точность отслеживания Оптимальный размер ROI зависит от конкретных условий задачи, характе- ристик объекта и требований к производительности системы Эксперименты и настройка параметров обычно требуются для достижения оптимального баланса между вычислительной эффективностью и точностью отслеживания Напомним, что изображение на экране с размером, например, 1280x720 является не чем иным, хак матрицей пикселей с размером 1280 пикселей по го- ризонтали и 720 пикселей по вертикали То есть все изображения имеет матема- тическую запись на языке Ругйоп a=frame[O 7Х, 0:1280] или более компактная запись а = frame] 720, :128О] Таким же матем атич ески трюком можно и выделить область ROI, например, roi = frame[200 250,150:300]. Этой записью мы выделяем фрагмент кадра, огра- ниченный прямоугольником Интервал 200 250 означает, что мы берем верти- кальные пиксели с 200-го по249-й включительно Таким образом, это представ- ляет 50 вертикальных пикселей А интервал 150 300 означает, что мы берем го- ризонтальные пиксели с 150-го ло299-йвключительно Таким образом, это пред- ставляет 150 горизонтальных пикселей. Итак, RO1 будет состоять из 50 вертикальных строк (пикселей) и 150 гори зонтальных столбцов (пикселей), образуя прямоугольную область изображения На рис 6 4 проведено графзнеское пояснение создания области ROI Распространенное заблуждение состоит в том, что область интереса ROI всегда равна объекту интереса. На самом деле область ROI включает в себя объект или объекты интереса. И если представить область ROI как рамку или окно то окно отслеживания (или область отслеживания) будет перемещаться внутри этой области в зависимости от положения объекта интереса на изображе нии Таким образом, область ROI является, как правило, более крупным рамоч ным элементом внутри которого может перемениться меньшии элемент такой как окно отслеживания, на изображении етный объект или область
Рисунок 6 4 - Выделение ROI в кадре (ro< = ftame[200:250 150,300]) Важно заметить, что такое статичное обозначение области ROI вокруг ин- тересующего объекта, жестко привязанное к своим координатам, может приве- сти к тому, что при смещении объекта интереса, он выйдет за пределы области ROI, и отслеживание будет утеряно Поэтому для эффективного отслеживания, как правило, требуется динамическая да стройка ROI, отслеживающей изменения положения объекта интереса. Например, если БПЛА используют для наблюдения за транспортным сред- ством на дороге ROI, которая сориентироваиажестко по центру оси фюзеляжа, мо- жет быть применена для выделения области, содержалкй только дорожное даиже- ние, игнорируя небеса или соседние здания Это помогает снизить объем данных который необходимо обработать, ускоряя процесс анализа и принятия решений. Однако важно понимать, что координаты и размеры ROI жестко привязаны к изначальному изображению При ^вменении позиции объекта интереса ROI останется фиксированным отн что может привести к сме щеиию интересующей области за пределы ROI Поэтому важно обеспечить ди намическое смещение RO1 в зависимости от изменяющихся условий и требова нии задачи Для этих целей в дальнейшем будут рассмотрены трекеры Но на этом этапе нам важно понимать, как формировать область интереса и как эта об ластъ соотносится с выделяемым объектом интереса Разберемся что произойдет, когда выделяемая область с объектом стано вится больше меньше или равна области ROI Выделяемая область с объектам больше области ROI в этом случае часть объекта может оказаться за пределами области ROI и следящий элемент внутри
: объект при этом перемещается ять объект из виду так как его ть уже находится вне ROL Выделяемая область с объектом меньше области ROI если объект занимает ько часть области ROI, значит, остальная часть области ROI будет пустой или ержать фоновую информацию В этом случае следящий элемент внутри обла находиться вокруг объекта, по часть области ROI останется неза Это может привести к неэффективной трате вычислительных ре обрабатываются лишние пиксели, не содержащие полезной инфор <те, а также может замедлиться процесс обработки Выделяемая область с объектом равна области ROI если область с объек том точно соответствует размерам области ROI, это означает, что весь объект полностью попадает внутрь области ROL В этом случае следящий элемент мо жет полностью охватывать объект, что обеспечивает эффективное отслеживание и анализ Стоит отметить, что это идеальная, ио трудно достижимая на практике ситуация, поэтому важно правильно настроить область ROI под размеры отсле- живаемого объекта Таким образом, правильный выбор и настройка RO1 это критически важ- ный этап для успешного отслеживания объектов Часто в реальных системах применяется динамическая подстройка ROJ, которая позволяет отслеживать из- менения положения и размера объекта. Как было указано выше, область интересов может быть любого размера, и теоретически она может быть размером от единого пикселя до размера разре- шения изображения Выделяя область RO1, мы получаем доступ к его содержимому в виде мас- сива данных, в котором содержится информации о цвете всех его пикселей Ниже представлен пример исходного кода, в котором область R0I определена одним пикселем roi=frame[300 301,500 501] Информация о данном пикселе выводится в терминал print(roi) roi= frame [3 00 301,500 501]
нагружаются Для этого можно провести обработку только выделенной области интересов ROI Например, при дальнейшем рассмотрении слежения за объектом трекером или выделении объектов алгоритмами глубокого обучения эти опера ции требуют преобразования области изображения в оттенки серого цвета Но зачастую достаточно применить это преобразование только для выделенной области ROI Приведем пример протраммы, в которой область интересов ROI имеет фик сированяыи размер 280x200, а внутри данной области выделен объект интереса (искусственный цветок) trainee 1ZD 40D, zuu: чоод-дгау roi Первое преобразование cv2.cxCdor(roi^2.COLOR_BGR2GRAY) переводит изображение из цветной области EGR в область оттенков серого Второе преоб разоваиие cv2 cvtColor(gray_roi£i/2.COLOR_GRAY2BCiR) переводит изображе ние из области серых тонов в цветную область BGR, при этом изображение оста ется серым Это дает нам возможность приме в цветной области [ в оттенках серого Такие преобразования позволяют выполнить определенные операции или фильтрацию, которые работают только с одюканальными изображениями (та кими как фильтры границ или некоторые методы компьютерного зрения) на вы бранной области изображения Часто такие операции применяются для эконо мии вычислительных ресурсов или просто для удобства обработки данных Результат такой программы приведен на рис б 5 Необязательно выводить область интереса на экран Наблюдателю или one ратору она не представляет важности. Поэтому зачастую область ROI исполь зуют 2 коде и она является программы ее не выводят
кадр как frame) згобласть выделения объекта интереса (например зеле ныи квадрат) По логике, зеленый квадрат в области ROI должен сопровождать перемеще- ние объекта Это может быть сделано с использованием алгоритмов компью- терного зрения, которые фиксируют границы объекта на основе контрастно- пиксельных признаков на изображении Фиксация обычно выполняется путем определения координат и размеров выделенной области, которые затем могут использоваться для дальнейшего анализа или отслеживания объекта. Об этом речь пойдет в следующем разделе. Обобщим вышесказанное Использование области ROI с последующим пе- ремещением следящего квадратика внутри нее предоставляет несколько преиму- ществ Уменьшение объема обрабатываемых данных Обработка всего изобра жеиия может быть ресурсоемкой, особенно в случае высокого разреше ния изображения Использование области ROI позволяет сосредото чигься только на части изображения, содержащей интересующий объект что снижает объем данных, подлежащих обработке Увеличение скорости обработки. Поскольку обработка выполняется только внутри области ROI, ане навеем изображении это может зиачи тельно ускорить процесс аналвваи принятия решений Улучшение точности и эффективности. Когда обработка ограничивается областью ROI, аналитические алгоритмы могут быть более точными и эффективными, так как они сосредоточенытолъко на конкретной обла
бъектана изображении, обеспечивая непрерывное отеле сти интересов появляется окт простои способ выделить область ROI в кадре это использова библиотеки OpaiCV cv2.selectROI0 Эта функция в отличии от етода выбора области ROI, позволяет определить границы обла I объект интерактивно То есть, когда вызывается cv2 selectROI о с изображением, и пользователь может выделить интересую щую его область, перетаскивая мышью и задавая размеры прямоугольника Эти действия в реальном времени влияют на параметры выбранной области, которые затем возвращаются из функции. Такой подход позволяет пользователям взаимодействовать с программой или библиотекой, делая ее более удобной и гибкой в использовании, особенно при работе с визуальными данными, такими как изображения или ввдео Рассмотрим ниже программу, в которой реализован следующий этап в нашей программе выбор области интереса. В данной программе после запуска пользователь может выбрать начальную область интереса с помощью мыши, выделяя прямоугольник на первом кадре, который будет зафиксирован в переменных х у w h Нажать ENTER Затем про- грамма будет перерисовывать этот прямоугольник на каждом последующем кадре с веб-камеры Следует оценить, насколько понятным и более компактным становится код если применять описываемую функцию Здесь функция cvE^eiectROIfi гелю выбирать прямо угольную область ROI на изображении Функция включает в себя четыре арту мента, из них два обязательных.
ROI /гогаСёйТё^пциоиаЛЕНО) флаг^ут ROI от центра По умолчанию False , следу er ли начинать выбор сяцин координаты и размер вы бранной области (х, у, w, И) Строка кода с функцией cv2 rectangle)) используется для отрисовки прямо угольника на изображении frame Она указывает координаты верхнего левого и нижнего правого утпов прямоугольника, которые предварительно определены на основе выбранной области с помощью функции cv2seiectROI() Таким образом координаты х, у это верхний левый угол прямоугольника, a w h его ширина и высота, соответственно Эти координаты обновляются на каждой итерации цикла чтобы отображать прямоугольник на последующих кадрах видеопотока Более подробное разъяснении функции cv2selectROI() приведено в Прило Результат работы такой программы представлен на рис б б На первом ри суике производится выбор ROI На втором рисунке результат нажатия кнопки ENTER На третьем рисунке см ещение объекта в кадре Обратим внимание, что смещение объекта на кадре не приводит к смеще нию зеленого прямоугольника. Понятное дело, ведь выделение области ROI не реализует слежение за объектом без дополнительных мер О них речь пойдет в следующем разделе 6.4. Фильтр Калмана 64 7 Принцип работы фильтра Калмана В отличие от методов прос ьграции применяемых в раз деле 3 9 «Фильтрация», направленных на обработку статических изображении фильтр Калмана ориентирован на оценку динамики объектов во времени Он нс пользует модель движения объекта, последовательность измерении его поло
годов пространственной фильтрации и делает его незаменимым инструментом для задач отслеживания, где нужно не просто обработать текущее изображение а предсказать и отследить изменения состояния объекта в динамике Важность фильтра Калмана в этом контексте трудно переоценить, так как он позволяет по выситъ точность и эффективность отслеживания в сложных условиях таких как наличие шума в данных, переменная скорость движения или неполное освещение Фильтр Капмаиа это мощный инструмент для отслеживания движущихся объектов работающий по принципу «предсказание коррекция» Представьте что вы следите за летящим мячом и хотите точно знать его положение в каждый момент времени У вас есть два вида информации во первых, модель движения мяча, которая описывает, как он обычно д вижется под действием силы тяжести например, по параболической траектории, если нет ветра, во вторых, измерения положения мяча, полученные с помощью камеры или другого сенсора Эти из мереная не всегда точны и могут содержать ошибки из-за размытия, помех или неточности самого сенсора. Работа фильтра Калмана начинается с этаж предсказания Используя предыдущее известное положение и скорость мяча, а также модель его движе- ния, фильтр предсказывает, где мяч, скорее всего, будет находиться в следую- щий момент времени Это предсказание подобно тому, как если бы вы, глядя на траекторию мяча, экстраполировали ее вперед, основываясь на своем понимании физики полета Однако вы знаете, что это предсказание неидеально мяч может немного отклониться от траектории >в за, например, порыва ветра, что и есть неотределенность предсказания Далее наступает этап коррекции Когда появляется новое измерение факти- ческого положения мяча (нагфнмер, новый кадр с камеры), фильтр сравнивает его с предсказанным положением (рис. 67, А) Важно, что фильтр не заменяет предсказание новым измерением, а, скорее, уточняет его, учитывая точность как предсказания, так и измерения Чем точнее измерение ("например, если изобра жение с камеры четкое), тем сильнее фильтр скорректирует предсказанное поло жение в сторону фактического положения мяча. На (рис 67, Б) видно, при размытии мяча в результате плохого кадра (или смазывания движением) фильтр Калмана делает менее точную коррекги ровку После этого этапа коррекции, фильтр Капмаиа обновляет свое предсгавле ине о состоянии мяча, включая его положение и скорость Это обновленное со стояние затем используется доя егся итеративно Таким образом, и процесс повтори тает движение мяча в режиме реального времени, уточняя свое понимание его положения накаждом шаге Этот итеративный процесс позволяет ему более точно следить за траекго риеи мяча даже если его движение не совсем идеально предсказуемо
Фильтр Калмана работает на основе вероятностей, осознавая, что как пред сказания, так и измерения могут содержать ошибки Он стремится получить наиболее вероятную оценку текущего положения мяча, учитывая все доступные данные Вместо того, чтобы просто усреднять измерения, он анализирует их в контексте модели движения н имеющейся неопределенности Именно такой под- ход позволяет фильтру минимизировать влияние шума и неточностей в измере- ниях, позволяя более точно отслеживать мяч Отметим, что в контексте движения мяча, шум это неточности и колебания в измерениях его положения и скорости, возникающие из-за несовершенства ка- меры, помех или других факторов, которые фильтр Калмана помогает умень- шить для более точного отслеживания При отслеживании мяча в видеостриме фильтр Калмана обычно выполняет своизычисления на каждом кадре, проходя итерацию предсказания и коррекции Одаако точность и стабильность отслеживания ж являются константами и зави- сят от целого ряда факторе® Частота кадров вцдео напрямую влияет на то, как часто фильтр обновляет информацию о мяче. Чем выше частота кадров, тем чаще происходят итерации, и тем более плав- ной и точной может быть траектория отслеживания. Но при этом более высокая частота кадров может потребовать больших вы числительных ресурсов Другим важным фактором является разрешение изображения Чем выше разрешение тем более точно фильтр может определить положение мяча на каждом кадре что уменьшает влияние шума в измерениях Если мяч мал относительно размера кадра, низкое разрешение может при вести к тому что его положение будет определяться с меньшей точностью что в свою очередь может снизить точность работы фильтра Калмана.
случайных помех Чем выше уровень шума, тем сложнее фильтру Калмана точно определить по ложение мяча В условиях высокого шума, фильтр может быть менее уверен в измерениях и сильнее полагаться на предсказания на основе модели движения, что может сглаживать но и немного «запаздывать» зареальным движением Помимо этого, качество оказывает большое влияние на результат работы фильтра. Если модель движения мяча не соответствует реаль нои траектории, то даже при низком уровне шума и высоком разрешении фильтр не сможет точно отслеживать мяч Точность модели движения определяет, насколько хорошо фильтр сможет предсказывать положение мяча между кад рами Также качество оптики и условия освещения будут влиять на четкость изображения и точность измерений, что в конечном итоге также повлияет на ра- боту фильтра. Таким образом, работа фильтра Калмау это не просто применение алго- ритма на каждом кадре, это сложный процесс, на который влияют хак характе- ристики ввдео (частота кадров, разрешение), так и качество измерений (уровень шума) и даже точность модели движения объекта Эффективное отслеживание требует оптимального баланса между всеми этими факторами б 4.2 Математическая модель фильтра Калмана для отслеживания Для того чтобы фильтр Калмана мог эффективно отслеживать мяч, ему необходимо оперировать математическими представлениями как самого объекта (мяча), так и процесса измерений Эти представления выражаются в виде набора уравнений, которые делятся на две основные группы уравнения предсказания и уравнения коррекции Представление состояния объекта (мяча) Состояние мяча в момент времени к описывается вектором состояния (%) Этот вектор содержит всю информацию, которая нам нужна для отслеживания мяча Обычно это положение мяча р<, = [хьуе] (коарлупксплхау центра мяча), скорость мяча и, = [vxt, vyj (скорость по х иу) То есть vx,, показывает насколько быстро мяч движется вправо (если положительное значение) или влево (если отрицательное значение), а ууе показывает, насколько быстро мяч движется вверх (отрицате или вниз (положительное значение) Вместе эти компоненты описывают управление и величину скорости мяча в двумерном пространстве
ИЗ ЗЬ4 xt = [хьуьУХьууЦ Вместе с вектором состояния фильтр Калмана также хранит матрицу нова риации (Pt) Эта матрица описывает неопределенность в нашем знании о состоя нии мяча Чем больше ковариация, тем больше неопределенность Матрица ковариации ошибок состояния (Р«) это математический способ представления этой неопределенности. Она не просто показывает, насколько мы «не уверены» в положении или скорости мяча, она показывает, как именно эта неопределенность распределена между разными компонентами вектора состоя Pt это матрица, айв просто одно число, в ней «определенность может суще ствоватъ для разных компонентов вектора состояния (например, координаты х, ко ординаты у, скорость пох, скорость по у), и эти неопределенности могут быть свя заны друг с трутом Если вектор состояния имеет 4 компонента (как в нашем примере xt - [xt yt, vxt, vy<J), то Pt будет матрицей размером 4x4 Pk(.Xk>xk) AtCxit.yfc) EitCxvi’Xfc) fk(xk,vyk) р = Рк<Ук.хк) Рк(Ук>Ук) Pk(yk.vxk) Рк(Ук>^Ук) к Pki.VXk.Xk') Рк^Хк.Ук) Pk(pXk,VXk) Рк(ухк, vyk) РкСРУк-Хк) Рк(.гук’Ук) Рк(РУк>^Хк) Рк(УУк>^Ук) Диагональные элементы матрицы Pt представляют дисперсию (квадрат среднеквадратичного отклонения) для каждого компонента вектора состояния РДхкХь) дисперсия положения по оси х, Р^ьУь) дисперсия положения по оси у, Pt(vxiuVX!) дисперсия скорости ло оси х, Pt(vyi:,vyy дисперсия ск орости ло оси у Чем больше значение дисперсии для какого-либо компонента, тем больше не- определенность в нашем знании этого компонента. Например, если F/zwc) боль- шое, это означает, что мы не очень уверены в том, где находится мяч по осих Недиагональные элемента матрицы Pt представляют ковариацию между разными компонентами вектора состояния. Ковариация показывает, насколько сильно связаны неопределенности двух разных компонентов Например, может быть ситуация если мы думаем что мяч находится правее, то мы также можем думать, что его скорость вправо тоже больше Положительная что неопределенности двух компо нентов изменяются в одном направлении (если мы считаем, что значение од ной компоненты больше, то и другой тоже). Отрицательная ковариация означает, что неопределенности двух компонен тов изменяются в противоположных направлениях Нулевая ковариац связаны друг с трутом что неопределенности двух компонентов не
Большие диагональные элементы указывают набольшую неопределенность в оценке конкретного компе или скорости по у) ер положения по х Большие недиагональиыв элементы указывают на сильную связь и неопре деленность между разными компонентами вектора состояния (например между положением и скоростью). Вот небольшие примеры для большего понимания 1 Если Р/хь большое, значит, мы не уверены, где мяч точно по оси х (неопределенность в положении) 2 Если Ptfext, т) маленькое, значит, мы достаточно уверены в скорости мяча по оси х (малая неопределенность в скорости) 3 Если Р>(хь большое и положительное, то неопределенность в положе ним мяча по оси х связана с неопределенностью в его скорости по оси г чем правее мы думаем мяч, тем быстрее вправо мы его считаем Уравнения предсказания Уравнения предсказания используются для оценки состояния мяча в следу- ющий момент времени (£+/) на основе текущего состояния (А) и модели его дви- Предсказанное состояние где Sfe+i | в это предок азанное состояние мяча в момент времени £+1, на основе данных в момент времени к; F это матрица перехода состояния, которая описывает, как состояние мяча меняется со временем Эта матрица основана на модели движения мяча (напри- мер, движение с постоянной скоростью, параболическая траектория) Если пред- положить, что скорость мяча постоянна, то матрица перехода состояния будет иметь вид 1 0 At О р = 0 1 0 At 0 0 1 О' 0 0 0 1 где At это интервал времени между кадрами. Предсказанная матрица ковариации ошибки состояния где Efc+i|fc это предска; мент времени к+1 Q это матрица ковг гации ошибки состояния на мо ленность в модели движения мяча (например, порывы ветра) которая учитывает неопреде
Ук+1 — zk+l — zk+l I kt где у№+1 это инновация, разница между фактическим измерением Zw (поло жение мяча на камере) и предсказанным имерением Н Д+i | zk+1 это вектор твмерения, содержащий координаты мяча, полученные с камеры (например, zfc+I— (х измер, у измер], Н это матрица наблюдения, которая связывает состояние мяча с тем что мы можем измерить В большинстве случаев мы можем измерить только поло жение мяча, поэтому эта матрица имеет вид: Матрица ковариации инновации: 5*+1=Я-Л«к-Яг + Я. где Stu это матрица ковариации инновации; R это матрица ковариации шума измерения, которая учитывает неопреде- ленность в измерениях положения мяча Коэффициент Калмана- = А+11* &$k+t *> где Кы это коэффициент Калмана который определяет, насколько сильно мы должны доверять измерениям по сравнению с предсказанием Обновленное состояние- где Хет это обновленное состояние мячав момент времени к±1, учитывающее как предсказание, так и измерение где Р*ц обнови» меня к+1 = U-J*+i й)4«к, ца ковар нации ошибки состояния на момент вре Таким образом, общая схема работы фипьтраКалмана выглядит так 1 Предсказание на ос и модели движения мы предсказываем состояние мяча на следующем лиге (Дик, Рьн к) 2 Измерение получаем измерение положения мяча с камеры (zw)
4 Повтор процесс повторяется для следующего кадра. Возвращаясь к матрице состояний F, покажем наиболее распространенные их виды для применения в различных задачах. • предполагается, что движения объекта с постоянной скоростью предполагается, что движения объекта с постоянным ускорением dt 0.5 -di2 0 0.5 dt2 1 dt ’ 0 1 • предполагается, что движения объекта с линейно изменяющимся уско- рением (рывок) 1 О dt 05 dt2 1/6-at3 0 1 0 05 dt2 1/6-dt3 f = 0 0 1 dt 0.5-dt2> 0 0 0 1 dt 0 0 0 0 1 • предполагается, что движения объекта по кривой (упрощенный ва- риант) cos(u)-dt) —sm(<a-dt) 0 0 р = sln ^0 MS ‘ ^t) ° ® 0 0 1 o’ 0 0 0 1 предполагается, что движения объекта с управляющим воздействием (например, тяти двигателя в набавлении ff) 1 0 dt О О О 1 0 dt О F = 0 0 1 0 dt cos (в) ООО 1 dt sin(0) 0 0 0 0 1 Важно понимать, что, несмотря на кажущуюся сложность математических уравнении фильтра Калмаж, в их основе лежит достаточно простои процесс Фильтр использует линейные уравнения, что делает его вычислительно эффек тивяым При этом стоит отметить, что большинство параметров таких как мат рицы перехода состояния, шумов бОДвссаи жмбении либо настраиваются под
мически меняются в процессе отслеживания. Хотя явное использование фильтра Калмана те всегда очевидно в трекерах (о которых речь пойдет в । OpenCt^ многие из них особен но более современные, используют его (или его аналоги) для улучшения ста билъности и точности отслеживания CSRT является явным примером такого использования ио KCF, MIL, TLD и другие трекеры могут также исполь зовать фильтр Калмана или похожие методы для повышения своей эффектив ности 643 Практическое применение фильтра Калмана Выше мы детально рассмотрели теоретические основы фильтра Калмана, начиная с его общего принципа работы «предсказание-коррекция» и заканчивая математическим описанием линейной версий фильтра Мы узнали, как фильтр Калмана использует модель движения объекта, последовательность измерений его положения и вероятностный анализ для точной оценки его состояния во вре- мени Мы также изучили, что фильтр Калмана особенно полезен в условиях, ко- гда данные измерений подвержены шуму, что позволяет отслеживать движение объектов более точно, чем если бы мы полагались исключительно на «сырые» измерения Теперь, когдау нас есть некоторое теоретическое понимание, время перейти к практическому применению фильтра Калмана В этой части раздела постара- емся перенести математическое описание фильтра Калмана при рассмотрении примера с мячом в программный код Мы рассмотрим конкретный пример от- слеживания движущегося объекта в видеопотоке с камеры, реализуя основные этапы работы фильтра Калмана предсказание, измерение и коррекцию На этом примере увидим, как можно настроить параметры фильтра для конкретных задач и как он помогает повысить точность отслеживания в условиях реального мира. Этот практический опыт позволит вам закрепить полученные знания и понять как применять фильтр Калмана в различных приложениях Также в данном примере будет реализована более надежная структура за хвата вццеопотока с камеры, включающая проверку успешности считывания каждого кадра Аналогичный подход к проверке на ошибки будет применен и к другим ключевым операциям в коде. В дальнейшем настоятельно рекомендуется придерживаться подобной структуры обработки ошибок для обеспечения ста билъности и корректной работы программ Итак рассмотрим подробно код который реализует отслеживание объекта в видеопотоке с камеры, используя фильтр Калмана для предсказания и коррек ции его положения, и отображает результаты: зеленый квадрат отмечает обнару женную область объекта, а синий круг указывает на предсказанное фильтром по ложение центра объекта
кунду) Гм1трицГ :«Г([[1, 0, dt, 0], [0, 1, 0, dt] , [0, 0, 1, 01, [0, 0, 0, 1]], dtype=np fl Н =адрИ« oay([[l, 0, 0, 0), [0, 1, 0, OJJ , dtype-np.Iloat32) И Матрица Q пр ах: ковариации шума процесса (Q) tay([[0 1, 0, 0, 0), [0, 0 1, 0, 0), [0, 0, 0.01, 0], [0, 0, 0, 0 01]], dtype-np float32 tt Матрица ковариации шума измерения (R) CaZ([[10, 0). [0, 10]], dtype-np f loa t32) def lnltlallze_kallnan(lnieiel_meaaureroetib) i kaiman здаем фильтр юеазисемепС_в1хп,0) # Co kaiman txansxlionMatхак P И Задаем матрицу перехода kaiman inaasuxamanlMatx.. - H ft Задаем матрицу наблюдения kaiman pxocassNoxseCov “ Q я Задаем матрицу ковариации шума процесса kaiman maaauxementNoxsaCov " R ff Задаем матрицу ковариации шума измерений К Инициализируем состояние фильера, предполагая начальную скорость О
center_х = bbox[0] + ЬЬох[2] // 2 center_у = bbox[l] + ЬЬох[3] H 1 И Предсказание положения объекта Н Получение текущего кадра gray cv2. cv?Co2ox(f rame, cv2 .C0t,0R_BGR2GRAY} # Обработка текущего кадра в пределах выделенной области sub_frame greyly.у + 5, x'x * wj tt Поиск центра объекта в текущем кадре (локальный поиск) measured_x • measured—у measurement твх_1ос[0) cv2. пипМл kL о с (s ub_f г ахпе) [measured—у] ] , # Коррекция предсказания на основе измерения kalman coxxec t (measurement) ;pt-!(OHO]), int(kal- man statePostll][0]> > cv2 rectaapJe(frame, (bbox(0], bbox(l)), (bbox[0] + bbox[2], bboxfl] bbox[3J), (0, 255, 0) cv2 2jnshow( Фильтр Калмана1, frame) # Обновляем прямоугольник отслеживания на основе текущего из ЬЬох[2] //2, measured—у bbox[3] // 2 bbox[2] bbox[3J) Программа начинается ci штации параметров и матриц фильтра Кап мана, которые определяют его поведение и точность А именно Л = 1 / 30 устанавливает интервал времени между кадрами предполагая что камера работает с частотой 30 кадров в секунду Этот параметр используется 202
шее значение dt сделает фильтр более чувствительным к изменениям большее более инертным state_dm = 4 определяет размерность вектора состояния фильтра, который включает в себя положение объекта (з&у) и его скорость (vx vy) Этот параметр обычно не меняется так как он определяет, какую информацию мы отслеживаем measurement_dm = 2' определяет размерность вектора измерения который включает в себя только положение объекта (х,у), поскольку именно это мы из меряем с камеры Этот параметр также обычно не меняется, так как он зависит от того что мы можем непосредственно измерить F (матрица перехода состояния) описывает, как состояние объекта (поло жение и скорость) твменяется со временем. Предполагается, что скорость объ екта остается постоянной в течение интервала времени dt Изменение элементов в матрице F позволит смоделировать другие типы движения, например, ускоре ние или замедление. В текущем коде предполагается постоянная скорость, ио можно добавить ускорение, изменив матрицу Текущая матрица F (постоянная скорость) Матрица F с постоянным ускорением [0, 0, в, 1]], dtype-np.floats2) Н (матрица наблюдения) связывает состояние объекта с тем, что мы можем измерить с камеры (только положение объекта). Эта матрица зависит от способа получения измерений и в данном коде, как правило, ие изменяется, так как мы измеряем только положение Q (матрицаковариации шума процесса) определяет неопределенность в мо дели движения объекта, т е насколько сильно реальное д вижение может откло пяться от модели Большие значения означают, что мы меньше доверяем нашей модели движения Увеличение значений в Q приведет к тому, что фильтр будет больше полагаться на измерения, а не на предсказание, что может уменьшить плавность отслеживания, но и уменьшить запаздывание Уменьшение значении в Q сделает отслеживание более плавным, но менее чутким к внезапным измене R (матрица ковг я): определяет неопределенность в измерениях положения объекта, т е. насколько сильно показания с камеры могут отличаться от реального положения. Большие значения означают что мы 203
фильтр ботИййМолагатъся на лтредсказание, а яе на измерения что может сгла дать шумы и уменьшить влияние помех, но сделает отслеживание более инерг ным Уменьшение значений в R сделает отслеживание более чутким к измере Отметим что все матрицы заданы как гр array с типом npfloat32 для обес печения совместимости с ОрепСР Функция mitialize_kcdman(imtM_measurement'y ] Создает объект cv2 KalmanFiter с заданными размерностями 2 Настраивает матрицы перехода, наблюдения и шума созданного фильтра, используя заранее определенные F, Н, QhR. 3 Инициализирует начальное состояние фильтра (kalman statePre) с яачаль ным положением объектаи нулевой начальной скоростью 4 Возвращает настроенный фильтр Калмана Эта начальная настройка критически важна для работы фильтра, поскольку задает его параметры и определяет, как он будет интерпретировать и обрабаты- вать измерения положения объекта. Правильная настройка параметров ей, g и Я может значительно улучшить качество отслеживания в зависимости от конкрет- ной задачи Далее в программе производится захват видеокадра Ранее мы рассматривали базовые способы захвата видео (раздел 2 3 «Захват видео с камеры и из файла»), но в данном коде инициализация ввдеопотока усложнена проверками для обеспе- чения надежной работы Сначала создается WbeKtcv2.FideoCapture(0) для доступа к камере, после чего проводится проверка f not capjsOpened() на успешность открытия В случае ошибки, программа «медленно завершается, выводя сообще- ние Затем мы пытаемся получить первый кадр с помощью cap read/), и, если счи- тывание не удается (ifnot ret), ресурсы камеры освобождаются и программа завер- шается Эта усложненная структура, включает проверку на. ошибку доступа к ка- мере, атакже на успешность считывания первого кадра, что является ключевым для создания более надежного и устойчивого к ошибкам программного обеспечения Используя ранее жученную функцию cv2seleaROl() (6 3 «Выбор области интереса»), протрамма позволяет пользователю интерактивно выделить прямо угольную область для отслеживания Функция отображает первый кадр и ожи дает выбора области, возвраты координаты верхнего левого угла (х, у) и размеры (w й) выделения в кортеже ЪЬск В случае отсутствия выбора (bbax = (0,0 О О)) программа завершает работу, освобождая ресурсы камеры Таким образом мы определяем область, за которой будем следить. После получения области отслеживания ббосвычисляются координаты цен траэтои области cents г_х и center_y путем сложения координаты верхнего левого угла с половиной ширины и высоты соответственно Полученная пара коорди нат объединенная в кортеж mrtial_measurem&i, используется для инициализа ции фильтра Калмана через вызов функции irntialize_kalman() Таким образом мы задаем начальное положение объекта в системе координат фильтра, что поз воляег начать процесс отслеживания
дующии каДр ^'видеопотока обрабатывается в цикле while True следующим об разом ] Сначала мы читаем очередной кадр с помощью cap read( Если чтение не удалось цикл завершается илроискодит освобождение ресурсов камеры В про тивном случае выполняется предсказание поп, дущего состояния с помощью knimanpredictO объекта на основе преды 2 Далее текущий кадр преобразуется в оттенки серого (gray), что упрощает последующую обработку 3 Затем мы извлекаем координаты х, у, ширину и> и высоту h из ранее оп ределенного прямоугольника Ыхк и получаем из gray фрагмент изображе ния subjrame в пределах этого прямоугольника. 4 В subjrame выполняется поиск центра объекта, с помощью функции а/2 mmMaxLocf) (основываясь на локальном поиске максимума), из результатов которой мы извлекаем новые коордижты центра measured_x и measured_y По еле чего формируется вектор измерения measuremem, который содержит коор данаты фактического положения объекта на текущем кадре 5 Эта данные передаются в фильтр Калмана через метод /caiman correct(measurement) для корректировки предсказанного положения 6 После этого мы извлекаем предсказанное положение объекта из фильтра predicted_center и отрисовываем на кадре прямоугольник bbax вокруг обнару- женного объекта и кругpredicted_center, указывающий на предсказанное поло- жение центра 7 Затем кадр отображается в окне, и положение прямоугольника bbax об- новляется, чтобы соответствовать фактическому положению объекта 8 Наконец, происходит проверка, не была ли нажата клавиша “q” для завер- шения программы, в таком случае цикл также прерывается Стоит обратить внимание на элемент программы cv2 KalmanFilterf) cv2 KalmanFilterf) - это класс в библиотеке OpenCV, который предоставляет ре- ализацию фильтраКалмана Фильтр Калмана это алгоритм, которыйиспользу- ется для оценки состояния динамической системы на основе ряда зашумленных измерений В контексте отслеживания объектов, как в нашем коде, фильтр Кал мана помогает отслеживать положение объекта, сглаживая шум и делая предска зания более точными Основные параметры при создании объекта cv2 KalmanFilter state_dim (mt) размерность вектора состояния Это количество переменных которые описывают состояние объекта, например, изложение (х, у) и скорость (ух уу) В нашем примере state_dim = 4, measurement-dim (intV размерность вектора измерения Это количество пе ременных которые мы измеряем, tep, только положение объекта (х у) с камеры В нашем примере measurement_dim = 2, control_dm (int, необязательный) размерность вектора управления Этот параметр используется, если система управляется какими то внешними факто рами В нашем примере он не используется и установлен по умолчанию в О
Метод(^ёЙ&^) выполняет этап предсказания фильтра Калмана Он исполь зует текущее состояние системы и зя, заданную матрицей transitionMatrix для оценки состояния на следующем временном пите Метод не принимает входных данных, так как ишользует внутреннее состояние объекта фильтра и обновляет внутр. состояние фильтра а также предсказанную ковариационную матрицу ошибок, которые используются на следующем шаге Этот этап важен для оценки будущего положения объекта на основе текущих знаний и модели движения. Метод correctfmeasurement) выполняет этап коррекции фильтра Калмана Он использует полученное измерение, представленное вектором measurement для корректировки предсказанного состояния, полученного на этале predict() Метод обновляет внутреннее откорректированное состояние фильтра, а также ковариационную матрицу ошибок. Этот метод важен, поскольку позволяет уточ нить предсказание с пом ощью реальных измерений и, таким образом, уменьшить влияние шума. MnoiitransitionMatra устанавливает матрицу перехода состояния (F) фильтра Калмана. Эта матрица описывает, как состояние системы изменяется со временем, и определяет модель движения, используемую фильтром Она принимает на вход матрицу питру и определяет, хак фильтр будет моделировать динамику системы Метод measurementMatm устанавливает матрицу наблюдения (Н) фильтра Калмана. Эта матрица связывает внутреннее состояние объекта с тем, что мы мо- жем измерить с помощью сенсора или кам еры Она определяет, как фильтр будет использовать измерения для коррекции своего состояния Метод принимает на вход матрицу питру Метод pracessNoiseCm устанавливает матрицу ковариации шума процесса (g) Этаматрица определяет неопределенность в модели движения объекта, задавая уровень доверия к предсказаниям Матрица определяет, как сильно фильтр будет полагаться на свою модель по сравнению с измерениями, а также задает уровень влияния «случайности» на процесс. Метод принимает на вход матрицу питру Метод measurementNoiseCcK устанавливает матрицу ковариации шума из мерения (R) Этаматрица определяет неопределенность в измерениях положения объекта, а также задает уровень доверия к показаниям сенсора Матрица указы вает насколько сильно фильтр полагается на реальные измерения по сравнению с предсказанием, а также насколько сильно он доверяет датчикам Метод прими мает на вход матрицу питру Метод statePre устанавливает начальное состояние системы до этапа пред сказания Он содержит данные, которые инициализируют состояние фильтра, например начальное положение и скорость объекта. Метод принимает на вход вектор питру определяющий начальную точку для фильтра Метод statePost: : системы после коррек циина основе измерения Вектор содержит и положение объекта и его скорость Он используется для следующего шага предсказания. Метод возвращает вектор питру определяющий обновленное состояние
Обычный фильтр Калманапрекрасна справляется с задачами отслеживания когда модели движения объекта и процесса щмерении являются линеиными то есть описываются простыми прямыми пиниями Однако реальный мир часто не линеен мяч может двигаться с ускорением, вращаться, а изображение с камеры может подвергаться перспективным искажениям. В таких случаях обычный фильтр Калмана становится неэффективным Чтобы справиться с нелинейно стью применяется расширенный фильтр Калмана (EKF) Основная идея EKF заключается в том, чтобы линеаризовать нелинейные модели вокруг текущей оценки состояния. Это значит, что мы аппроксимируем нелинейные функции линейными в небольшой окрестности рабочей точки Представьте, что мы следим за летящим мячом, который описывает параболу Модель параболы это нелинейная модель ЕКЕ как бы «выпрямляет» эту пара бону вблизи текущего положения мяча, чтобы применить к ней линейные ураз нения фильтра Калмана Вместо линейных уравнений обычного фильтра, ЕКЕ использует нелиней- ные функции для предсказания состояния объекта и получения измерений То есть, вместо простого умножения на матрицу, ЕКЕ использует более сложные функции, например, учитывающие сопротивление воздуха при падении мяча или перспективу камеры ЕКЕ делает предсказание следующего состояния мяча, ис- пользуя нелинейную модель движения Затем, перед применением уравнений коррекции, EKF линеаризует нелинейные функции, вычисляя так называемые матрицы Якоби, которые являются матрицами частных производных Wi/Зх) Рк{д^(ду) Pk(M/tox) Pk(df1/dvy) р pk(df2/dy) pk(dh/dvx) pk(df2/dvy) Pk~Pk(Sf3/dx-) Pk(df3/dy-) pk(df3/dVX) pk(df3/dvy) №f№ Pk(dfM Pk(dfjdvx) Р^дМдгу) Здесь/1 это функция, которая дает предсказанное значение х (координа тах) в момент времени к+1, ft предсказанное значение у, fa предсказанное значение vx и fi предсказанное значение уу, и каждая из этих функций зависит от текущего состояния, то есть or х*,у*, та*, vyt (в общем случае, и от управляю щих воздействий, если таковые имеются). Конкретные выражения для частных производных будут зависеть от вцца нелинейной функции f Матрицы Якоби представляют собой как бы наклон нелинейной кривой в текущей точке и позволяют нам работать с приближением нелинейной модели вблизи текущего положения разницу между измеренным положе сказанного состояния, и это тоже делается с учетом матрицы Якоби которая по казывает как сильно нужно и другие параметры
Иными словами EKF постоянно «подгоняет» линейные уравнения к нели неинои модели пересчитывая их на каждом лиге EKF линеаризует нелинейные функции на основе текущей оценкн состояния, что позволяет нам работать с ли неиными уравнениями в локальной области, где приближение довольно точно Это и отличает EKF от обычного фильтра Калмана, который предполагает ли неиностъ модели навеем протяжении отслеживания Однако стоит помнить, что EKF это приближение, и он может не сработать хорошо если нелинейность очень сильная или если начальная оценка состояния далека от истинного значения Вычисление матриц Якоби, необходимых для EKF может быть довольно сложным и трудоемким В таких случаях применяют другие более продвинутые методы, такие как Unscented Kalman Filter (DKF) ко торые дают более точные результаты, хотя и являются более вычислительно сложными Но для большинства задач отслеживания с умеренной нелинейно стью EKF показывает хорошие результаты и является распространенным ин струм ентом 6.5. Трекинг движущихся объектов В предыдущей главе мы изучили фильтр Калмана, который позволяет нам прогнозировать положение объекта на основе его прошлых состояний и текущих измерений Однако, в реальных задачах компьютержзго зрения нам часто нужно не только предсказывать положение, но н отслеживать объекты, которые могут перемещаться, менять форму или перекрываться другими объектами В этом раз- деле мы рассмотрим различные методы отслеживания движущихся объектов, ко- торые расширяют возможности фильтра Калмана, позволяя отслеживать поло- жение объектов в видеолотохе, обнаруживать новые объекты и даже работать с несколькими объектами одновременно Мы рассмотрим различные алгоритмы трекинга, их особенности и практическое применение Отслеживание движущихся объектов это ключевой этап в обработке компьютерного зрения, позволяющий системам следить за объектами в движе нии через последовательные кадры видеопотока. Этот процесс важен для непре рывного мониторинга объектов в реальном времени и выявления их перемеще нии и изменений в динамике сцены. Основные задачи отслеживания объектов. 1 Разработка алгоритмов, способных справляться с изменениями в освеще нии масштабе, и другими факторами, сохраняя точность отслеживания 2 Анализ движения объектов для оц>едепения их скорости и направления что имеет важное значение в различных приложениях таких как видео наблюдение 3 Разработка методов, способных справляться с ситуациями, когда объ екты могут перекрываться или временно исчезать из кадра.
1 КоррЁйя£(ионные методы Оценка схожести между объектами на после довательных кадрах на основе корреляции, иго позволяет отслеживать объекты на основе их уникальных признаков Оптический поток Измерение вменений положения пикселей между кадрами что позволяет определить направление и скорость движения объектов Фильтры Калмана иРагЬс1е Fitter Прогнозирование перемещения объек тов на основе предыдущих данных и коррекция прогнозов с учетом те кущих измерений Методы машинного обучения Использование алгоритмов машинного обучения, таких как TrackNet или GOTURN, обученных на больших наборах данных для эффективного отслеживания объектов Интеграция с детекцией объектов Совмещение методов отслеживания с методами детекции для повышения устойчивости и точности системы в условиях изменчивой стены. 6 Комплексные методы трекинга. На 6 пункт стоит отдельно обратить виткаиие Он включает в себя алго- ритмы комплексныхметодов трекинга. Некоторые из широко используемых тре- керов включают KLT, CSRT, MedianFlow, TLD и MOSSE и т д Эти трекеры об- ладают различными характеристиками и подходами, что позволяет выбирать наилучший трекер в зависимости от конкретных условий сцены Рассмотрим кратко каждый из них Трекер CSRT (Continuous Adaptive Mean Shift with Color Name and Scale Estimation) представляет собой алгоритм отслеживания объектов в видеопотоке Он применяется в случаях, когда требуется высокая точность отслеживания при изменениях в масштабе, освещении и появлении частичных закрытий объекта, CSRT использует комбинацию методов, включая адаптивное среднее смещение с оценкой цвета и масштаба. Метод адаптивного среднего смещения позволяет эффективно справляться с изменениями положения объекта в видеопотоке, а оценка цвета и масштаба по могает адаптироваться к изменениям в окружающей среде Эти характеристики делают CSRT подходящим для сложных сценариев, где объект может менять раз мер цвет или быть частично закрытым Метод адаптивного среднего смещения используется в алгоритме отслежи вания объектов в видеопотоке, таком как CSRT Он начинается с инициализации окна вокруг объекта (область ROI), который нужно отследить Затем для каждой точки в этом окне вычисляются характеристики, такие как цвет и текстура для оценки плотности вероятности Далее вычисляется центр масс этой плотности который затем используется для смещения окна в направлении максимизирую щем плотность вероятности. Этот процесс повторяется до тех пор пока центр окна не перестанет смещаться или ж будет достигнут критерии останова Таким образом метод адаптивного среднего смещения позволяет адаптироваться к из менениям положения объекгаи его характеристикам в видеопотоке обеспечивая
и появлений^чаМичных закрытий. В библиотеке OpenCV конструктор класса, реализующий трекер CSRT называется cv2 TrackerCSRTO или ci>2 TrackerCSBT_create) Он предоставляет удобный интерфейс для использования этого трекера в приложениях компьютер ного зрения обеспечивая высокую стабильность и точность отслеживания объ ектов в видеопотоке Трекер KCF (Kemelized Correlation Filtets) представляет собой алгоритм от слеживания объектов, используияций корреляцию шаблона в пространстве при знаков Он применяет ядерные методы для повышения точности и эффективно сти отслеживания Корреляция шаблона в пространстве признаков это метод анализа изобра женин который позволяет сопоставить шаблон (обычно небольшое изображе ние например, заданная область ROI) с изображением более крупного размера с цепью определения местонахождения шаблона на большем изображении Пространство признаков здесь означает множество всех возможных признаков изображения, которые могут быть использованы для описания его содержимого (например, цвет, текстура, углы н т д ) Когда мы говорим о корреляции шаблона в пространстве признаков, мы обычно сначала преобразуем хак шаблон, так и большее изображение в про- странство признаков Затем мы ищем стетень совпадения или корреляции между шаблоном и каждым фрагментом большего изображения в пространстве призна- ков Это может быть выполнено различными способами, например, путем вы- числения скалярного произведения между векторами признаков шаблонаи фраг- мента изображения Когда корреляция максимальна, это указывает на то, что шаблон наи- более точно соответствует фрагменту изображения Поиск максимальной кор- реляции позволяет определить местопопоженж шаблона на большем жобра- Апгоритм KCF подходит для сценариев, где требуется высокая точность от- слеживания объекта при различных условиях, таких как жмеиения освещения и масштаба Он может эффективно работать в реальном времени и обладает устойчивостью к различным видам движения объекта. В OpenCV функция, реализующая трекер KCF, предоставляется как cv2 TrackerKCF() или cv2 TrackerKCF_create) Этот трекер предоставляет воз можиость быстрого и точного отслеживания объекта в видеопотоке, используя ядерные методы и корреляцию шаблона. Трекер MedumFlow это алгоритм отслеживания объектов в видеопотоке который обеспечивает хорошую производительность при относительно неболь ших изменениях в масштабе, освещении и частичных закрытиях объекта Этот метод основан на: объекта в кадре > значения для оценки перемещения Медианное значение это значение в середине упорядоченного набора дан них разделенного на две рав , это значение которое
вьппе медиИййЬ^ другая половина ниже В коитексте алгоритма MedianFlow медианное значение используется для оценки перемещения объекта на основе предыдущих значений этого перемещения В алгоритме MedianFlow медцшное значение используется для оценки пере мещеиия объекта в кадре Начиная с инициипвации отслеживаемого объекта на первом кадре алгоритм оценивает его новое положение, опираясь на предыдущее смещение Медианноезиачеиие предыдущих смещшии объектапомогает предска затъ его ожидаемое пераиеикние m текущем кадре Эта оценка может быть скор ректирована, учитывая новую информацию о положении объекта, после чего ин формация о его положении обновляется для использования на следующем кадре Такой подход позволяет алгоритму адаппроваться к вменениям положения объ екта, уменьшая влияние шума или выбросов и повышая точность отслеживания MedianFlow подходит для сценариев, где объект движется плавно, и его форма относительно стабильна. Он может быть эффективен в приложениях, где не требуется высокая точность отслеживания, но важна надежность и скорость работы В OpenCV трекер MedianFlow представлен функцией cv2 TrackerMedtanFlawf) или cv2 TrackerMedxmFla>v_createO Эта функция предоставляет простой интер- фейс для интеграции трекера MedianFlow в приложения на основе компьютер- ного зрения Методы,используемые этим трекером, позволяют справляться с не- большими изменениями в положении и форме объекта, что делает его подходя- щим для определенных видов задач отслеживания объектов в видеопотоке Трекер MOSSE (Minimum Output Sum of Squared Error) это алгоритм от- слеживания объектов, который работает на основе корреляции шаблона Он ис- пользует адаптивные фильтры для обновления шаблона объекта и вычисляет корреляцию между шаблоном и текущим кадром для определения положения объекта Принцип адаптивных фильтров, используемых в алгоритме MOSSE, заклю- чается в обновлении шаблона объекта с учетом изменений в сцене На первом кадре изображения выбирается шаблон объекта, который представляет собой не большой фрагмент изображения (например, ROI), содержащий объект, который нужно отследить Затем адаптивные фильтры используются для обновления шаблона объекта на каждом повета кадр сучетом изменения в положении и внеш нем виде объекта в последующих кадрах Это позволяет алгоритму сохранять актуальный шаблон объекта даже туи изменяющихся условиях сцены После об новления шаблона объекта алгоритм вычисляет корреляцию между обновлен ным шаблоном и текущим кадром твображения Корреляция позволяет выявить степень схожести между шаблоном и частью изображения на текущем кадре что помогает определить положение объекта. MOSSE подходит д ля сценариев, где требуется высокая скорость отслежи гания объекта, но не обязате ъ. Он может эффективно рабо тать в реальном времени и подходит для приложений, где объект движется до статочно плавно и форма объекта относительна стабильна
Этот трекер обеспечивает простои интерфейс для быст ккивания объекта в видеопотоке, что делает его подхо х сценариев, где важна скорость отслеживания при от iltiple Instance Learning) представляет собой алгоритм отеле скованный на методе множественного обучения В контек сге отслеживания объектов, MIL рассматривает объект как совокупность «су мок» (instances) подобных областей изображения Обучение происходит на уровне этих сумок, что позволяет алгоритму учитывать изменения внутри Метод множественного обучения представляет собой разновидность обуче ния с учителем, где обучающие примеры представлены в виде сумок (bags) вме сто отдельных экземпляров В каждой «сумке» содержится набор объектов и каждая сумка имеет метку класса (положительная или отрицательная) Целью алгоритма MIL является нахождеие гипотезы, которая может кпассяфициро вать сумки в соответствии с метками класса, присвоенными им Примеры, используемые в MIL, называются «сумками»' (bags), потому что предполагается, что каждая «сумка» содержит хотя бы один положительный пример, тогдакаж отрицательные примеры могут быть в сумке или отсутствовать вовсе Этотподаодособенно полезен в ситуациях, когдаданиые не содержат точ- ных меток для каждого отдельного экземпляра, но имеют только общие метки для группы экземпляров В контексте отслеживания объектов, метод множественного обучения MIL используется для рассмотрения объекта как набора «сумок» изображений, что позволяет учитывать изменения внутри объекта и повышает устойчивость алго- ритма к различным условиям сцены Трекер MIL подходит для сценариев, где объект может менять свою форму или частично перекрываться другими объектами Он обеспечивает некоторую степень инвариантности к форме объекта, что делает его полезным в условиях переменного окружения В OpenCV функция, реализующая трекер MIL, предоставляется как cv2 TrackerMIlf) или cv2 Trackeri£IL_create() Этот трекер предоставляет сред ства для обучения на основе множественного обучения и отслеживания объектов в видеопотоке Отметим, если при запуске программы с применением трекеров появляется ошибка отсутствия модуля трекера, то следует установить дополнительные мо дули в библиотеку OpenCV pip install openev-contrib-python. Рассмотрим реализацию отслеживания объекта на примере Напомним что выше мы произвели подготовку изображения (фильтрация преобразова ния цветовых пространств), а также мы позаботились о выделении области ин тереса ROI Теперь применим к этой заготовке метод отслеживания В качестве примера выбран метод трекинга KCF
Здесь пользователь выбирает прямоугольную область на первом кадре для отслеживания объекта rot = cv2 selectROl(frame,franCenter=False) Трекер инициализируется с текущим кадром и выбранной областью tracker tntt(frame, гея). Это стандартная процедура инициализации трекера в OpenCV Далее в бесконечном цикле происходит захват новых кадров ret frame - cap readfi. Трекер обновляет координаты объекта в каждом новом кадре success rat = tmckerjjpdate(frame) Полученные координаты объекта используются для отрисовки прямоуголь ника вокруг объекта с>2 rectanglefframe (х у), (х + w,y +h), (0,255,0), 2) Отображается текущий кадр с нарисованным прямоугольником cv2 tmshaw( Otslejivanie frame) Уточним tracker updatefframe) это вызов метода для обновления состоя ния трекера с использованием нового кадра вв видеопотока Этот метод прини мает текущий кадр и возвращает два значения
вом кадре success будет True В противном случае, если трекер не смог наити объект success будет False Заметим чтоб сменить алгоритм трекиша, в данной программе достаточно за Это удобно для анализа и выбора алгоритма отслеживания Однако некого рые трекеры требуют некоторого дополнительного вмешательства Кроме того некоторые из трекеров могут отсутствовать в той или ияои версии библио теки OpenCV В этом случае необхода Результат работы программы отели е.ся к документации библио (движущегося объекта представ Если на экране появляется более одного объекта и задача их отслеживать применяют мульти трекер В библиотеке OpenCV предоставляет удобный инструмент для од новременного отслеживания нескольких объектов в видеопо токе (cv2JlSuitiTrackerf) иля cv2JHultiTrackerj:reateO). В видеопотоке может быть несколько объектов, которые вы хотите отеле живать одновременно, например, несколько автомобилей на дороге или не сколько лиц в толпе Мульти трекер обеспечивает возможность надежного
друг другаиз ЗЬ4 Еще одним преимуществом мульти трекера является его гибкость вы мо жете легко добавлять или удалять объекты ж отслеживания по мере необходи мости Это особенно полезно, когда, объекты входят или покидают кадр Кроме того мульти трекер позволяет применять различные алгоритмы тре книгах разным объектам Например, вы i автомобилей и для лиц, что обеспечивав льзовать разные методы для гое и эффективное отслежи ванне в различных сценариях Таким образом, мульти трекер является удобным инструментом для обра ботки сложных сценариев, где требуется отслеживание нескольких объектов в видеопотоке 6.6. Анализ траекторий движущихся объектов Анализ траекторий движущихся объектов это этап в компьютерном зрении, который занимается изучением путей и маршрутов объектов, двигаю- щихся внутри определенной области интереса Когда мы рассматриваем движущиеся объекты, важно не только отслежи- вать их текущее положение, но и понимать, как они перемещаются со временем Этот процесс аналгва траекторий позволяет нам извлекать более высокий уро- вень информации из потока видеоданных Теория анализа траекторий может включать в себя несколько ключевых шагов 1 Сегментация траекторий В начале данные о движении объектов обычно представлены в виде последовательности координат в течение времени Сегмен- тация позволяет выделить индивидуальные траектории каждого объекта для бо- лее детального анализа. Давайте представим, что у нас есть видеозапись, на которой сняты даижу- щиеся объекты, например, автомобили на дороге Камера записывает коорди наты (х, у) этих автомобилей в каждый момент времени Получается набор дан ных, где для каждого кадра мы имеем информацию о том, где находится каждый автомобиль Теперь, если мы просто посмотрим на этот набор данных, он может выгля деть как одна большая куча чисел Сложно понять, какой автомобиль куда дви Вог где на помощь приходит «сегментация траекторий» Сегментация это процесс разделения большого набора данных на отдельные «сегменты» или «части» В нашем случае с траекториями автомобилей, сегментация позволяет выделить индивидуальные траектории для каждого автомобиля Теперь у нас есть информация о том, как каждый автомобиль двигается по дороге отдельно от других Пример понятен, если гредсгавигь, что у нас есть видео где несколько ма шин двигаются по дороге В начале видео мы видим только координаты но не
скорость направление и т д. Эго: । ер, для обнаружения ненор мального поведения транспортных средств или анализа трафика 2 Извлечение признаков После выделения траектории необходимо извлечь характеристики которые описывают их движение Это могут быть параметры такие как скорость ускорение, нал , повороты и т д Давайте представим, что у нас есть видеозапись с камеры, где сняты авто мобили на дороге После того, как мы сегментировали траектории (то есть выде лили каждую траекторию отдельно), нам нужно понять, как объекты двигаются какие у них есть особенности в этом движении Извлечение признаков это хак сбор ключевой информации о движении объектов Эта информация помогает тем лучше понять, как объекты ведут себя в пространстве Рассмотрим несколько примеров признаков Скорость говорит нам, насколько быстро двигается объект Например, мы можем измерить, сколько пикселей он проходит за секунду Ускорение показывает, насколько быстро объект ускоряется или замедля- ется Это может быть полезно для определения изменений в движении Направление движения говорит нам. в каком направлении движется объект Например, двигается ли он вперед, назад, влево или вправо Если объект поворачивается, мы можем измерить угол поворота и понять, как он изменяет свое направление 3 Кластеризация траекторий Так как в реальных сценах может быть много объектов, целью явля ется группировка схожих траекторий в кластеры Это помогает в понимании общих закономерностей движения Давайте представим, что у нас есть видео, где снимаются несколько машин, двигающихся по дороге Каждая машина создает свою собственную траекторию, то есть путь, по которому она двигается на экране В реальной ситуации может быть много машин, и все они двигаются по-разному Теперь, если мы хотим упростить анализ и понять, какие типы движений вообще присутствуют на дороге, мы можем использовать «кластеризацию тра екторий» Это как сортировка похожих траекторий в группы, или кластеры Простой пример представьте, что у нас есть три машины, движущиеся при мерно одинаково быстро и в одном направлении Такие траектории будут по хожи друг на друга Кластеризация помажет нам сказать «Вот группа машин которые двигаются одинаково» 4 Прогнозирование траекторий На основе изученных данных можно по пытаться предсказать будущиетраектории объектов Это полезно например для принятия решений в робототехнике или для обеспечения безопасности в авто номных транспортных средствах. Представьте что у вас есть видео, на котором записано движение машин по дороге Вы уже изучили, хак они двигаются в прошлом их траектории на предыдущих кадрах Теперь вы хотите посмотреть в будущее и предсказать как эти машины будут двигаться дальше
роге в течение последних нескольких секунд, мы можем предположить что она, вероятно продолжит движение прямо ив будущем Это полезно в различных областях. Например, в робототехнике если робот изучил как объекты двигаются вокруг него, он может использовать эту инфор мацию чтобы предсказать, куда эти объекты, возможно, переместятся в следую щии момент времени Такие обоснованные решения згают роботу принимать более В области автономных транспортных средств (например, беспилотных автомобилей), предсказание траекторий также играет важную роль Напри мер если система видит, что впереди находится медленно двигающийся авто мобиль, она может предсказать, что этот автомобиль будет двигаться медлен но и в будущем, что позволит принять меры, чтобы избежать возможной аварии 5 Анализ аномалий Также важно выявлять аномалии в д вижении, такие как неожиданные изменения траектории, остановки или необычные ускорения Это может помочь а обнаружении нежелательных событий или поведения Представьте, что вы наблюдаете за движущимися объектами на дороге с по- мощью камеры или другого сенсора Вы записываете, как они двигаются неко- торые едут прямо, некоторые поворачивают, а «которые могут даже делать остановки Теперь давайте представим, что вы изучили данные о движении и научи- лись предсказывать, как эти объекты обычно себя ведут Но вдруг вы заме- чаете что-то странное, например, машина, которая внезапно резко изменяет свою траекторию, или объект, который внезапно останавливается без видимой при- Это и есть «аномалии в движении» необычные или неожиданные собы- тия в поведении объектов Анализ аномалий помогает выявлять такие странные ситуации, которые могут быть нежелательными или сигнализировать о проб- лемах Пример понятен, если мы представим себе стадо оленей, которые обычно двигаются в одном направлении Если внезапно один из оленей начинает бежать в противоположном направлении, этоможет быть аномалией что то необычное и неожиданное В реальной жизни анализ аномалий в движении может быть полезным например для обнаружения аварийных ситуаций на дороге, нежелательного по ведения в системах безопасности или для выявления необычного движения объ екгов в робототехнике Перейдем к примеру наязыке Python. Ниже предложен код программы ко торыи поможет понять движения объектов Для этого модифицируем код, рассмотренный ранее, следующим образом
Основной функционал программы включает в себя отслеживание движуще- гося объекта на видеопотоке с использованием трекера KCF Программа также сохраняет и отображает траекторию движения объекта на кадре Здесь применены следующие принципы и методы анализа движения объекта 1 Отслеживание объекта Программа начинает с выбора пользователем прямоугольной области (ROI), представляющей объект, который требу ется отследить Затем используется трекер KCF для отслеживания этой области на последуют 2 Извлечение координат объекта Координаты прямоугольной области представляющей объект, обновляются на каждом кадре вцдеопотока Программа использует эти координаты для отображения прямоуголь ника, представляю :объекта 3 Сохранение и визуализация траектории. Программа сохраняет коорди наты центра объекта ва каждом кадре в список trajectoiy Затем она нс пользует эти координаты для отображения траектории объекта на кадре
В программе переменная trqjectory=[] грхивводиг инициализацию списка для хранения координат центра объекта на каждом кадре Строки center_x = х + + w//2 и center_y = у + И//2 вычисляют координаты х, у центра прямоугольника После чего командой trajectory,append((centerх, cattery)) координаты центра добав ляются в список траектории Это позволяет далее обрисовать линию траектории движения между текущим и последующим кадром сч2 linetfratne trajectory^i 1 ] trajectoiy[i] (255,0,0), 2) Результаты работы такой программы представлены на рис 6 9 Рисунок 6 9 - Результат работы программы анализ траектории движения объекта Как видно, программа работает и демонстрирует стабильность удержания объекта в любых положениях и ориентации в пространстве Кроме того про грамма обрисовывает след траектории, который в дальнейшем может быть по лезным для анализа, :объекта Практическое задание Задание 1 Повторите текст программы из раздела 6 4 Фильтр Калмана Из мените параметры которые рекомендуются для корректировки работы фильтра Настроите оптимальную работу фильтра Калмана для отслеживания выбранной динамической сцены
зультаты зайбэти в сравнительную таблицу Трекер 1 Трекер 2 Трекер 3 удержаний при треске Стабильность с частотой 3-4 Гц потом объекта 10.5 с! удержание при потер* объекта 1 с И . П 1 удержания при перекрытии объекта Каждом трекеру присвойте свой балл стабильности от 0 до 10 Сделайте это максимально субъективно В конце напишите вывод Задание 3 Повторите текст цюграммы, предложенной ниже, на компью тере Запустите ее и проанализируйте ее работу Опишите функционал работы программы Замените предложенные трекеры и повторите процедуру Обратите внимание на то, как замена влияет на работу программы ROI
Задание 4* Напишите программу для отслеживания объекта на видео по лученного с 1УПР1 камеры микроз зуйте трекер CSRT и KCF Сравните производительность и устойчивость удержания двух алгоритмов Задание 5* Напишите программу для отслеживания объекта на видео по лученного с МИ камеры микрокомпьютера. Используйте трекер CSRT или KCF Организуйте автомг юдом в зависимости от положения объекта на экране. Используйте библиотеку работы с дискретными портами
Г РАС ПОЗНАВАНИЕ ОБЪЕКТОВ: КЛАССИЧЕСКИЕ МЕТОДЫ 7.1. Введение в распознавание объектов Распознавание объектов это одна® ключевых задач компьютерного зре ния целью которой является определение, какие объекты присутствуют на изоб ражении или видео, и, в некоторых случаях, где они расположены Это фунда ментальная задача, которая лежит в основе множества приложении, от систем безопасности и автономного вождения до медицинской диагностики и анализа изображений В отличие от простой классификации изображении, когда мы определяем, что изображено на картинке в целом (например, кошка или собака) распознавание объектов требует более детального анализа, включая локализа- цию объектов на изображении и их классификацию по типам Традиционные методы распознавания объектов, разработанные до широ- кого распространения глубокого обучения, часто опираются на ручное констру- ирование признаков и использование классификаторов, которые обучаются на основе этих признаков. Признаки, или дескрипторы, представляют собой важные характеристики объектов, которые позволяют их различать, опираясь на такие свойства, как форма, текстура, цвет и другие визуальные особенности Примеры таких признаков включают в себя выделение краев, углов, текстурных градиен- тов, а также более сложные характеристики, такие как гистограммы ориентиро- ванных градиентов (HOG) или признаки Хаара. Параллельно с этими подходами, существуют методы распознавания, основанные из сопоставлении с шаблонами В отличие от методов, основанных на признаках, сопоставление с шаблонами не требует предварительного определ синя дескрипторов объекта, а основывается на непосредственном сравнении всего изображения или его фрагмента с заранее определенным шаблоном при помощи корреляционных принципов Эго озна- чает, что вместо анализа отдельных характеристик, сопоставляется вся структура или выделенная область объекта. После извлечения признаков следующим шагом является обучение класси фикатора. Классификатор это алгоритм, который, получив на вход вектор призна ков определяет, к какому классу относится данный объект Классические ме тоды используют различные ал такие как метод опор ных векторов (SVM), метод к ближайших соседей (к NN), случайный лес или алгоритмы бустинга, такие как AdaBoost Эш алгоритмы обучаются на наборе размеченных данных, где для каждого объекта указано, к какому классу он отно сится Обзор традиционных мет< сколько ключевых этапов Пер >аиия объектов включает в себя не тяется предобработка изображении которая может включать в себя ®менение размера, нормализацию удаление
ощв нас объекты После этого происходит обуче которые ние классификатора на размеченном наборе данных, чтобы модель могла пра вильно определять тип объекта. Инаконец классификатор используется для рас познавания объектов на новых, невидимых ранее изображениях Одним из важных классических методов является использование дескрип торов на основе традиеитов, таких как HOG Они опираются на анализ градиен тов яркости пикселей и позволяют описывать форму объектов Другой подход использует текстурные признаки, такие как фильтры Габора, которые позволяют выделять текстуры на изображениях. Алгоритмы бустияга, такие как AdaBoost позволяют объединять слабые классификаторы в более мощный и точный Все эти методы, хотя и уступают в точносгиметодам глубокого обучения, до сих пор представляют интерес благодаря своей вычт претаруемости юсгиииягер В настоящее время, несмотря на доминирование методов глубокого обуче- ния, классические методы распознавания объектов все еще находят свое приме- нение в различных задачах Эго особенно актуально в тех случаях, где требуется высокая скорость вычислений или когда жт большого количества размеченных данных для обучения сложных глубоких нейросетей Классические методы, будь то основанные наручном конструировании признаков с последующей классифи- кацией или на сопоставлении с шаблонами, предлагают альтернативные под- ходы с меньшими вычислительными затратами и зачастую с достаточной точно- стью для конкретных применений Кроме того, понимание принципов работы этих алгоритмов от выделения признаков до корреляционного сравнения шаб- лонов помогает глубже понять, хак вообще работает распознавание объектов, н может быть полезно для разработки более эффективных и надежных систем, а также для задач, где необходим а интерпретируемость решения Методы с при- знаками предоставляют интерпретируемые дескрипторы объектов, а методы со- поставления шаблонов хорошо работают в условиях, когда объект имеет четко определенную форму и когда не требуется устойчивость к значительным изме нениям освещения, ракурса и масштаба. 7.2. Поиск объектов с помощью сопоставления шаблонов В мире компьютерного зрения, где машины учатся «видеть» и понимать изображения возникает множество интересных задач Одной из базовых и в то же время очень полезных задач является поиск объектов Представьте себе что у вас есть фотография какой то сцены, вам нужно найти наней конкретный пред мет например логотип компании, определенный тип автомобиля или даже лицо знакомого человека Для; тли можно использовать метод кого рыи называется «сопоставление шаблонов» или «шаблонный поиск»
(шаблона) боны "Этот метод основывается на сравне нии шаблона с разными участками исходного изображения Представьте что вы наложили прозрачный шаблон на исходное изображение и сдвигаете его по всему изображению На каждом шаге вы смотрите, насколько шаблон похож на то что под ним находится Если есть совпадение, значит, шаблон «найден» Для того чтобы компьютер мог сравнивать шаблон с изображением ему нужно использовать какой то метод «твмерения» сходства Наиболее распро страненные методы это равнение из пикселям То есть компьютер смотрит на значения яркости каждого пикселя шаблона и сравнивает их со значениями яр кости пикселей соответствующего участка твображеяия Чем больше совпаде нии тем выше сходство При сравнении используется не просто разница значении, но и различные математические функции, которые позволяют учесть некоторые особенности изображений, такие как яркость, контрастность нт д, Например, метод норма лизоваиной корреляции используется для того, чтобы сравнение было более устойчивым к изменениям освещения Корреляции в данном контексте это по- казатель того, насколько похожи друг на друга сравниваемые области изображе- ния Другие методы, такие как суммы квадратов разностей, ориентированы на нахождение точных совладений, но более чувствительны к шуму Функция cv2.matcKTempiateO, которая предоставляется библиотекой OpenCV, реализует этот процесс Она принимает на вход исходное изображение, шаблон и один из методов сравнения На выходе она возвращает матрицу, в ко- торой значения соответствуют степени сходства шаблона с каждым участком ис- ходного изображения Эта матрица показывает карту соответствия шаблона в изображении После получения карты соответствия нужно обработать результаты, чтобы найти местоположение объекта Обычно, это делается путем поиска максимумов на карте Чем больше значение, тем больше сходство между шаблоном и тем участком изображения, который ему соответствует Именно этот участок и будет считаться «найденным» объектом Однако шаблонный поиск не является идеальным решением и имеет свои ограничения Он хорошо работает, когда искомый объект имеет четкие контуры и не меняет свой размер, ориентацию или освещение Любые изменения в мае штабе повороте или освещении могут привести к тому, что шаблон не будет найден Поэтому в реальных задачах перед не часто требуется предобработка изображений. : шаблонного поиска Тем не менее шаблонный поиск остается очень полезным инструментом в компьютерном зрении Он применяется в различных областях от контроля качества в производстве до автомапвировагшого поиска объектов на изображе ниях и видео Простота и эфе I его популярным и базовым ме годом который важно знать каждому, кто изучает компьютерное зрение Сопоставление шаблонов является лишь одним из множества методов при меняемых для решения задач поиска объектов В дальнейшем мы изучим более
Теперь когда у нас есть общее понимание шаблонного поиска давайте углубимся в детали и рассмотрим методы, которые применяются в функции cv2 matchTemplate() Эти методы определяют, как именно происходит сравнение шаблона с исходным изображением. Методы сравнения в cv2 matchT&nplateO ] Сумма квадратов разностей (cv2 TM_SQDIFF) этот метод вычисляет ями пикселей шаблона и соот сумму квад ветствующей области изображения Для каждой пары пикселей разница их значений возводится в квадрат, н затем все квадраты суммируются Результатам явг которое характеризует сте пень несовпадения чем меньше эта сумма, тем выше сходство между шаблоном и исследуемой областью изображения Важно отметить, что метод cv2 TMJ5QDIFF не является нормализованным, поэтому он чув ствителен к изменениям яркости изображения 2 Нормализованная сумма квадратов разностей (pv2 TM_SQDIFF_NORMED) I cv2 TMSQD1FF После вычисления является: суммы квадратов разностей, результат дополнительно делится на произ- ведение норм вектора значений пикселей шаблона и вектора значений пикселей исследуемой области изображения Такая нормализация делает метод более устойчивым к изменениям яркости и контрастности, так как снижает влияние абсолютных значений интенсивности пикселей Как и в случав с cv2.TM_SQDlFFy наименьшее значение свидетельствует о наилучшем соответствии 3 Кросс-корреляция (cv2.TM_CCORR) метод, использующий операцию кросс-корреляции, которая вычисляет меру сходства между двумя сигна- лами В контексте изображений это означает скалярное произведение между вектором значений пикселей шаблона и вектором значений пик- селей исследуемой области изображения Положительные высокие зна- чения указывают на наличие схожих структур Важно, что данный метод в отличие or cv2 TM_SQDIFFy максимизирует результат и не нормализо ван, поэтому по; । в освещенности Нормализованная кросс корреляция (св2.ТМ_CCOBF._NORMELi) является нормализованной версией метода cv2TM_CCORR После вычисления кросс корреляции результат делится нс произведение нэрм векторов значении пиксе леи шаблона и области изображения. Такая нормализация привод ит к тому что метод становится более инвариантным к вменениям яркости и контрастности Наивысшее значение на карте сопоставления соответствует наилучшему совпа дению Коэффициент корреляции (cv2 TM_CCOEFF) вычисляет коэффициент кор реляции Пирсона меящу вектором значений пикселей шаблона и вектором зна чениипикселей области изображения. Коэффициент корреляции является стати стическои мерой линейной взаимосвязи между двумя переменными В этом
яркости Нормализованный коэффициент корреляции (cv2 TM_CCOEFF_NORMED) представляет собой нормализованную версию метода cv2 TM_CCOEFF После вычисления коэффициента корреляции результат масштабируется что делает метод более устойчивым к изменениям контраста и яркости Нормализованный коэффициент корреляции принимает значения от 1 до 1, где 1 соответствует полному совпадению, 0 отсуз полной аитикорреля Ниже представлен пример реализации программы поиска объектов с помо тцью сопоставления шаблонов image cv2 iiare«d( Donetsk.jpg', cv2.INREAD_CODOR) (image, cv2.COCOS BGR2GRAY) CVZ IN_CCOBFF_NORMEI>| Эта программа предназначена для поиска определенного объекта на изобра женин города Донецка, используя метод шаблонного сопоставления Сначала протрамма загружает два изображения: Dcnetskjpg, представляющее панораму города nShablon jpg, представляюторе шаблон объекта (здания) который нужно наити (рис 7 3) Далее, для упрощения вычислений и повышения точности оба изображения конвертируются из цветного формата в оттенки серого
Затем программа функцию cJ2JnatchTsmplats() с методом cv2 TM_CCOEFF_NORMED, который вычисляет нормализованный кооффици ент корреляции между шаблоном и разными областями панорамы Результатом является карта, где каждое значение показывает степень сходства шаблона с со ответствующей областью панорамы Функция находит коорди- наты точки на карте результатов, где сходство наилучшее (максимальное значе- ние для этого метода корреляции). Используя координаты наипучшего соответствия, программа определяет верхний левый угол найденного объекта на панораме Затем, используя ширину ивысоту шаблона, программа вычисляет координаты нижнего правого утла Эти координаты необходимы для отрисовки прямоугольника, который выделит найденный объект наизображеиии Донецка Прямоугольник будет нарисован зе- леным цветом с толщиной линии 2 пикселя Наконец, тфограмма отображает результирующее изображение в окне с названием "Res" (рис 7 2)
будет выдЕЙййЬзёлевым прямоугольником. Этот процесс позволяет визуально подтвердить успешность поиска объекта и его расположение на панораме го Важно понимать, что данный метод шаблонного сопоставления не ограни чивается статическими изображениями. Он также может применяться для поиска объектов на видеокадрах Представьте, что вместо Dcnetskjpg мы имеем после довательность кадров видео В этом случае, программа может последовательно обрабатывать каждый кадр, выполняя ту же операцию поиска шаблона Таким образом изображение Shablon.jpg,x0topoe мы использовали как шаблон может использоваться для поиска объекта на з отслеживать перемещение этого объекта в видеозаписи Такой подход открывает возможности для различных приложении, таких как отслеживание объектов в движении, автоматизированный анализ видео и распознавание элементов на видеопотоке Заменяя статичное изображение па иорамы на каждый кадр видеопотока и обрабатывая каждый кадр по описанному алгоритму, мы получаем возможность динамического поиска объекта, выделяя его положение на кажд ом кадре видео 7.3. Признаки Хаара Признаки Хаара (Haar-like features) это набор простых прямоугольных признаков, используемых в компьютерном зрении для описания изображений Они были впервые предложены Полом Виолой и Майклом Джонсом в их работе по распознаванию лиц и стали ключевым элементом алгоритма каскадов Хаара, который до сих пор широко применяется в различных приложениях Признаки Хаара основаны на идее вычисления разницы мевду суммой пик- селей в разных прямоугольных областях изображения Эти прямоугольные обла- сти мотут быть расположены горизонтально, вертикально или под углом друг к другу На практике используются различные типы признаков Хаара, но их объ- единяет один общий принцип вычисление разницы между суммами пикселей в соседних прямоугольниках Для полного: i Хаара необходим рассмотреть, исходит распознавания того или иного объекта изображении Для этого используются признаки Хаара (также их называют окнаХа фильтры Хаара) Признаки Хаара представляют собой окна различных pi и форм которые перемещаются по изображению Эти признаки представляют собой простые шаблоны, которые измеряют различия в яр1 ними областями изображения Примерами прзвнаков Хаара угольные окна, покрывающие области с разными сочетаниями светлых и темных пикселей (рис 7 3)
Алгоритм Хаара использует этот набор прямоугольных черно белых обла стей, называемых фильтрами Хаара, которые представляют собой шаблоны для выявления текстур и форм объектов на изображениях При сканировании изоб ражения каждый фильтр Хаара оценивает сходство текущей области с образцом, представленным фильтром Затем для каждой области изображения алгоритм вычисляет разницу между суммой яркостей пикселей в белой и черной областях фильтра, формируя признаки для определения объектов Применяется пороговое значение, чтобы определить, является ли область объектом интереса Области, которые превышают порог, считаются объектами и объединяются для получения более точной информации о расположении и форме объекта Для выделения, например, человеческого лица (рис 7 4) с помощью алго- ритма Хаара, можно использовать различные признаки, которые характеризуют Глаза Глаза обычно представляются как относительно темные области в верхней части лица с более светлой областью вокруг них Фильтры Хаара могут обнаруживать глаза по наличию вертикальных границ между более светлыми и темными областями
более светлой областью над носом и более темной областью под носом Также по всей длине носаверт темные части , апо бокам от носа вертикальные Рот Рот обычно представлен яркой областью ниже носа Фильтры Хаара могут выявлять рот по наличию гортонгальной границы между более светлой областью над ртом и более темной областью под ртом Брови Брови обычно представлены темными областями над глазами Филь тры Хаара могут выявлять брови из наличию горизонтальной границы между более темной областью бровей и более светлой областью лба Лицевые контуры Контур лица может быть выделен с помощью фильтров которые обнаруживают границы между лицом и фоном, например, границы между лицом и волосами или между ляпом и шеей На рисунке 7 5 приведен пример распределение фильтров Хаара на изобра женин с лицом Представьте, что у нас есть фильтр Хаара, который представляет собой пря моугольную область Этот фильтр выде светлый участок соответствующий глазам, и более темный участок ниже, который соответствует нижней части глаза. Когда этот фильтр применяется к изображению лица, он скользит по изображению, и для каждой области вычисляется разница между суммой яркостей пикселей в черных и белых областях фильтра. Если область со держит глаза, то разница в яркости между верхней и иижнеи частями области будет заметной Верхняя часть обычно светлее из за белка глаза или выпуклости глазного яблока, а нижняя темнее из за теней под глазами и глазной впад ины Это приводит к высокому значению пршнака для этой области, что может быть интерпретировано алгоритм ом как жличие глаза. Таким образом фильтры Хаара, анализируя различия в яркости в разных частях области могут помочь выявить особенности, характерные для лица чело века такие как глаза, брови иное
ловила облбйтй'бветлее, а^нижияя половина темнее. Однако в реальных изобра жениях мы редко встречаем такую четкую структуру из за различных факторов таких как освещение тени, шум и другие артефакты Поэтому на реальных изоб ражениях фрагменты, обнаруженные с использованием фильтра Хаара, могут иметь более сложные и менее четкие структуры, чем идеальные примеры При мер идеального и реального фрагмента глаза, обнаруженного на изображении представлен на рис 7 6 Рисунок 7 6- Идеальные и реальные значения, полученные фильтром Хаара После получения областей с помощью фильтра Хаара, одним из способов определения наличия объекта в области является вычисление разницы в яркости между черной (темной) и белой (светлой) частями области Для этого можно вы- полнить следующие шаги 1 Вычислить среднее значение яркости пикселей в белой области 2 Вычислить среднее значение яркости пикселей в черной области 3 Вычесть значение средней яркости белой области из значения средней яркости черной области Математически это выглядит так. Д= white - dark = где /(x) яркость пикселя, п общее число пикселей в области. В идеальном случае (рис 7 6, о) эта разница равна 255 В реальном же слу чае в нашем примере 218,75 - 98,75 = 120 Чем ближе полученный результат к числу 255, тем больше вероятность того что был обнаружен интересующий нас объект (в данном примере глаз) Также становится понятным, что мы никогда не получим 0, потом что мы имеем дело с реальным изображением, в котором чер: со значением 0 и белые со значением 255 в такой плотной компоновке. не встречаются
Этот метод является одним из подходов к определению наличия объекта и может быть использован вместе с другими методами для улучшения точности обнаружения Одним из главных преимуществ алгоритмаХаара является его вычислитель ная эффективность Простота прттаков Хаара и использование интегрального изображения позволяют быстро вычислять значения признаков, что делает его г реальном времени Это особенно подходящим для Пр! важно в сценариях, где требуется высокая скорость обработки, например в си сгемах видеонаблюдеиия или робототехнике. Кроме того, каскадная структура классификатора, обучаемого на основе признаков Хаара, позволяет отсеивать большую часть фоновых областей ж ранних этапах, дополнительно повышая скорость работы алгоритма. Еще одним плюсом является относительно яеболь шое количество обучающих данных, необходимых для создания работоспособ кого классификатора, что делает его более доступным для использования в уело виях ограниченных ресурсов Основным недостатке*! алгоритма Хаара является его ограниченная способ- ность к обнаружению сложных объектов Поскольку признаки Хаара основаны на простых прямоугольных шаблонах, они могут быть неэффективными при распо- знавании объектов со сложной формой, текстурой или переменными условиями освещения Кроме того, алгоритм Хаара может быть чувствителен к поворотам и масштабированию объектов, что требует дополнительной обработки Также сле- дует отметить, что алгоргггм каскадов Хаара, хотя и эффективен для задач обна- ружения объектов, может уступать по точности более современным методам глу- бокого обучения, особенно при распознавании сложных и многовариантных объ- ектов Поэтому выбор алгоритм а Хаара может быть нецелесообразным при необ- ходимости высокой точности и надежности в сложных условиях 7.4. Применение каскадов Хаара Алгоритм каскадов Хаара, основанный на признаках Хаара, зарекомендовал себя как эффективный и достаточно быстрый метод для обнаружения объектов в компьютерном зрении Его прэ ' широкий спектр задач простых систем распознавания лиц до более сложных приложений в области без опасности и робототехники В этом разделе мы рассмотрим основные области применения каскадов Хаара, а также приведем конкретные примеры и покажем как этот алгоритм может быть использован на практике Одним из основных методов распознавания объектов в библиотеке OpenCV является использование каскадов Хаара. Этот метод основ ан на поиске характер ных признаков объекта на изображении, таких как края, углы или текстуры 'аарапрет которые обучаются на большом количестве положительных и отрицательных примеров объектов
чает 2 себяЧй^ющие шали' 1 Загрузка изображения или видеопотока с камеры 2 Преобразование изображения в формат, подходящий для обработки 3 Применение классификатора или модели, обученной на определенном типе объектов 4 Обнаружение объектов на изображении или ввдео 5 Отображение результатов распознавания, например, путем обведения обнаруженных объектов прямоугольниками или другими маркерами 6 Дополнительная обработка результатов, если это необходимо, например определение дополнительных характеристик объектов или их классифи кадия В результате успешного распознавания объектов можно получить ияформа дню о их положении, размере, форме, а также сделать выводы о том, какие объ екты присутствуют на изображении или в видеопотоке Для использования классификатора Хаара в OpenCV сначала нужно загру- зить предварительно обученный классификатор с диска или из библиотеки OpenCV, азатем применить его к изображению или кадру видео Этот процесс может быть выполнен с помощью функции detectMuItiScaleO Эта функция поз- воляет обнаружить объекты различного размера на изображении После применения классификатора на изображении мы получаем коорди- наты (х, у, w, й) прямоугольника, который описывает обнаруженный объект Здесь (х,у) это координаты верхнего левого угла прямоугольника, a (w, й) его ширина и высота соответственно Ниже рассмотрим пример программы применения алгоритма Хаара, кото- рый обнаруживает лицо человека на изображении
ружения лйЩ -считывает изо б, использует классификатор дл> жения лиц программа отрисс женного лица и выводит полу» Остановимся на отдельных строках программы Строка ет его в оттенки серого затем та изображении После обнару ники вокруг каждого обнару : с прямоугольниками на экран инициализирует переменную face cascade, используя предварительно обучен ныи классификатор для обнаружения лиц Она объединяет путь к каталогу с предварительно обученными моделями каскадов Хаара (cv2 data haarcascades) с именем файла XML для обнаружения лиц в передней части (haarcascade frontalfacejlefaultaxnl'). То есть данный классификатор обучен распознавать лица, находящиеся в положении, котда они повернуты к камере лицом, а не в профиль или в других нестандартных позах В каталоге cv2 data-haarcatcsdzs обычиэ содержатся несколько предвари- тельно обученных моделей каскадов Хаара для обнаружения различных объек- тов Наиболее распространенные модели включают в себя haarcascade eyexml модель для обнаружения глаз, haarcascade Jrontalface_altxmk вариант модели для обнаружения лица пе- редней позе (альтернативный); haarcascade _smilexml модель для обнаружения улыбок, haarcascade jtpperbodyxml модель для обнаружения верхней части тела, haarcascade ftdlbodyxml модель для обнаружения полного тела, haarcascade pro fileface xml мод ель для обнару жения лиц в профиль, haarcascade eye_tree_eyegjassesxml модель для обнаружения глаз с оч- ками Стоит заметить, что это далеко не полный список моделей, представленных в каталоге cv2 data haarcascades Результат выполнения такой программы наказан на рис 7 7 энаружение объектов на изображении с использованием класси кадов Хаара, который был предварительно обучен для обнаружения изображение в оттенках серого, на котором мы ищем объекты егр scaleFa , насколько изображение шаге при масштабировании изображения для поиска
действительным Увеличением фильтрации объектов умении юдиг к более консервативной ых срабатывании Рисунок 7 7- Результат работы программы обнаружения лиц на изображении В заключение можно отметить, применение каскадов Хаара демонстрирует высокую эффективность в задачах обнаружения объектов, особенно в реальном времени Простота и быстродействие алгоритма делают его подходящим для си- стем видеонаблюдения, анализа потоков видео н мобильных приложений Од- нако ограниченная способность к распознаванию сложных объектов и чувстви- тельность к изменениям освещения и положения объекта требуют дополнитель- ного рассмотрения при выборе алгоритма для конкретной задачи Практическое задание Задание 1 Разработайте программу, которая позволит использовать сохра ненныи фрагмент своего лица как шаблон (например, область глаза) а затем находить этот шаблон на видеопотоке с веб камеры, выделяя найденный фраг мент прямоугольником, при этом необходимо продемонстрировать работу про граммы с различными метод на результат t и проанализировать их влияние Задание 2 Повторите текст программы, предложенной в разделе 7 3 на ком пьютере Подключите другие модули обтаружения объектов на изображении Адаптируйте программу та i в качестве исходного изображения был видеопогок с веб камеры. Исследуйте работу всех функции в программе
। предварительно обученных личные клаййж^йкаторы Хаара. Загрузите несколько классификаторов (например, для глаз, улыбок, тел людей) и напишите про грамму которая последовательно применяет их к изображению или кадру видео Отобразите результаты, выделяя каждый тип обнаруженного объекта разными цветами или маркерами Проанализируйте, как разные классификаторы рабо тают на одном и том же изображении и какие типы объектов они могут успешно обнаружить Задание 4 Проведите эксперимент с параметрами функции detectMuitiScale( используемой для обнаружения объектов Загрузите изображение или видео и используя один из классификаторов, изменяйте значения параметров scaleFactor, т iriNeighbors, mmScze и macSee. Наблюдайте и записывайте, как ме няется количество и качество обнаруженных объектов при изменении каждого параметра. Сделайте выводы о том, какие параметры наиболее важны для успеш ного обнаружения и как их м ажно настроить для достижения наилучших резуль татов в конкретных условиях Задание 5 Используя Python и OpenCV, создайте программу, которая захва- тывает ввдеопоток с веб-камеры, выполняет поиск объектана основе заданного пользователем шаблона, отображая рамку вокруг найденного объекта, после об- наружения и нажатия клавиши, переключается в режим отслеживания объекта с помощью, выбранного пользователем трекера, перемещая рамку отслеживания по мере движения объекта
8. ГЛУБОКОЕ ОБУЧЕНИЕ И НЕЙРОННЫЕ СЕТИ 8.1. Основы нейронной сети 811 Нейрон от аналогии к техническому пониманию Представьте себе студентку Машу на лекции Преподаватель задал вопрос и Маше нужно быстро решить поднять руку и ответить или промолчать В реаль ности мозг Маши анализирует множество факторов, чтобы принять такое реше ние Но для простоты понимания представил ситуацию, будто бы у Маши был всего один единственный нейрон, который и решает, что делать Этот нейрон бу гвых факторов и на их основе тримет решение дет! Давайте посмотрим, как этот упрощенный мозг человека единственный нейрон справляется с задачей (рис. 8 1). Есть четыре фактора влияния, которые поступают в «мозг» Маши 1 Уверенность в ответе (xl). Насколько Маша уверена, что знает правиль ныи ответ'' Она может быть совершенно ие уверена ( 1), немного уверена (например, 0,2) или абсолютно уверена (1). 2 Желание ответить (х2) Насколько силы» Маша хочет проявить себя и ответить7 Если ей совсем не хочется отвечать, этот фактор близок к 0 а если очень хочется, то к 1 страх уменьшает ее желание отвечать, поэтому, если она совсем не боится то фактор равен 0, а если очень боится то 1 4 Реакция преподавателя (х4) Как часто преподаватель хвалит студентов за правильные ответы7 Если преподаватель «никогда ие хвалит» то этот фактор близок к 1 а если часто хвалит ток 1
веге может быть более важной чем желание ответить Каждому фактору Маша как бы присваивает свои «вес» (w), который показывает, насколько этот фактор влияет на ее решение 1 Вес уверенности (и7): wl = 0,7(для Маши важно отвечать правильно) 2 В ес желания участвовать (w2): w2 = 0,5 (Маша хочет быть активной на лекции) 3 Вес страха ошибки (м>3) юЗ = -0,6 (Маша не хочет ошибаться перед всеми) 4 В ес реакции преподавателя (w4) w4 = 0,3 (Маше приятно, когда прело даватель хвалит) Как Маша принимает решение? Сначала происходит взвешивание сигналов Маша подсознательно умно жает каждый фактор (х) на его вес (и): Уверенность xl wl Желание х2 ю2 Страх хЗ юЗ Реакция преподавателя х4 w4 Затем суммирование взвешенных сигналов теперь Маша подсознательно складывает все взвешенные сигналы Суммарный сигнал X- (х? w/) + (х2 w2) + (хЗ и»3) + (х4 w4) У Маши есть «порог» принятия решения, например, 0,3 Если суммарный сигнал больше 0,3, то она поднимает руку и отвечает Если суммарный сиг- нал меньше 0,3, то она промолчит (£ > 0,3 -> поднимает руку Z < 03 -+ промолчит Что происходит, если суммарный сигнал равен О.З'* В этом случае решение Машиможет быть неоднозначным Можно представить, что в этотмомеит Маша может случайно решиться ответить или, наоборот, промолчать, как если бы она подбросила монетку Рассмотрим два сценария работы описанного случая Сценарии 1 Маша уверена и готова ответить. xl —0,9 (очень уверена), х2 - 0 8 (очень хочет ответить), хЗ - 0 2 (немного боится ошибиться), х4 - 0 7 (преподаватель часто хвалит), Е-(0 9 07)+ (0,8 0,5)+ ( 0,2 0,6)+ (0,7 0,3)-0,63 + 04+0 12+021 - - 1 36 Так как 1 36 больше 0,3, Маша поднимает руку и отвечает
xl - O’S (Й& уверен- x2 - 0 3 (желание ответить невелико), хЗ - 0 7 (сильный страх опшбиться), х4 - 0 3 (преподаватель редко хвалит), Е-(0 6 0 7)+ (0,3 0,5)+ ( 0,7 0,6) + ( 0,3 0,3)- 0,42 + 0 15 + 0 42 0 09 - 0 06 Так как 0 06 меньше 0,3, Матане поднимает руку и молчит Вернемся к неопределенности, котда S - 0,3 В реальности для принятия окончательного решения мозг Маши может задействовать дополнительные нейроны которые обрабатывают другие факторы и сигналы В биологических нейронах, а также в некоторых математических моделях, при равенстве порогу могут происходить дополнительные процессы, которые окончательно опреде ляют результат (активацию или нет) Для простоты понимания в нашем примере допустим существование второго неГгрона (рис 8 2) Этот нейрон принимает две величины на вход фактор внутреннего волне ния и выходную величину первого нейронау. Фактор внутреннего волнения (хЗ): насколько Маша взволнована в дан яый момент7 (От 1 спокойна, до 1 очень взволнована) Вес внутреннего вол нения (w3) w3 = 0,4 (Маша, скорее, не будет отвечать, если она волнуется) Нейрон 2 получает сигнал с суммарного сигнала нейрона 1 (который ра вен 0 3) + сигнал от внутреннего волнения Тогда суммарный сигнал второго нейрона 22 - 0,3 + (хЗ w5) Второй нейрона имеет порог 0,1 Если суммарный сигнал больше 0,1, второй нейрон сигнализирует «Лучше ответить» Если суммарный сигнал меньше или равен 0,1, второй нейрон сигнализи рует «Лучше промолчать»
не очень волнуется Выходная взве Выходная взг Так как 0 22 больше 0,1, следователь», Маша, поднимет руку и ответит Как видно, Маша принимает решение, как нейронная сеть, где первый нейрон оценивает основные факторы, автором помогает, если первый нейрон не уверен Разные уровни внутреннего волнения влияют на решение Маши, пока зывая, что даже в простых ситуациях есть много переменных, и принятие реше ний сложный процесс. Также из рассмотренного примера можно сделать вы вод чем больше нейронов, чем больше связей, тем большая точность ожидаемых результаты Теперь мы видим, как в примере с Машей, знакомые нам понятия «факторы влияния», «важность», «порог принятия решения» соответствуют техническим терминам «входные сигналы», «веса», «порог активации» Это по- может нам перейти к более глубокому и строгому изучению нейронных сетей 8.1.2. Искусственная нейронная сеть Теперь, когда мы рассмотрели, как работает искусственный нейрон на при- мере принятия решений студенткой Машей от «входных сигналов» и их «ве- сов» до «суммирования» и «порога активации» давайте посмотрим, как эта принципы применяются в мире компьютерного зрения В этой области нейрон- ные сети играют ключевую роль, являясь мощным инструментом для распозна- вания образов, классификации изображений и решения других задач, связанных с визуальными данными В основе любой нейронной сети лежит именно искус- ственный нейрон базовая вычислительная единица, вдохновленная работой биологического нейрона (рис 8 3) Нейрон получаетна вход данные (су) сигналы, представляющие, например значения пикселей изо др зтся на свой собственный вес (w,) Веса определяют, насколько важен каждый вход для результата аиало гично силе связи между биологическими нейронами Полученные взвешенные сигналы суммируются Эта сумма затем проходит через функцию активации Она определяет, «активируется» ли нейрон, то есть будет ли он передавать сиг нал дальше Функции активации могут быть различными и вводят нелинейность ькономерности. Некоторые из включают в себя сигмоиду в сеть что делает ее сг наиболее распростране фут ReLU (Rectified Linear Unit) и гиперболический тангенс Сигмоида часто исполь зуется в выходном слое для задач бинарной классификации (0 или 1) ReLU
конкретной функции активации зависит от типа задачи и архитектуры нейрон нои сети Нейрон выдает свой результат, который становится входом для других нейронов Рисунок 8 3 - Аналогия искусственного нейрона с биологическим нейроном Од иночный нейрон сам по себе мало что может Однако, когда нейроны со- единяются в сета, возникают удивительные возможности Нейроны организу- ются в слои На рис. 8 4 приведен пример нейронного слоя, состоящего из четы- рех нейронов Как видите, в этом слое каждый из четырех нейронов получает входные данные и передает свой результат дальше В ажно отметить, что в реаль- ных нейронных сетях слои могут содержать сотни или даже тысячи нейронов, что позволяет обрабатывать гораздо более сложные данные Влияние количества нейронов на работу нейронной сети существенно небольшие сети с ограничен ним количеством нейронов и связей могут быть эффективными для простых за дач, в то время как большие сети с большим количеством нейронов могут справ пяться со сложными завистшостямн в данных Однако чрезмерное увеличение может привести к переобучению, когда сеть «запоминает» обучаюлще данные, но не способна обобщать на новые Количество связей между нейронами также играет важную роль В так назы ваемых полносвязных сетях (или плотных сетях) каждый нейрон одного слоя со единен со всеми: что обеспечивает максимальную гибкость в передаче информации. Од нако это может быть ресурсозатратно осо бенно в сетях с большим количеством нейронов Существуют и другие типы свя зеи где нейроны связаны только с определенными соседями что позволяет со здавать сети более эффективно работающие с данными имеющими простран сгвенную структуру Выбор конкретной архитектуры нейронной сети с опре
Примером простой нейронной сети может быть сеть, состоящая из вход ного двух скрытых слоев и одного выходного слоя (рис 8 5) Входной слои при нимает исходные данные например, значения пикселей изображения Скрытые слои выполняют сложные преобразования входных данных, выявляя закономер ности и признаки Это «сердце» не^>онной сети. Чем больше таких слоев тем «глубже» сеть и тем более сложи внимание что на этом рисунке ти она может изучать Обратите । соединен с каждым нейроном
Входной сИЙ®'ь4ак правило, содержит столько жйронов сколько признаков имеет входной сигнал Как было отмечено ранее, скрытые слои могут иметь раз ное количество нейронов, в зависимости от сложности задачи, в то время как выходной слои может иметь один нейрон, если задача классификации имеет только два класса или несколько, если классов больше Выходной слои форми ру ет конечный результат например, категорию, к которой относится изображе ние (кошка собака, птица). Рисунок 8 S - Структура простой нейронной сети Каждый слой передает свои результаты следующему, позволяя сета по- этапно обрабатывать информацию Этот процесс напоминает обработку инфор- мации в биологическом зрении, где сигналы из сетчатки последовательно прохо- дят через несколько уровней нейронов в мозге, выделяя все более сложные при- знаки Идея нейронных сетей, хоть и выглядит современной, на самом деле заро далась еще в середине XX веха Первые модели, такие как персептрон, были про сты, но заложили основу для дальнейших исследований В 1980 х годах интерес к нейронным сетям возрос, но недостаток вычислительных ресурсов и эффектов ных методов обучения сдерживал их развитие. Настоящая революция произошла в начале XXI века Появление мощных компьютеров, больших наборов данных и новых алгоритмов обучения, в том числе обратного распространения ошибки позволило нейронным сетям достичь впечатляющих результатов Они стали ключевой технологией в машинном обучении и искусственном интеллекте в том числе и в компьютерном зрении. Почему нейронные сети так хорошо работают7 Во многом ответ кроется в их вдохновении биологией как в биологических, так и в искусственных сетях информация обрабатывается через взаимосвязанные узлы (нейроны) Аналогия искусственного и биологического иейрона представлена на рис 8 3 Информация проходит через ряд преобр од Обе системы оргаии
сетях эти связи представлены весами. Эти связи определяют как информация передается и обрабатывается Обе системы, биологические и искусственные стремятся извлечь смысл из данных, хотя механизмы и отличаются Конечно биологический мозг гораздо их нейронных сетей Однако сама идея обработки информации через сеть связанных элементов лежит в ос нове обоих подходов Это делает нейронные сети мощным инструментом для ре шеиия задач с которыми прекрасно справляется человеческий мозг, в частности в области компьютерного зрения Как нейронные сети «учатся» распознавать объекты на изображениях7 Как и биологические системы, они обучаются на основе опыта, то есть на основе данных Этот процесс обучения ключевой момент для понимания работы нейронных сетей в компьютерном зрении: в биологических нейронных сетях обучение происходит посредством изменения силы связей между нейронами (си иаптической пластичности) Нейроны, которые активируются вместе, усиливают свою связь, что позволяет мозгу запоминать и распознавать паттерны В искус- ственных нейронных сетях обучение происходит путем настройки весов связей между нейронами. Для этого используются алгоритмы, такие как градиентный спуск, который постепенно изменяет веса, чтобы минимизировать разницу между предсказаниями сеги и реальными ответами (ошибка), и обратное распро- странение ошибки, которое позволяет эффективно рассчитывать, как нужно из- менить веса в каждом слое сеги, чтобы уменьшить ошибку В обеих ситуациях (биологической и искусственной) обучение сводится к адаптации структуры сети к определенным паттернам, чтобы она могла эффективно обрабатывать дан- ные и давать нужные результаты В контексте компьютерного зрения это озна- чает, что сеть учится извлекать полезные признаки из изображений и правильно их классифицировать Как мы уже упоминали, и биологические, и искусственные нейронные сети могут строить иерархические представления информации Этот принцип крайне важен для понимания, хак сеги справляются со сложными задачами компьютер ного зрения в мозге информация обрабатывается на разных уровнях от воспри ятия простых черт (линии, края) до распознавания сложных объектов и сцен Аналогично глубокие нейронные сети используют многослойную структуру где ранние слои улавливают простые паттерны линии, края, углы, промежуточные слои выделяют более сложные элементы формы, текстуры, а поздние слои фор мируют представления о целых объектах и сценах Такой иерархический подход позволяет обеим системам биологической и искусственной эффективно ана лизировать и понимать сложную визуальную информацию В контексте компь ютерного зрения это означает, что нейронная сеть последовательно учится вы делять все более сложные и зтичимые пршвзки, которые позволяют ей распо знавать объекты на изображениях. И биологические, и искусственные нейрон ные сеги обладают способностью адаптироваться к новым ситуациям и данным биологический мозг постоянно адаптируется к новой информации и изменениям
для решения задач которые они раньше не видели Эта способность к адаптации является важным аспектом их работы, позволяя им пот вность об работки информации в различных условиях и с разными типами данных В ком пьютерном зрении например, сеть, обученная на одном наборе изображении может быть адаптирована для распознавания объектов в другом Несмотря на поразительное сходство, важно помнить, что искусственные нейронные сети это упрощлпия модель биологических Биологические сеги намного сложнее, динамичнее и обладают более широким спектром возможно стен чем самые современные иску сственпьге сети Биологические сети работают на основе сложных биохимических процессов, а искусственные на основе ма тематических вычислений Однако, несмотря на упрощения, искусственные нейронные сети пре достав ляют нам мощный инструмент для решения задач в области компьютерного зре ния, и понимание их принципов работы является важным шагом на пути к созда- нию более совершенных и интеллектуальных систем Нейронные сети, вдохнов- ленные биологическими аналогами, представляют собой мощный инструмент для решения задач в области компьютерного зрения Они способны обучаться на основе данных, строить иерархические представления и адаптироваться к новым ситуациям Понимание основ их работы, а также осознание их ограничений, яв- ляется ключом к успешному применению этих сетей в различных задачах распо- знавания образов и анализа визуальной информации В следующих разделах мы рассмотрим болев конкретные архитектуры нейронных сетей, используемых в компьютерном зрении 8.2. Введение в глубокое обучение Немного выше ьты познакомились с нейронными сетями и их основополага- ющими принципами Теперь поговорим о глубоком обучении это подход, ко торый привел к настоящему прорыву в компьютерном зрении и во многих дру- гих областях Глубокое обучение (англ. Deep Learning) это, по сути, развитие идеи нейронных сетей, где ключевым моментом является глубина сеги, то есть наличие множества слоев Представьте себе, что нейронная сеть из предыдущего раздела (рис 8 5) это .лишь начало Глубокая нейронная сеть, или «глубинная модель» добавляет к этому большое кс , как показано на рис 8 б (5 скрытых слоев) Это позволяет сеги обрабатывать информацию намного более сложным и многоступенчатым образом Вспомним что: : сеги выполняет роль фильтра вы деляющего определенные лрншаки из данных. Первый слои получая на вход «сырые» данные такие как пиксели изображения, может распознавать простые
восприятий"13 ЗЬ4 Рисунок 8 6- Пример глубокой нейронной сети Затем второй слой,получая информацию с первого, анализирует эти прими тивные элементы и вы деляет более сложные паттерны формы, текстуры, повто ряющиеся элементы На этом уровне начинается формирование семантически значимых признаков, но пока еще не на уровне целых объектов Например, сеть может распознать контур круга или узор ткани, но еще не «понимает», что это, скажем, колесо или рубашка. И так далее, с каждым последующим слоем сеть учится представлять ин- формацию на все более абстрактном уровне Происходит постепенное преобра- зование низкоуровневых визуальных данных в высокоуровневые семантические концепции Последние слои могут улавливать глобальные характеристики сцены, распознавать целые объекты и даже отношения между ними На этом уровне сеть не просто видит пиксели, а «понимает» содержание изображения, его семантику Например, она может распознать кошку, собаку, машину или определить, что на изображении изображена комната с мебелью Таким образом, чем больше слоев, тем более сложные и абстрактные при- знаки может изучить сеть Глубина позволяет ей строить иерархическое пред- ставление информации от простых пикселей до сложных объектов и сцен Это очень похоже на то, как работает наше собствеижзе восприятие мы видим мир не как набор отдельных точек или линий, а как совокупность взаимосвязан ных объектов и абстрактных концепций. Наше восприятие неразрывно связано со смыслом, который мы вкладываем в увиденное, и глубокое обучение стре мится к тому же, создавая системы, способные не просто распознавать но и «по нимать» визуальную информацию Именно эта способность формировать иерар хическое семантически наполненное представление данных, делает глубо кое обучение столь мощным инструментом в компьютерном зрении и других об ласгях В области компьютерного зрения глубокое обучение привело к впечатляю щим результатам Именно благодаря ему мы можем распознавать лица на фото графиях анализировать ме; этъ беспилотные авто мобили и решать многие другие сложные задачи Глубокие нейронные сети
8.3. Сверточная нейронная сеть icupoHnue сети (CNN) это особый тип глубоких нейронных I который был разработал специально для обработки структурированных ых таких как изображения и видео Они особенно эффективны в компью эм зрении, так хак их архитектура учитывает специфические особенности альнои информации В отличие от обычных полносвязяых нейронных сетей используют сверточные слои, которые позволяют выделить важные локаль характеристики в изображении, такие как края, углы и текстуры, не теряя гранственном Сверточные слои (Convolutional layers) это слои, которые выполняют свертку изображения с ядром (фильтром / массивом весов), которое «скользит» по изображению, вычисляя скалярное произведение пикселей под ядром и созда- вая новые карты признаков Важно, что один и тот же фильтр может применяться к разным частям изображения, что позволяет выявить общие паттерны Размеры и расположение фильтров можно менять для выявления разных масштабов и ло- кальных особенностей На рисунке 8 7 показан пример свертки изображения с одним фильтром А также на рисунке виден принцип вычисления нового зна- чения пикселя для карты признака Данный пример вычисления был подробно рассмотрен в разделах о фильтрах 3 9 2 и 3 9 3 После сверточных слоев часто 1ыборки (pooling layers) траты и делая сеть более устойчивой к небольшим изменениям входных данных (например повороту или мае я). Наиболее распространенные типы подвыборки максимальная подвыборка (выбирает максимальное значение в области) и средняя подвыборка (вычисляет среднее значение в области)
карты признаков и выполняют полносв>вную обработку, которая используется для классификации или прогнозирования CNN имеет значительные преимущества перед традиционными решениями нейронных сетей 1 CNN способны улавливать важные локальные характеристики изображе ния такие как края и углы, не теряя информации о пространственном располо женин этих характеристик 2 В результате ых и подвыборочных слоев CNN в большей степени устойчивы к небольшим вариациям в изображении, таким как изменения масштаба, поворот или смещение. 3 CNN могут быть очень эффективными, поскольку они умеют обрабаты вать данные в матричной форме, что позволяет использовать оптимизированные алгоритмы для вычислений 4 Благодаря архитектуре и оптимизированным операциям свертки и подвы- борки, CNN легко масштабируются для работы с очень большими наборами дан- ных изображений CNN широко используются в различных приложениях компьютерного зре- ния, таких как распознавание объектов, сегментация изображений, обнаружение лиц, классификация медицинских изображений и многое другое Таким образом, сверточные нейронные сети это мощный инструмент для обработки визуальных данных, основанный на идее локального восприятия и иерархического представления признаков Именно CNN стоят за многимизпе- чатляющими достижениями в области компьютерного зрения В следующих раз- делах мы рассмотрим более конкретные тримеры применения CNN и их различ- ные архитектуры 8.4. Пример применения сверточной нейронной сети Рассмотрим пример работы CNN Для облегчения работы еделаем так чтобы машина анализировала только черно-белые фотографии (рис 8 8) Пред положим, что мы подаем на вход изображение размером 32x32 пикселя что со ставляет в сумме 32x32 - 1024 пикселей (на рисунке изображение увеличено в несколько раз для наглядной демонстрации работы над пикселями) Каждый из этих пикселей кодирует уровень яркости серого от 0 до 255, где 0 представляет собой черный цвет, а 25 5 белый. Таким образом, входной слой будет состоять из 1024 нейронов с акгиваци ями выстроенными в линию, или из массива (списка) из 1024 чисел Что происходит, когда размер изображения не соответствует 32x32 пиксе лям'' Входной слой нейронной сети имеет определенный размер это означает что он способен размером 32x32 пикселя Если передаваемое изображение больше этого размера, мы можем адаптировать его следующими способами Во-первых, мы можем настроить оборудование
мера например с помощью билине В третьих если изобра жение меньше требуемого, его можно дополнить нулями (padding) до нужного размера Выбор метода зависит от конкретной задачи Например обрезка может привести к потере важной информации, а масштабирование может исказить про порции изображения В случае, если изображение меньше, чем 32x32 пикселя мы можем увеличить ее до соответствующих размеров или просто проигнориро вать для анализа заполнив недостающие области нулями Рисунок 8 8 - Пример работы CNN входное изображение Конечно, число 32 выбрано произвольно и при необходимости можно изме- нить размер входных данных Исследования показали, что анализ квадратных участков изображения (например, 64x64 вместо, скажем, 64x70) обычно дает лучшие результаты, хотя это не строгое правило и в некоторых случаях исполь зуют и прямоугольные области Особенно зто касается случаев, когда сохране ние пропорций является важным Применим к этому изображению операцию свертки с ядром резкости разме Эта процедура нам уже знакома (раздел 3 92 «Принцип фильтрации») Да лее для каждого блока из 3x3 пикселей на изображении (рис 8 9) мы умножаем каждый пиксель на соответствую! ядра, а затем суммируем их Эта сумма становится новым пикселем на изображении справа Если мы внимательно разбирались с теорией работы фильтра, в частности раздела 3 9 3 «Ядро фильтра», нам будет жспожио понять эту процедуру
только три соседа Один из способов исправил, это расширить значения края на единицу в исходном изображении, оставив новое изображение того же раз мера В предложенной демонстрации мы вместо этого действия игнорируем дан ные значения сделав их черными. Таким образом, ядро 3x3 скользит последовательно по всему изображению преобразуя пиксели в обновленный вад, до тех пор, пока все изображение не бу дет преобразовано и получено новое изображение Полученное изображение называется каргой признаков Карта признаков (feature map) эторезультат применения сверточного слоя к входным данным Кг сов представляет собой двумерный мае ень активации определенного фильтра (ядра) на соответствующем учасп® входного воображения Важно отметить, что в результате работы первого сверточного слоя может появится не одна а нескош несколько различных ядер,: ртнаков. В этом случае слои применяет апичные локальные признаки (например
ющий кадр Для этого в библиотеке СреяСТ7 применяется функция cv2filter2D() Данная функция используется для применения произвольного ядра (филь- тра) к изображению Она выполняет операцию свертки между ядром и жобра- жеяием
пространственных размерностей карг пршнаков, тюпученных после применения сверточных слоев Он выполняет это путем агрегации информации из различных областей исходной карты признаков Цепи слоя объединения уменьшить вычислительную сложность сделать сеть более устойчивой к небольшим изменениям в положении объектов и виде лить наиболее значимые признаки. На этом этале берегся ядро пулинга 2x2 (иногда 3x3), которое переме тцается по полученной карте признаков В каждой области, покрываемой ядром происходит агрегация информации Важно отметить, что ядро пулинга не имеет весов оно просто вычисляет статистику в области Не путать с операцией Распространенными типами пулинга являются max pooling (выбирает мак симальиое значение) и average pooling (вычисляет среднее значение) В нашем примере, если размер ядра свертки 3x3, то типичный выбор для размера ядра пулинга будет 2x2 Когда ядро пулинга перемещается по карте признаков, оно обычно двига- ется с определенным шагом (называемым шагом пулинга или stride), который часто равен размеру ядра. Эго позволяет охватить все участки изображения без перекрытия После того, хак ядро обработает все участки, оно перемещается дальше до тех пор, пока не пройдет всю карту признаков (рис 811) Слой объединения помогает уменьшить переобучение за счет уменьшения количества параметров в сети и, как следствие, вычислительных затрат Кроме
рую мы будем обрабатывать. Для операции max-pooling это обычно прямоуголь ник размером с ядро пудинга. В напЕм случае ядро 2x2, которое начинает ход с верхнего левого утаи захватывает четыре пикселя Шаг 2 Затем мы выбираем самый большой пиксель из этой области Это и будет значение для результирующего пикселя Шаг 3 После того, как мы вычислили значение для текущей области мы двигаемся вправо на шаг пудинга. В нашем случае шаг пудинга равен 2 так что мы переход им к следующему набору пикселей, не перекрывая предыдущую об ластъ повторяя шаги 1 и 2 Шаг 4 Мы продолжаем этот процесс, пока не дойдем до конца строки За тем мы переходим на следующую строку и повторяем процедуру Шаг 5 Когда мы закончим применять операцию пулияга ко всем областям изображения, мы получим новое изображение, размер которого в даа раза меньше по каждому измерению, чем исходное, но при этом сохранены его клю- чевые признаки Этот процесс позволяет уменьшить размерность карт признаков, сохраняя важные характеристики изображения и обеспечивая повышенную инвариант- ность к незначительным изменениям в расположении объектов на изображении Таким образом, пулииг помогает улучшить производительность и эффектив- ность сверточных нейронных сетей Далее, после операции пудинга добавляют еще один (точно такой же) блок, состоящий из сверточных слоев и слоев пудинга. Этот блок будет работать с дан- ными, которые уже были обработаны предыдущими слоями, позволяя модели извлекать более сложные и абстрактные признаки из изображения На ранних слоях выделяются простые признаки (края, линии), а № более поздних слож- ные (формы, текстуры). Этот процесс (свертка пулииг) обычно повторяется не- сколько раз, образуя так называемые блоки сверточных слоев (рис 8 12) Стоит заметить, что не всегда идет точмэе чередование свертка пулииг, в некоторых архитектурах могут использоваться только сверточные слои В любом случае, наращивая эти блоки, мы создаем все большую глубину нейрон ной сети После каждого такого блока обычиэ уменьшается размерность данных что помогает снизить вычислительную сложность и предотвратить переобучение Это уменьшение размерности происходит в основном за счет слоев пулиига
тров в сверточных слоях Од мер количество слоев в 1 I и их характеристики (напри лво фильтров размер ядер свертки и пудинга) могут быть различными в зависимости от архитектуры нейронной сети и конкретной задачи. Эти параметры часто называют гиперпара метрами которые подбираются в процессе обучения или с помощью методов по иска гиперпараметров На этале когда размеры карт признаков становятся относительно неболь тпими (например, 8x8), дальнейшая свертка и пудинг мотут привести к потере информации из заумеиы । изображения Вместо этого в данной точке может быть более эффективным использование полносвяз ных слоев для дальнейшей обработки данных н выполнения задачи классифика ции или других задач обработай изображений Тем не менее, в некоторых архитектурах нейронных сетей или для опреде ленных задач может быть целесообразным продолжить свертку и лупинг даже на более поздних этапах Напричер, в случае обработки изображений с очень высоким разрешением или для выполнения сложных задач, таких как обнаруже- ние объектов на изображении, можно продолжать свертку и пулияг на более поздних этапах Однако это требует тщательного анализа и выбора оптимальной архитектуры сети в зависим ости от конкретной задачи Когда данные проходят через последний сверточный слой и слой пулинга и достигают карт признаков меньших размеров (размерность которых зависит от архитектуры сети, а не всегда 8x8), их можно передать через полносвязные слои нейронной сети Этот этап включает несколько шагов 1 Разглаживание данных (векторизация или flattening) Карты признаков, полученные после последнего лупинга, имеют двумерную структуру Прежде чем передать их в полносвязяые слои, необходимо разгладить их в одномерный вектор Это делается путем вытягивания всех значений карт признаков вдоль пространственных размерностей Например, если карта признаков имеет размер 8* 8 и содержит 64 признака, она будет преобразована в одномерный вектор дли ной 64 (рис 813) Важно отметить, что все значения признаков из карт сохраня ются в векторе, но их пространственная структура теряется Этот процесс назы вается flattening Например, вектор получается путем последовательного выпи сываиия строк (или столбцов) матрицы признаков Разглаживание.
слоев нейронной сеги В: эм слое каждый нейрон соединен со всеми нейронами предыдущего слоя В этих слоях каждый нейрон обрабатывает входные данные применяя веса, смещения и функции активации, для выявления нелинейных взаимосвязей и формой ных необходимого для выполнения в оичахельного представления дан В полносвязных слоях каждый элемент входного вектора имеет свои весо вые коэффициенты и смещения для каждого нейрона в следующем слое В ре зультате этой обработки нейроны формируют абстрактное представление на ос нове которого сеть принимает решение о принадлежности изображения к опре деленному классу Для каждого нейрона в лолносвязнэм слое вьпюляяегся следующий про 1 На вход подается одномерный вектор данных х 2 Каждый элемент этого вектора умножается на соответствующий ему ве- совой коэффициент W. 3 Затем к каждому результату прибавляется смешение Ь 4 Полученные значения у подаются на вход функции активации, которая определяет, какой сигнал будет передан дальше Математически полносвязный слой может быть описан следующей форму- у = activation(W x + b), где у выходные данные слоя, х входные данные (вектор), по луч енные из предыдущего слоя, 5К матрица весов, которая соединяет входные и выходные данные, Ъ вектор сдвига, который добавляется к выходным данным, activation функция активации, которая применяется к выходным данным, чтобы добавить нелинейность Этот процесс повторяется для каждого нейрона в полносвязном слое, фор мируя окончательное представление данных, которое затем может быть исполь зовано для выполнения задач, таких как классификация или регрессия В полносвязных слоях нейронной сети обычно применяются функции акти вации такие как PeLU (Rectified Linear Unit) или Sig/novi, чтобы внести нелинеи ностъ в модель, что позволяет нейронным сетям улавливать более сложные зави симости между данными и делать более точные предсказания Вот простое объяснение д вух распространенных функции активации ReLU эта функция активации определяется как f(x) = тах(0,х) Она означает что если вход ное значение х положительное, то оно остается без изме нении а если оно отрицательное, то < t нулю Это простая функ ция которая быстро вычисляется и хорошо подхода! для обработки градиентов во время обучения
из ЗЬ4 '' ' its-- нимаег любое вещественное число в качестве входа и сжимает его в д иапазоне от 0 до ] Это означает, что она используется, когда нужно предсказать вероят ностъ для двоичной классификации, например, отнесение объекта к одному Как было сказано выше, эти функции активации добавляют нелинейность в модель позволяя нейронным сетям выявлять сложные паттерны и зависимости в данных Без нелинейности нейронные сети были бы ограничены линеиными преобразованиями, что значительно синти важных признаков и решению сложных зад 3 Финальный слой Последний пэлно выходным слоем нейронной сеги. Для зада бы их способность к выделению как травило, является слои обычно содержит количество нейронов, соответствующее количеству клас сов которые необходимо классифицировать Каждый нейрон на выходном слое представляет вероятность принадлежности к определенному классу, а функция активации преобразует эти значения в вероятности Например, если у нас есть 10 классов, то на этом слое будет 10 нейронов Каждый нейрон на этом слое представляет вероятность принадлежности вход- ного изображения к определенному классу Это означает, что выходные значе- ния нейронов мотут рассматриваться как вероятности для каждого класса. Чтобы преобразовать эти значения в вероятности, обычно используется функция активации, такая как Softmax Softmax принимает выходные значения нейронов и преобразует их так, чтобы все значения были неотрицательными и чтобы их сумма составляла 1 Это обеспечивает правильное представление вероятностей для каждого класса. Таким образом, финальный слой нейронной сети принимает выходы преды- дущих слоев и преобразует их в вероятности принадлежности к каждому классу, что позволяет сеги делать предсказания о классе, к которому принадлежит вход- ное изображение 4 Обратное распространение ошибки и обучение После того как данные прошли через полносвязные слои, нейронная сеть оценивает, насколько хорошо ее предсказания соответствуют ожидаемым меткам классов Затем используется алгоритм обратного; । для коррекции весов и смещении в сети с целью улучшения ее тронзводительности и повышения точности пред Цель этого процесса минимизировал. ошибку предсказания чтобы сеть стала более точной. Путем многократного обновления весов и смещении на ос нове градиентов функции потерь нейронная сеть постепенно «учится» наход ить оптимальные параметры д ля данной задачи. Таким образом, этап использования полносвязных слоев нейронной се ти позволяет модели ъную обработку данных и еде лать окончательные предсказания или решения в соответствии с поставленной задачей
В предыдущих разделах мы подробно рассмотрели основные компоненты сверточной нейронной сета (CNN) на примере обработки черно белого изобра жения размером 32x32 пикселя Теперь давайте обобщим эти знания и предела вим общую структуру CNN, которая тфимеяяется в широком спектре задач ком зрения Каждый элемент структуры для удобства мы будем прону и комментировать в тексте 1 слой (рис 8 14, элемент 1) принимает на. вход изображение пред Входнс е в виде многомерного массива (тензора) Размерность этого массива : тапа изображения для черно-белых изображении это обычно двумер m (высота х ширина), для цветных трехмерный (высота х ширина х х количество каналов, например, RGB) В иалвм примере с изображением 32x32 входной слой представлялся в виде матрицы 32x32 (или массива из 1024 нейро нов) Однако, в общем случае размерность может быть произвольной, как 224X224, 256x256, 640x480,1920x1080,256x256x3 (RGB) ит д Изображение поступает в скрытые слои игйроииэй сети И первым его пред- ставителем в нашем случае выступает первый сверточный слой (рис 8 14, эле- мент 2) Предположим, в нашем случае сверточный слой состоит из пята фильтров (ядер) Каждый фильтр выявляет отделенный вид признаков Следовательно, на выходе этого слоя получается тензор 32х 32x5 Где 5 количество карт призна- ков Стоит заметить, что при использовании свертки без padding размерность карты признаков может быть меньше, чем размерность входного изображения После сверточного слоя идет слой пудинга (рис 8 14, элемент 3) В резуль- тате max-pooling с ядром 2x2 и шагом 2, карты признаков уменьшаются в раз- мере с 32x32 до 16х] 6, а тензор яавыходе будет иметь вид 16x16x5 Затем операция свертка лупинг повторяется (рис 8 14, элемент 4 и 5), и выходной тензор будет иметь размерность 8x8x5 На этом этапе данные стано- вятся более абстрактными Также важно отметить, что количество фильтров (карт признаков) в каждом сверточном слое может меняться по мере продвиже- ния по сета
ПрЛЛрЙовани х5 в одномерный вектор Этот ванием», превращает выход по э использовать в полносвязных зные слои (рис 8 14,элемент? и 8): после выравнивания данные по ш или несколько полносвязных слоев Каждый нейрон в полносвяз ииен со всеми нейронами предыдущего слоя Эти слои играют важ тассификации или регрессии, используя информацию, извлеченную слоями Первый полнэсвязный спой может иметь, например (хак в нашем примере), затем может следовать слои с 64 нейронами Выходной слой (рис. 8 ]4, элемент 9). Эго последний слои нейронной сети. Его структура и функция зависят от решаемой задачи (например, классификация) Для задач классификации (например, распознавание объектов на изображе нии) выходной слой обычно жеет столько нейронов, сколько классов Выходом этого слоя является вектор вероятностей принадлежности входного изображения к каждому классу Часто используется функция активации softmax для нормали- зации выходных значений в вале вероятностей В нашем примере с 3 классами выходной слой будет содержать 3 нейрона (например, человек, собака, кошка) Рассмотренная обобщенная структура CNN является базой для многих ар- хитектур, используемых в компьютерном зрении Различия могут заключаться в количестве и типах слоев, параметрах фильтров и выборе функций активации и потерь Сложность и глубина сети (количество слоев) также зависят от слож- ности решаемой задачи 8.6. YOLO (You Only Look Once) После рассмотрения основ нейронных сетей, углубления в концепции глу- бокого обучения и изучения архитектуры сверточных нейронных сетей мы пере ходим к изучению одного из наиболее значимых иэффективных алгоритмов для обнаружения объектов YOLO (You Only Look Once) YOLO представляет собой революционный подход, который использует мощь глубоких CNN для одновре менного предсказания местоположения и класса объектов на изображении В от личие от традиционных методов, где обнаружение объектов выполняется по этално YOLO выполняет эту задачу за один проход сети, что делает его неверо ятно быстрым и эффективным, сохраняя три этом приемлемую точность Этот раздел посвящен подробному изучению принципов работы YOLO его архитек туры и практическому применению в задачах компьютерного зрения 8 6.1 История развития YOLO Идея обнаружения объектов в реальном времени, то есть способности не только идентифицировать объекты, но и точно определять их местопо
этой задачи в 2016 году Джозеф Ре ство алгоритмов глу бокого обучения под названием YOLO (You Only Look Once с англ «Стоит только раз взглянуть») YOLO произвел революцию в области обнаружения объ ектов благодаря своей способности к высокой скорости работы и точности Основной принцип YOLO заключается в том, что изображение делится на сетку ячеек для каждой ячейки одновременно предсказываются ограничиваю щие рамки и вероятности принадлежности объектов к различным классам Такои подход позволяет алгоритму обрабатывать изображение за од ин проход в отли чие от предыдущих методов, таких хак R CNN, где сначала предлагались реги оиы интереса, а затем они: зоваиный в YOLOvl, знач . отдельно Этот принцип, реали оросгь работы и эффективность обнаружения объектов YOLOvl обрабатывал видео со скоростью 45 кадров в секунду, а его облегченная версия, FastYOLO, достигала 155 кадров в секунду, при этом демонстрируя вдвое более высокую точность, чем другие детекторы реального времени Производительность YOLOvl • YOLOvl -63,4 % mAP на PASCAL VOC, 45 FPS, • Fast YOLO -52,7 % mAP на PASCAL VOC, 155 FPS В 2017 году Редмон и Али Фархади представили YOLOv2 (также известную как YOLO9000), которая была описана в статье "YOL09000 Better, Faster, Stronger1' YOLOv2 смогла прогнозировать 9000 различных категорий объектов в реальном времени, благодаря обучению на наборах данных как для обнаруже- ния, так и для классификации В качестве базовой модели использовалась Darknet-19 Архитектура YOLOv2 показала себя успешной, и многие инженеры начали создавать собственные уникальные версии алгоритма Производительность YOLOv2 • YOLOv2 -78,6 % mAP на PASCAL VOC, 40 FPS, • YOLOv2-Tiny -60 % mAP ж PASCAL VOC,-200 FPS В 2018 году в статье “YOLCV3: Incremental Improvements”, Редмон и Фар хади представили YOLOv3 на архитектуре Darknet-53, заменив механизм ахти вации softmax и используя бинарную кросс энтропийную потерю при обучении YOLOv3 также делал про гнозы на трех различных масштабах, что значительно повысило точность опре деления мелких объектов YOLOv? стал после дней версией алгоритма, разрабо тайной Джозефом Редмоном, который принял решение прекратить дальнейшие исследования в области компьютерного зрения Производительность YOLOv3 • YOLOv3 -57,9 % АР на COCO va!20I7, -30 FPS (NVIDIA Titan V) • YOLOv3 Tiny -33 % АР на COCO va!2017,-200 FPS Однако развитие YOLO не остановилось В 2020 году Алексеи Бочковскии Цзянь Яо Ван и Хун Юань Марк Ляо представили YOLOv4 описанный в статье ‘YOLOv4 Optimal Speed and Accuracy of Object Detection" Эта версия включала
ное обуче блоков и функцию потерь CIoU YOLOv4 построенный на основе YOLOv3, с магистралью SPDarknet53 показал на 10% более высокую точность и на 12 % лучшую производительность по сравнению с YOLOv3 Производительность YOLOv4 —43,5 % АР на COCO val2017 -62 FPS (NVIDIA Tesla VI00) В июне 2020 года появился YOLOv5, проект с открытым исходным кодом от компании Uliranytics, который предоставлял набор моделей, обученных на наборе данных СОСО, и простые инструменты для аугментации данных, сборки зов и экспорта в различные форматы Не моделей настрс смотря на отсутствие архитектурных новшеств, YOLOv5 стал чрезвычайно по пулярным и удобным инструментом для пользователей, предоставив готовую к использованию модель, а также множество ресурсов для обучения и развертыва Производительность YOLOvS • YOLOv5-N -37 % АР на COCO val2017, -450 FPS, • YOLOvS-S ~48%APHaCOCOval2017,-300FPS, • YOLOv5-M -50 % АР на COCO va!2017, -150 FPS, • YOLOv5-L -53 % АР на COCO va!2017, -80 FPS, • YOLOv5-X -55 % АР на COCO va!2017, -60 FPS Несмотря на все преимущества YOLO, у него есть и недостатки В частно- сти, каждая ячейка сетки способна идентифицировать только один объект, что затрудняет распознавание мелких объектов, особенно если они расположены в группах Кроме того, YOLO может уступать по точности более медленным ме- тодам, так как стремится к высокой скорости за счет упрощения анализа изобра- Позже был вытащен YOLOv6 or Meituan, который предложил улучшения в архитектуре и обучении для достижения хоролвго баланса между скоростью и точностью Были добавлены модули Bi-directional Concatenation (BiC) и страте гия Anchor Aided Training (ААТ) YOLOv6 предоставил несколько предвари тельно обученных моделей с разной производительностью Производительность YOLOv6 • YOLOvS N 37,5 % АР на COCO val2017,1187 FPS (NVIDIA Tesla T4) • YOLOv6 S 45,0 % AP, 484EPS, • YOLOv6 L 52,8 %АР, 116FPS (передовая точность в реальном времени) Таким образом, развитие YOLO прошло долгий путь от первой версии до современных итераций, каждая из которых вносила свой вклад в улучшение ско рости точности и удобстваиспользования. YOLO продолжает оставаться одним из самых популярных и востребованных алгоритмов в области обнаружения обь ектов демонстрируя постоянный прогресс в этой области
12 года Мйр^идел Yi важной вехой в истории искус на самой быстрой и точной моде ла своих предшественников по скорости и точности, но и установила новые стандарты в области обнаружения объектов Разработчики активно исполь зуют YOLOv7 в различных приложениях, включая наблюдение за транспортом безопасность медицину и автономные системы, где требуется высокая скорость и точность обработки информации. Производительность YOLOV7 • YOLOv7 -5 б % АР из СОШ val2017, -160 PPS (NVIDIA Tesla VI00) • YOLOV7 Tiny -40 % АР, -300 EPS, • YOLOV7X -58 % АР,-100 FPS YOLOV7 также ввел несколько улучшений в архитектуре и методах обуче ния для повышения производительности. Эти улучшения позволили модели еще эффективнее работать с видеопотоками, отслеживая объекты® движении и обес- печивая возможность использования в широком спектре задач, таких как ввдео- аяалитака, управление автономными транспортными средствами и отслежива- ние множества объектов одновременно Стремительное развитие семейства YOLO привело к появлению YOLOv8, выпущенного компанией Uitralytics в январе 2023 года. YOLOv8 позициониру- ется не как просто очередная итерация, а как основанная на едином фреймворке платформа для задач обнаружения, сегментации и классификации объектов YOLOv8 предлагает гибкую и мощную архитектуру, которая обеспечивает поль- зователям большую свободу в настройке и адаптации моделей под конкретные задачи Кроме того, YOLOvS был спроектирован для работы с различными раз- мерами и типами данных, что делает его еще более универсальным и удобным инструментом для разработчиков и исследователей. YOLOvS предлагает множество предварительно обученных моделей, а также предоставляет продвинутые возможности для оптимизации обучения и развертывания Благодаря своей универсальности и производительности YOLOv8 быстро завоевал популярность среди специалистов по компьютерному зрению Производительность YOLOvS • YOLOv8 N -40 % АР, -800 FPS, • YOLOv8 S -45 % АР,-500 EPS, • YOLOvS M -50 % AP,-300 EPS, • YOLOv8 L -53 % AP,-150 FPS, YOLOv8 имеет множество вариантов, поэтому данные производительности могут существенно отличаться 21 февраля 2023 года компания Ultialybcs анонсирует YOLOv9 Эта версия вводит новые архитектурные решения и методы обучения, демонстрируя впечат
нологии: • программируемая градиентная информация (PG1) Эта технология направлена на сохранен» важной информации при прохождении сигнала через глубокие слои нейронной сети. PGI минимизирует потерю важной информации во время обучения, что приводит к более точным и надеж ным моделям, • обобщенная эффективная сеть агрегирования слоев (GELAN) GELAN оптимизирует использование параметров и вычислительных ресурсов обеспечивая высокую производительность при меньших затратах Это позволяет создавать модели, которые являются более эффективными и могут работать на различных платформах, включая устройства с ограни ченными ресурсами Производительность YOLOvl • YOLOv9-E 38,3 % АР, -800 FPS, • YOLOv9-S 46,8 % АР,-500 FPS, • YOLOv9-M 51,4 % АР,-300 FPS, • YOLOv9-C 53 % AP,-150 FPS • YOLOv9-E. 55,6 % AP, -100 FPS В мае 2024 году свет увидел следующую версию YOLOvl0, созданный на базе пакета Ultralytics Python исследователями из Университета Цннхуа Она представляет собой новый шаг в обнаружении объектов в реальном времени Данная версия решает проблемы с постобработкой и архитектурой, которые были у предыдущих YOLO, заменяя не максимальное подавление (NMS) и опти- мизируя архитектуру для лучшей скорости и точности YOLOvl 0 использует по- следовательное двойное назначение для обучения, что исключает необходи- мость NMS и позволяет получать более точные прогнозы за один проход Архи- тектура включает в себя улучшенный блок CSPNet для извлечения признаков, PAN для объединения признаков разных масштабов и две специализированные головы One-to Мапу для обучения и One-to-One для быстрого вывода Дополни тельные особенности архитектуры включают облегченные классификационные головы и свертки с большим ядром. Такой подход позволяет достичь высокой производительности при меньших вычислительных затратах и предлагает раз личные размеры моделей для разных задач, что делает его более эффективным и удобным Производительность YOLOvlO • YOLOvlO N 38,5 % АР,-600FPS, • YOLOvlO S 46,3 %AP,-400FPS, • YOLOvl 0 M 51,1 % AP, -210 EPS, • YOLOvlO В 52,5 %AP,-170FPS, • YOLOvlO L 53,2 % AP,-140FPS,
мероприятий YOLD Vision 2024 YOLOvll сохраняет поддержку задач компью терного зрения таких как обн^>уженж объектов, сегментация экземпляров классификация изображений и оценка позы, знакомых пользователям YOLOvS При этом YOLOvl 1 демонстрирует значительные улучшения в точности и эф фективности например, модель YOLOvl 1m достигает более высокой средней точности (тАР) на наборе данных СОСО, чем YOLOvSm, при этом используя на 22 % меньше параметров Новая архитектура YOLOvll спроектирована для работы на разных платформах, отмобильных устройств до облачных систем и обеспечивает более высокую скорость и эффективность, что снижает вычисли тельные затраты и ускоряет вывод Благодаря простой интеграции через пакет Ultralytics Python или платформу Ultralytics HUB, YOLOvll легко вписывается в существующие рабочие процессы. Производительность YOLOvl 1 • YOLOvll N 39,5 % АР, -700FPS, • YOLOvl 1-S 47 % AP,-400 FPS, • YOLOvl 1-M 51,5 % AP,-21 OH’S, • YOLOvl 1 -L. 53,4 % AP, -160 FPS, • YOLOvl 1-X 54,7 % AP,-90 FPS Ниже (рис 8 15) пред ставлен график, который показывает соотношение между точностью обнаружения объектов и скоростью обработки изображений для различных моделей, работающих на конкретном аппаратном обеспечении и с определенными настройками СОСО тАР (Mean Average Precisicn) это метрика, которая измеряет точ ность обнаружения объектов Чем выше значение тАР, тем более точно модель обнаруживает и классифицирует объекты. Она учитывает как точность опреде ления класса объекта, так и точность его локашвации на изображении (ограни чивающеи рамки) тАР вычисляется для набора данных СОСО который явля ется стандартным для оценки моделей обнаружения объектов
дачи результатов (предсказаний). Чем ниже задержка, тем быстрее работает мо дель что особенно важно для: го времени Согласно представленному трафику, YOLOvl 1 демонстрирует существен ныл прирост в производительности по сравнению с предыдущими передовыми версиями такими как YOLOv5, YOLOv7 и YOLOvS В целом, семейство апго ритмов YOLO является революционным в области обнаружения объектов соче тая высокую скорость и точность в реальном времени. Разнообразие моделей от популярных YOLOv8 до новейшей YOLOvll, обеспечивает гибкость для раз личных задач компьютерного зрения, а непрерывные усовершенствования де лают их широко востребованными, при этом YOLOvS сохраняет свою актуаль ностъ и практическую значимость. Принцип работы YOLO Архитектуры детекторов объек- тов (Object Detectors) демонстрируют значительные различия в подходах к решению задачи Можно выделить две основные группы двухэталные (two-stage) и одноэталяые (one-stage) архитектуры Двухэт кие как R CNN, Fast R-CNN и Faster R CNN, характеризуются последова- тельным процессом обнаружения Сначала они генерируют набор по- тенциальных областей интереса (Regions of Interest, ROI), где с высо кой вероятностью могут находиться объекты Затем, на втором этале классификация и уточнение местопо ложения объектов выполняются для каждого из этих регионов Для примера рассмотрим шаги детектирования Faster R CNN как одного из наиболее популярных представителей двухэтапиых архитектур (рис 816) 1 На вход подается изображение. 2 Изображение обрабатывается сверточной нейронной сетью (CNN) кого рая генерирует карту признаков (feature map). 3 Отдельная нейронная сеть, обычно и RPN (Region Proposal Network) анализирует карту признаков и генерирует множество прямоугольных областей (RO1) которые могут содержать объекты RPN предсказывает как
4 Механизм ROI Pooling выделяет вв карты признаков признаки, соответ сгвующие каждому ROI приводя их к фиксированному размеру независимо от размера ROI 5 Извлеченные признаки ROI подаются на полносвязную нейронную сеть которая классифицирует объекты внутри каждого ROI и уточняет координаты ограничивающих прямоугольников (boundingboxes), повышая точность их лока В отличие от двухэтапных, одноэтапные архитектуры, например YOLO вы полняют обнаружение объектов в один этап Они напрямую предсказывают ко орд инаты и классы объектов для всей сцены на изображении одновременно что обеспечивает значительно большую скорость работы, хотя, как правило, и с не сколько меньшей точностью на ранних этапах развития по сравнению с двух этапными методами Двухэтапные архитектуры детекторов объектов, такие как Faster R CNN, об ладают двумя существенными недостатками Во-первых, они анализируют изоб- ражение не целостно, а фрагментарно, рассматривая отдельные области инте- реса. Во-вторых, по сравнению с одноэтапными аналогами, они характеризуются значительно меньшей скоростью обработки В отличие от них, архитектура YOLO (You Only Look Once) избегает этих недостатков Ее эффективность «однократно подтверждалась на практике На начальных этапах обработки YOLO имеет схожую структуру с другими де- текторами изображение поступает на вход, и с помощью сверточной нейронной сети (CNN), 2 данном случае опей ы Darknet-53, формиру - егся карт?, признаков В последующих слоях сети, о которых подробнее будет рассказано далее, происходит анализ карты признаков, результатом чего явля- ется прямое предсказание координат и размеров ограничивающих рамок (bounding boxes) для обнаруженных объектов, а также их классификация Рассмотрим гфиведенную на рисунке 8 17 пример даухэтапной архитек- туры Многие современные детекторы объектов, включая YOLO используют про межуточный слои или блок слоев, называемый Neck (шея) Neck это проме жуточныи слои или блок слоев между основным извлекателем признаков
рая предсюйЗЛ&бт bounding boxes и Классы объектов через Dense Prediction) Можно представить это как область, где происходит дальнейшая обработка и обогащение карты признаков, полученной от CNN Neck объединяет информа цию с разных уровнен карг признаков, что позволяет детектору лучше востри ниматъ объекты разных масштабов как мелкие, так и крупные Разные архигек туры используют различные типы Neck’ ов, например, Feature Pyramid Networks (FPN) или Path Aggregation Networks (PAN), которые создают пирамиду призна ков или объединяют информацию с разных уровней для улучшения точности и устойчивости обнаружения По сути. Neck улучшает качество и разнообразие признаков передаваемых на заключительный этап детекции В архитектурах детектирования объектов Dense Prediction (плотное пред ска зание) модель, которая предсказывает информацию для каждой точки изобра жеиия (или ячейки сетки), а не только для отдельных областей Это обеспечивает полное покрытие изображения и позволяет обнаруживать объекты независимо от их размера и положения, что характерно для быстрых однсоталяых дегекто ров, таких как YOLO В отличие от плотного предсказания (Dense Prediction), Sparse Prediction (разреженное предсказание) генерирует лишь ограниченное количество предска- заяий для изображения Вместо того, чтобы предсказывать информацию для каждой точки или ячейки сетки, Sparse Prediction фокусируется на вьщелении наиболее вероятных областей, содержащих объекты Это может быть достигнуто путем генерации небольшого количества предложений (proposals), как в д вухсту- пенчатых методах, или путем использования механизма, который выбирает лишь некоторыеключевые точки или регионы для дальнейшей обработки Sparse Prediction часто используется в методах, где требуется высокая точность, но ско- рость обработки не является критичным фактором В результате, хотя и обраба- тывается меньше данных, полученные предсказания обычно более точные, но покрывают меньшую часть изображения Ключевым отличием архитектуры YOLO от других детекторов объектов яв- ляется использование блоха плотного предсказания (Dense Prediction) Этот под ход, являющийся основой высокой эффективности YOLO, заслуживает отдель ного рассмотрения Философия YOLO заключается в однократном анализе изображения (You Only Look Once) для выполнения всех необходимых операций по обнаружению объектов В отличие от многоэтапных архитектур, YOLO обрабатывает изображе ние всего один раз, пропуская его через единую нейронную сеть Это обеспечивает высокую скорость обработки, причтом сохраняя высокую точность обнаружения 863 Работа YOLO на этапе обучения На этапе обучения YOLO входные изображения пред варительно обрабаты ваются их размеры изменяются (ресажятся) до 416x416 пикселей Это стацдар тизированныи размер, позволяют формировать пакеты (батчи)
цесса обучИй#4 Далее изображение разбивается на сетку (grid) ячеек размером например 33x13 (размер сетки может меняться в зависимости от версии и конфигурации модели) (рис 818) В разных версиях YOLO используются различные размеры >стью и скоростью YOLOvl использовала сетку 7x7 при входном изображении 448x448 YOLOv2 првдлагалане размера изображения, I в зависимости от входного YOLOv3 используеттри разные сетки с различным разрешением 13x13 26x26, 52x52, что позволяет детектировать объекты разных размеров YOLOv4 YOLOvll также используют многомасшгабяыи подход по добный YOLOv3, сразлич । размерами сеток Точные размеры сетки зависят от размера входного изображения н используемой конфигурации Таким образом, более мелкие ячейки обеспечивают более высокую точность локализации, но требуют больше вычислительных ресурсов, тогда как более крупные ячейки обеспечивают бс у, но могут снизить точ ность Выбор размера ячейки является компромиссом между этими двумя фак торами Каждая такая ячейка отвечает за обнаружение объектов центры которых попадают внутрь нее Для: ьет несколько огра ничивающих рамок (bounding boxes) разных размеров и пропорции Позиция ширина и высота этих рамок рассчитываются относительно центра ячейки Это позволяет обнаруживать объекты различных размеров и форм даже если они расположены на гра . Множественные bounding boxes на
(рис 8 19) из ЗЬ4 Рисунок 8 19 - Демонстрация bounding boxes, предсказываемых для одной ячейки изображения Количество bounding boxes, предсказываемых для одной ячейки в YOLO, зависит от версии модели и ее конфигурации В YOLOv3, например, обычно ис- пользуется три bounding boxes на ячейку В более поздних версиях (YOLOv4, YOLOv5 ит д) это число может изменяться и часто зависит от числа «опорных рамок» (anchor boxes), которые определяются заразее на основе анализа обуча- ющего датасета. Для понимания рассмотри такой гример Представьте, что модель YOLO это художник, рисующий прямоугольники вокруг части туловища собаки (рис 8 19), попавшей в ячейку (например, координата 3 8) Он не знает точных размеров и формы туловища, которое может быть частично скрыто или нахо диться под необычным углем Поэтому он предлагает три варианта рамок одно временно • первая рамка может быть небольшой и компактной, под ходящей для не большой части туловища, или если собака расположена сбоку, • вторая рамка может быть среднего размера и пропорций, подходящей для большей части туловища, если собака находится прямо, • третья рамка может быть большой и более широкой на случаи если туло вище собаки занимает большую область ячейки или частично скрыто за другими объектами Модель не выбирает лучлтую рамку заранее Она предсказывает все три одновременно каждый со своими параметрами (координаты размер досто верность в том Затем алгоритм NMS
ние части туловища собаки внутри ячейки. Использование трех предсказании по вышает шансы на точное обнаружение, учитывая различные возможные размеры t на большом количестве данных и ориентации туловища cot ассоциируя различные раем еры и формы рамок с разными частями объектов и их расположением в ячейках Рисунок 8 20 - Демонстрация bounding boxes, предсказываемых для множества ячеек изображения Если в ячейке нет объекта или модель не обнаруживает в ней объект с до- статочной достоверность», то предсказанные ограничивающие рамки для этой ячейки будут иметь низкий confidence score, и они будут отфильтрованы алго ритмом NMS (Non Maximum Suppression) После прохождения аннотированного изображения через нейронную сеть YOLO на выходе мы получаем для каждой я* ютцие в себя несколько (обычно три) bounding boxes Каждый из этих bounding boxes характершуется координатами центра координаты относительно центра ячейки, шириной и высотой обычно представляются в логарифмическом мае вероя/ >сти модели в том что в данном bounding box действительно находится объект, вероятностью принадлежности к классам вероятность того что объект внутри bounding box принадлежит к каждому из возможных классов (например «пешеход» «автомобиль», «велосипед», «собака») (рис 8 21)
Рисунок 8 21 - Структура выходи ых дан ных VOLO На этом этапе для каждой ячейки мы имеем три набора данных параметров, каждый описывающий один из предсказанных bounding boxes Дальнейшая обработка включает в себя 1 Выбор лучшего bounding box для каждого объекта При этом алгоритм Non-Maxunum Suppression (NMS) сравнивает все предсказанные bounding boxes и отбирает для каждого обнаруженного объекта только один bounding box с наивысшей вероятностью (confidence score) и классом, удаляя перекрывающиеся предсказания с более низким confidence score. 2 Постобработка На этом этале относительные координаты bounding boxes преобразуются в абсолютные координаты на исходном изобра- жении, используя информацию о размере ячейки и размерах всего изображения Затем результаты отображаются на изображении в виде прямоугольников, изложенных на обнаруженные объекты Таким образом, иаэтапе пост-обработки мы переходим от множества потен циальных bounding boxes для каждой ячейки к окончательному набору bounding boxes, точно описывающих расположение и размеры обнаруженных объектов на После того, как модель YOLO предсказала bounding boxes для каждого объекта на изображении (включая координаты, размер и вероятность принад нежности к классам), определяется показатель objectness Он вычисляется с помопц,ю метрики IoU (Intersection over Union) отношения площади пере сечения предсказанного bounding box и истинной рамки к площади их объеди нения (рис 8 22) /ОУ = |^ Если IoU превышает заданный порог, objectness устанавливается в 1 в противном случае зуется для расчета оконча
Рисунок 8 22 - Вспомогательная иллюстрация к принципу вычисления objectness с помощью метрики loU А теперь представьте, что мы учим YOLO распознавать людей на изображе- ниях Мы показываем ей картинку с людьми (из тренировочного набора), сеть анализирует ее (извлекая признаки), и в конце слой CNN выдает информацию о каждом фрагменте картинки (ячейке сетки) Если эта информация неверна (например, сеть ошибочно идентифицировала человека или не обнаружила его вовсе), мы получаем большую ошибку (loss) Задача обучения уменьшать эту ошибку, показывая сети все больше картинок, чтобы она училась распознавать людей все точнее Как было указано ранее, для каждой ячейки модель предсказывает не- сколько bounding boxes (обычно три), каждый из которых описывается пятью па- раметрами k и I, - координаты центра bounding box относительно центра ячейки Эти значения обычно нормированы и лежат в диапазоне от 0 до 1 (значе- ния e(tx), e(ty)) Этот параметр основной, для определения показателей Ъ, и Ь, предсказанного bounding box Ьг = в(^) + ^; L и th ширина и высота bounding box, часто представлены в логарифмиче ежом масштабе (для лучшей обработки объектов различных размеров) Они также нормированы относительно размеров ячейки bw, bh bh = Pa«4 a(to) (confidence score) вероятность того, что bounding box содержит объект Это значение используется для отсеивания нерелевантных предсказании Вычисляется этот параметр следующим образом tt(t0) = Рг (object) loU(b, object)
рые были й|йа(Ё4азаиы алгоритмам kOLU Сх,Су координаты левой верхней точки заданной ячейки (на рисунке 823 оранжевого цвета) предварительно опредет размеры ых размеров и пропор Рисунок 8 23 - Выходные параметры для прогнозирования bounding box ции используемые в модели YOLO (anchor boxes) bx, by, bh геометриче ские размеры предсказанного bounding box. Как видно и» рис 823, YOLO пытается точна определить расположение и размер объ ектов на карлике Для этого она предсказы вает параметры bounding box (местоположение и размер) Чтобы отбросить совсем неверные Предсказания, используется показатель уве ревности (confidence score) Он рассчитывает ся путем умножения lol!(b, object) (насколько точно bounding box совпадает с реальным объектом) на вероятность того, что это имен- но нужный нам объект Pr (object) Если ре- зультат вьнга заданного порога, то предска- зание считается достаточно точным и сохра- няется После отсеивания неточных предсказа- ний, оставшиеся bounding boxes с высокой сте- ганью уверенности отображаются на изобра- жении (рис 8 24)
вает перекрывающиеся bounding boxes и оставляет только тот у которого наивысшая вероятность (confidence score). Таким образом, для каждого объекта остается только один, наиболее шает качество обнаружения обь дуры приведен на рис 8.25 ыи bounding box Это улуч пы Результат такой проще Рисунок 8 25 - Результат подавления «слабых» bounding boxes Таким образом, на этале обучения YOLO, изображения проходят через не- сколько этапов от изменения разы ера и разбиения на сетку до предсказания мно- жества bounding boxes с различными параметрами для каждой ячейки Модель обучается предсказывать координаты, размеры и уверенность этих рамок, а также вероятность принадлежности к классам объектов После этого применя- ется алгоритм Non-Maxunum Suppression для отбора наиболее точных рамок и подавления дубликатов Этот процесс, в сочетании с функцией потерь, позво ляет YOLO эффективно обучаться распознаванию объектов на изображениях обеспечивая высокую точность и скорость их обнаружения 8 64 Практическое применение YOLO Практическое применение YOLO включает в себя несколько ключевых ша гов начиная от установки необход и заканчивая обработкой ре зультатов обнаружения Далее мы подробно рассмотрим эти шаги и приведем пример кода на Python для наглядной демонстрации Для функционирования программы с применением алгоритмов YOLO необ ходим о выполнить следующие шаги: 1 Установить необходимые зависимости, включая библиотеку Ultralytics и OpenCV
4 Запустить программу, передав ей изображение в качестве входных дай ных (например Gorodjpgf- 5 Обработать результаты обдаружения объектов на изображении, при необ ходимости Данная программа использует алгоритм обнаружения объектов yolovSl для анализа изображения "Gorod jpg" и вывода на экран результатов обнаружения, таких как рамки вокруг объектов. Строка from ultralytics import YOLO является инструкцией Python для им- порта класса YOLO из модуля ultralytics В контексте данного кода модуль ultralytics содержит реализацию обертки для работы с моделью YOLOv8, предо- ставляя удобный интерфейс для ее использования После выполнения этой строки класс YOLO будет доступен для использования в текущем файле Стоит заметить, что вместо модели YOLOvSl можно использовать любые варианты восьмой версии YOLOvSn, YOLOvSs, YOLOvSm, YOLOv81, YOLOvSx, которые представлены в предыдущем разделе Также можно версию модуля поменять, например, YOLOvSL Строка model = YOLOCydovSlpt) инициализирует модель YOLO, исполь зуя предварительно обученны евеса, указанные в файле 'yolovSl pt' В этой строке происходит создание экземпляра класса YOLO с параметрами, которые опреде ляют модель В данном случае, yolcvSlpf зредставляет собой файл, содержащий веса мо дели YOLOv81 Это может быть файл с предварительно обученными весами ко торыи был загружен из офззциапъмэго репозитория YOLOv8 или предварительно обученный вами на собственных данных. Строка results = modelfGoradjpg", shaw=Tme) вызывает метод__call_О объекта model, который применяет модель YOLO к изображению Gorodjpg с параметром shaw=True Здесь model переменная, которая содержат экземпляр класса YOLO кого рыи был создан на предыдущем шаге. Этот объект содержит методы и атрибуты для работы с моделью YOLOvSZ
изображению для обнаружения объектов на нем Show = True — параметр, указывающий на то, что результаты обнаружения объектов должны быть отображены на щображении. Если этот параметр уста новлен в True после обработки щображения модель отобразит изображение с обнаруженными объектами После выполнения этой строки,: : resuits будет содержать резуль таты обнаружения объектов, которые могут быть использованы для дальнейшей обработки или анализа Результат программы представлен на рисунке 8 26 Рисунок 8 2 6 - Результат выполнения программы с применением модели yolovBI Ниже предлагается рассмотреть еще один программный код. Данная про- грамма реализует детекцию объектов в реальном времени на видеопогоке с веб- камеры, применяя предварительно обученную модель YOLO Она обнаруживает объекты заданного класса (в данном случае, людей), отображает ограничиваю- щие рамки вокруг них на кадре, подсчитывает количество обнаруженных объек- тов, выводит эту информацию на экран, и все это в реальном времени, пока не будет нажата клавиша выхода Область применения дайной программы может варьироваться от систем ви деонаблюдения для подсчета людей и обнаружения подозрительной активности до автономного вождения для ориентации в пространстве, ана эдов, робототехники для иектуальных систем без опасности медицинской диагностики и даже умных домов для автоматизации управления на основе присутствия людей.
. , 1 , (II , .. I, , in , щ В контексте YOLO, bac (или ограничивающая рамка, bounding box) это прямоугольная область, которая ограничивает обнаруженный объект Box обычно представляется в виде списка или массива числовых значений, которые описывают его положение, разм ер и другие характеристики Вот что обычно вхо- дит a box • координаты обычно используются координаты левого верхнего угла (pi, у 1) и правого нижнего угла (х2 у2) Иногда ^пользуются координаты центра (x_center,y_center)H ширииаи высотаи’ий(вкодеЬас/&7, bac[i ], bax[2], Ьох[3]), • уверенность (Confidence Score) вероятность того, что в Ьах действи- тельно есть объект Это чжло обычно находится в диапазоне от 0 до 1 (в коде bax[4j), • идентификатор класса (Class ID) номер класса, к которому относится обнаруженный объект (например, 0 человек, 1 автомобиль, и т д ), • дополнительные параметры (опционально) в некоторых случаях могут присутствовать дополнительные параметры, например, углы поворота ограничивающей рамки (если: зриутые рамки) Помимо обнаружения объектов заданного класса, YOLO позволяет настра иватъ детекцию на несколько классов одновременно, изменять порог уверенно сги для фильтрации результатов, регулировать IoU порог NMS для оптимизации рамок использовать различные модели YOLO и размеры вход ных изображении обучать модель на собственных данных для специфических объектов интетри роватъ отслеживание объектов для видеолэтоков, масштабировать изображения и привязывать ограничивающие рамки к реальным размерам объектов а также настраивать отображение результатов
Задание 1 Напишите программу, применяющую 5 различных сверточных фильтров к входному изображению После цшменеиия каждого фильтра вьшол ните операцию максимального пулинга (max pooling) над полученными каргами признаков Визуализируйте карты признаков на каждом шаге для анализа эф фекга каждого фильтра и пулинга. Задание 2 Напилите программу, применяющую 5 различных сверточных фильтров к входному изображению После применения каждого фильтра вьшол ните операцию максимального лупинга (max pooling) над полученными каргами признаков Затем повторите процесс свертки с теми же или другими 5 фильтрами и максимального пулинга Визуалюируйте карты признаков на каждом этапе свертки и пулинга, сравнивая результаты первого и второго проходов, чтобы проанализировать, как меняется представление изображения после двух этапов обработки Задание 3 Напишите программу, которая принимает на вход изображение и обрабатывает его с помощью многослойной сверточной сети На первом этапе примените 5 различных сверточных фильтров к исходному изображению, а за- тем проведите операцию максимального пулинга (max pooling) для каждой по- лученнойкарты признаков Далее, повторите процесс примените другие 5 свер- точных фильтров (с другими коэффициентами ядер) к выходным картам призна- ков предыдущего слоя, снова выполните максимальный пулииг Продолжайте наращивать слои свертки и пулинга, используя на каждом новом слое новые наборы из 5 различных фильтров, до тех пор, пока размер карг признаков не ста- нет разным или меньше 8x8 Для каждой операции пулинга используйте размер окна 2x2 и шаг 2 (stride 2) Визуализируйте карты признаков после каждой пары слоев свертки и пулинга, чтобы проанализировать, как меняется представление изображения на разных уровнях сети и увидеть уменьшение их размера Про- комментируйте эффект добавления каждого иэвого слоя на пространственное разрешение и содержательность признаков Задание 4 Напишите программу с использованием метода YOLO8 разных моделей для видео, полученного с веб-камеры Проанализируйте работу данных методов и проведите их сравнение Задание 5 Напилите программу с использованием метода YOLO8 Накад ре оператор выбирает зону многоугольником Попадая в обозначенную зону объект идентифицируется красным прямоугольником, за пределами зеленым Задание б* Напишите программу для микрокомпьютера с использованием метода YOLO8 для видео, полученного с MIH камеры Проанализируйте работу метода
9. ВСТРАИВАЕМЫЕ СИСТЕМЫ КОМПЬЮТЕРНОГО ЗРЕНИЯ 9.1. Аппаратные ресурсы Для успешной реализации а ответсгвующая вычислительная 1 i компьютерного зрения требуется со ц возможности которой должны соот ветствоватъ сложности задачи и требованиям к производительности В этом раз деле мы рассмотрим основные классы аппаратных ресурсов, подходящих для этих целей перс 5Ы (ПК), микрокомпьютеры и микро контроллеры Каждый ш этих классов обладает своими характеристиками, пре имуществами и ограничениями, влияющими на применимость в задачах компь ютерного зрения ПК, как правило, предоставляют максимальную вычислитель- ную мощность и гибкость, но мотут быть избыточными и энергозатратными, осо- бенно для встраиваемых приложений Микрокомпьютеры, такие как Raspberry Pi и подобные ему, предлагают хороший баланс между производительностью, компактностью и энергоэффективностью, что делает их привлекательными для автономных систем компьютерного зрения Микроконтроллеры, например, STM32H750, LPC55S6, ХМС7200и другие, в свою очередь, обладают наимень- шей вычислительной мощностью, но отличаются крайне низким энергопотреб- лением и компактностью, что делает их пригодными для простых задач и прило- жений с жесткими ограничениями по ресурсам Далее мы рассмотрим некоторые из этих классов, выделив их характерные особенности и типичные сценарии ис- пользования Особую сложность представляет обработка данных в реальном времени В таких случаях алгоритмы должны быть оптимизированы с учетом ограничен- ных временных рамок, что может повысить требования к ресурсам Следова- тельно, компромисс между точностью алгоритмов и доступностью ресурсов яв ляется ключевым аспектом при проектировании систем компьютерного зрения Выбор аппаратных ресурсов для реализации алгоритмов компьютерного зрения зависит от конкретных задач и используемых методов обработки изобра женин Хотя на практике для разработки и тестирования часто используются ПК для встраиваемых решений чаще примени! отеры (МК) в силу их большей области применения В следующем разделе мы более детально рас смотрим требования к аппаратным ресурсам как персональных компьютеров так и микрокомпьютеров, применительно к задачам компьютерного зрения Персональные Компьютеры. Процессор (CPU) Мощный мт ый процессор с высокой частотой является основным компоненте*» для выполнения алгоритмов компьютерного зрения Многоядерные процессоры обеспечивают параллельную обработку данных
существенно повысить производительность. Оперативная память (RAM) Большой объем оперативной памяти необхо дим для эффективной обработки данных, особенно при работе с высокоразре шенными изображениями Хранение данных (SBD) Для быстрого доступа к данным, таким как модели машинного обучения и кэшированные изображения, предпочтительно использо ватъ твердотельные накопители Микрокомпьютеры Процессор (CPU) Микрокомпьютеры, такие как Raspberry Pi, обычно нс пользуют ARM процессоры Они обеспечивают эффективное эяергопотребле ние и являются приемлемым выбором для легких задач компьютерного зрения Оперативная память (RAM). Ограниченные ресурсы оперативной памяти на микрокомпьютерах могут потребовать оптимизации алгоритмов для работы в ограниченных условиях Хранение данных. Для микрокомпьютеров часто используется microSD- карта памяти в качестве среды хранения данных Микроконтроллеры Процессор (CPU). Микроконтроллеры используют различные ядра, чаще всего ARM Cortex-М (например, МО, М3, М4, М7), стактовой частотой от десят- ков до сотен мегагерц Вычислительная молиэстъ микроконтроллеров ограни- чена, что требует оптимизации алгоритмов и использования специализирован- ных аппаратных ускорителей Оперативная память (RAM) Микроконтроллеры имеют ограниченный объем оперативной памяти, часто от нескольких килобайт до нескольких мега- байт Это накладывает строгие ограничения на размер обрабатываемых данных и сложность используемых алгоритмов Встроенная Flash-память Используется для хранения программного кода и статических данных Объем Flash-памяти также ограничен Периферийные устройства Микроконтроллеры имеют широкий набор встроенной периферии, такой как АЦП, ЦАП, таймеры, UART, SPI, I2C, которые могут использоваться для взаимодействия с камерами, датчиками и другими внешними устройствами Таким образом, микрокомпьютеры занимают промежуточное положение между высокопроизводительными персональными компьютерами и маломощ золперами, обеспечивая сбалансиро ти, энергопотребления и стоимости ними, но энергоэффективными м ванное сочетание вычислительно для задач компьютерного зрения Среди основных причин, обуславливающих растущую популярность микро компьютеров в области компьютерного зрения, можно выделить следующие 1 Ценовая доступность микрокомпьютеры, как правило более доступны по цене по сравнению с более мощными персональными компьютерами Это осо бенно важно при создг компьютерного зрения или распределенных систем
для встраиваемых и мобильных приложений, таких как автономные роботы «умные» камеры дроны и другие портативные устройства 3 Интегрируемость микрокомпьютеры легко интегрируются в различные устройства и взаимодействуют с другими компонентами, позволяя создавать го зрения для широкого спек тра задач включая мониторинг, распознавание объектов, навигацию и многое другое 4 Гибкость и настраиваемость, мног® микрокомпьютеры предоставляют широкие возможности для настройки программного обеспечения и аппаратной конфигурации в соответствии с конкретными потребностями проекта, что обес печивает гибкость в разработке и настройке систем компьютерного зрения Существует множество микрокомпьютеров, предназначенных для различ ных цепей и задач Ниже: >ых известных микрокомпъ ютеров, упорядоченных от меньшей производительности к более мощным, с их основными техническим характеристиками В списке рейтинга представлены лишь несколько примеров на2024 год При этом рынок микрокомпьютеров постоянно развивается, предоставляя различные опции для разработчиков, инженеров и ученых При изучении компьютерного зрения нельзя обходить стороной видеока- меры Ниже приведены наиболее распространенные камеры, применяемые в компьютерном зрении USB-камеры (Universal Serial Bus) это камеры, подключаемые к компью- теру или другому устройству через интерфейс USB Они могут использо- ваться для видеоконференций, потоковой передачи видео, фотографии и других целей MIPI-камеры эти камеры использу ют MIPI Alliance стандарты для передачи данных между камерой и процессором или другими устройствами Они часто ис- пользуются в мобильных устройствах, таких как смартфоны и планшеты, атакже в других приложениях, таких хак автомобильные камеры и промышленные си стемы видеонаблюдения IP камеры (Internet Protocol)- эти камеры подключаются к сеги, обычно к сети Интернет, и передают видео- и аудиопоток через IP протоколы Они широко используются для систем видеожблюдения и безопасности, а также для удален ного наблюдения и контроля CCIV камеры (Closed Circuit Television) это аналоговые или цифровые камеры используемые в системах закрытого телевидения для видеонаблю дения Тепловизионные камеры они обнаруживают инфракрасное излучение что позволяет видеть объекты и сцены в у слови» а также обнаруживать тепловые аномалии. :ой освещенности или темноте
1 Arduino Uno • микроконтроллер ATmega328P (ядро AVR 16 МГц); • оперативная память 2 КБ SRAM, • входы выходы 14 цифровых, б аналоговых, USB, • производительность менее 0,001 GKLOPS, • применение проекты электроники, простые автоматизированные системы Не предназначен для обработки графических задач. Чаще применяют для обучения основам принципа систем авт ома - _ тики Не требуют глубокого знания электроники 2 Raspberry Pi Zero' • процессор Broadcom ВСМ2835 (1 ядро, 1 ГГц», • оперативная память 512 МБ RAM, • входы-выходы lx Micro USB, GP1O пины, Mini HDMI, lx MIPI • производительность около 0,002 GFLOPS, • применение проекты с ограниченными ресурсами и бюджетные задачи, устройства автоматического управления и контроля Простые задачи компьютерного зрения со статическими изобра- жениями 3 Raspberry Pi 3 Model А+ • процессор Broadcom ВСМ2837 (4 ядра, 1,4 ГГц); • оперативная память 512 МБ RAM, • входы выходы Ethernet, lx HDMI, 4х USB, GPIO пины, IxMJPI, • производительность около 0,1-0,2 GFLOPS, • применение проекты средней сложности, мультимедийные цен тры небольшие серверы системы типа «умный» дом, очень огра ничейные в производительности проекты на базе машинного зре
4 Orange Pi One • процессор Allwinner НЗ (4 ядра, 1,2 ГГц); • оперативная память 512 МБ RAM, • входы выходы Ethernet, HDMI, USB, GHO пины; • производительность около 0,2-0,3 GFLOPS, • применение проекты интернета микросерверов, медиацентры; системы типа «умный» дом 5 NanoPl М4 • процессор Rockchip RK3399 (2 ядра СоПех-А72,4ядраСоИехА53) до 2,0 ГГц, • оперативная память 4 ГБ LPDDR3 RAM, • входы-выходы Ethernet, HDMI, 4х USB 3 0, GP1O пины, 2х M1PI. • производительность около 0,4-0,8 GFLOPS, • применение проекты средней сложности, встраиваемые системы мультимедийные центры, системы, типа «умный» дом ограничен- ные по производительности проекты компьютерного зрения 6 . Raspberry Pi 4 Model В * процессор Broadcom ВСМ2711 (4 ядра, 1,5 ГГц Am Cortex-A72), • оперативная Память 2,4 или S ГБ RAM, • входы выходы Ethernet, 2х HDMI, 2х USB 3 0,2х USB 2 0, GPIO, 2хМП»1, производительность около 0,5-1 GFLOPS, применение мультимедийные центры, создание серверов для хранения данных и обмена ими, проекты в области искусствен ного интеллекта такие как разработка системы «умного» дома или автоматизированной аналитики данных, трименеяие компь ютерного зрения для создания систем видеонаблюдеяия или си стем распознавания образов
7 NVIDIA Jetson Nano • процессор Quad core ARM Cortex A57 (1,43 ГГц) GPU 128-core Maxwell GPU • оперативная память 4 ГБ RAM, • производительность около 0,5-1 GFLOPS, • входы выходы Ethernet, HDMI, 4х USB 3 О, GPIO, 2xMJPl, • применение мультимедийные центры, небольшие серверы; про екты в области искусственного интеллекта и компьютерного зре ния обеспечивая высокую производительность и эффективность вычислений (с CUDA процессором) 8 . OdroidXU4 • процессор Samsung Exynos 5422 (4 ядра Cortex-A15, 2 ГГц + + 4 ядра Cortex-A7,1,4 ГГц), • оперативная память 4или8ГБКАМх, • воды-выходы Ethernet, HDMI, USB 3 О, GPIO пины • производительность около 1 4-2 GF1OPS, • применение мультимедийные системы для потоковой передачи контента, небольшие серверы для хранения данных и выполнения вычислений, робототехника, проекты актом атизации и управления системами в реальном времени 9 Raspberry Pi 5 • процессор Broadcom ВСМ2712 (4 ядра, 2,4 ГГц, Arm Cortex-A76), • оперативная Память 8 ГБ RAM, • входы выходы Ethernet, 2х HDMI, 2х USB 3 0,2х USB 2.0, GPIO, 2х MIPI отдельный от GPIO интерфейс UART, • производительность около 0,8-1,8 GFLOPS, • применение мультимедийные центры, небольшие серверы; проекты
io Orange Pt 5 • процессор Rockchip RK3588S 8 ядер (4x ядра Cortex A76 2,4 ГГц, l 4x ядра Cortex A55 ] 8 ГГц), • оперативная память 8 ГБ LPDDR4 RAM, • входы выходы HDMI 2 О, USB 3 О, USB 2 0, Gigabit Ethernet 2х USB 3 0 2х USB 2 О, GPIO, 2х МТИ, отдельный от GPIO литер фене UART • производительность около 1-2,2 GFLOPS в зависимости от нагрузки, • применение мультимедийные центры с поддержкой 4К-видео, настройка небольших серверов для хранения данных и выполне- ния вычислений, реализация проектов в области искусственного интеллекта компьютерного зрения и иитернетавицей (1оТ) 11 NVIDIA Jetson Xavier NX. • процессор 6-core NVIDIA Carmel ARMv82 (6 ядер, 1,4 ГГц) GPU- 384-core Volta GPU, 48 Tensor Cores, • оперативная память 8 ГБ RAM, • входы-выходы HDMI, 4x USB 3 1, GPIO, 2x MIPI, • производительность около 3-4 GFLOPS, • применение передовые проекты в области искусственного интел- лекта и глубокого обучения, для создания автономных систем управления, для реализации решений в области компьютерного зрения, а также для развертывания высокопроизводительных1 мультимедийных центров и робототехнических платформ с вы числением в реальном масштабе времени (гуи условии включения _ CUDA процессора)
12 NVIDIA Jetson Опп • процессор 8 ядерныи NVIDIA Carmel ARMvS.2 (до 2^ ГГц), GPU NVIDIA Ampere c 1792 ядрами CUDA и 56 тежорными ядрами; • оперативная память 8-32 GB LPDDR5 RAM, • входы выходы HDMI 2 1, USB 3 2 Gen2, Gigabit Ethernet, РСЯе Gen4x8 GPIO MIPI CSI, CAN, UART, I2C, SPI, • производительность от 40 до 275 TOPS, • применение 1 Высокопротвводительиые вычисления для искусственного ин- теллекта и глубокого обучения, включая сложные модели компью- терного зрения, обработку естественного языка и распознавание 2 Робототехника автоиомиыероботы, дроны, манипуляторы, тре- бующие сложной обработки данных в реальном времени 3 Автономное вождение обработка данных с датчиков (камеры, лидары, радары) для навигации и принята решений 4 Медицинская визуализация анализ медицинских изображений с применением нейросетей 5 Промышленные системы автоматизации управление сложными процессами с использованием искусственного интеллекта______
чем у обычйь®1камер предназначенные для съемки экстремальных условии та ких как спортивные мероприятия, вождение автомобиля и др SD-камеры они позволяют снимать тображения с глубиной что полезно для трехмерной визуализации и анализа. Из всего перечня камер отдельно хочется отметить MIP1 камеры MIPI камеры (такжеизвестные как MIPI CSI2 камеры) вид камер исполь зующих MIPI (Mobile Industry Proc ic для передачи дай ных MIPI CSI 2 (MIPI Camera Serial Interface 2) является стандартным протоко лом интерфейса камеры, разработанным MIPI Alliance для соединения камер и других устройств в мобильных л встраиваемых системах MIPI камеры широко применяются в мобильных устройствах, таких как смартфоны и планшеты, для лолуче । и видео высокого качества Также MIPI камеры находят широкое применение во множестве встраивав мых систем, включая медицинское оборудование, автомобильные камеры, си схемы безопасности и другие спецжлизироваиные устройства MIPI-камеры активно используются в системах компьютерного зрения для таких задач, как распознавание объектов, навигация роботов, анализ изображе- ний и других приложений, требующих обработки видеоданных Интерфейс MIPI-камеры обычно включает в себя разъем для подключения к вычислительному устройству, такому как процессор или контроллер обработки изображений Для передачи данных юображеиия используется стандарт MIPI CSI-2, который обеспечивает высокую скорость передачи данных и низкое энер- гопотребление Пример MIPI-камеры, подключенной к микрокомпьютеру по интерфейсу CSI, приведен на рис !>]. Стоит отметить, что MIPI камеры не универсальны для каждого микроком пьютера есть свои набор этих: (для него Поэтому прежде чем начать работу с микрокомпьютером и MII’I камерой, необход имо узнать совме стимостъ этих устройств
• выс&&й-йачесгво изображения, достигаемое благодаря применению пе редовых оптических и датчиковых технологии, • низкое энергопотребление, обеспечиваемое использованием 1\'ПИ интер феиса, что особенно важно для мобильных устройств высокая скорость передачи данных, которую обеспечивает MIPI CSI 2 позволяя захватывать видео высокого разрешения с высокой частотой кадров, • низкая задержка при передаче изображений, что делает их идеальным вы бором для приложений, требующих быстрой реакции, таких как системы безопасности и автомобильные камеры В целом, MIPI камеры являются важным компонентом в области компью терного зрения, обеспечивая высокое качество изображения, низкое эяергопо треблеиие и высокую производительность передачи данных 9 .2. Выбор микрокомпьютера В предыдущих главах были рассмотрены фундаментальные концепции и алгоритмы компьютерного зрения, включая методы глубокого обучения Настоящая глаза посвящена переносу этих концепций в практическую область, а именно в развертывание систем компьютерного зрения на встраиваемых плат- формах Под встраиваемыми системами понимаются специализированные компьютерные системы, интегрированные в более крупные устройства или процессы, обладающие ограниченными ресурсами и предназначенные для вы- полнения узкого набора задач В данной главе будет представлен анализ выбора подходящих микрокомпьютерных платформ, таких как Raspberry Pi и NVIDIA Jetson Nano, рассмотрены аспекты настройки программного обеспе- чения и работы с периферийными устройствами, включая камеры Также будет уделено внимание программно-аппаратным архитектурам для ускорения вы- числений, в частности, CUDA, с целью оптимизации производительности и энергоэффективности приложений компьютерного зрения на встраиваемых платформах Для практической реализации систем компьютерного зрения в рамках встраиваемых систем, сфокусируем внимание на использовании микрокомпью терных платформ Микрокомпьютер это компьютер, который обладает компактным разме ром и низким энергопотреблением, но при этом способен выполнять различные вычислительные задачи Он часто используется во встраиваемых системах ро бототехиике медицинском оборудовании, «умных» домах, в военных техноло гиях и БИЛА а также в других областях, где требуется небольшой но досга точно мощный компьютер
портами тййвй^как USB, HDMI, Ethernet, GPIO (общий вход выход) что поз устройствами и сенсорами Они воняет им взаимодействовать с различ также могут быть оснащены различными модулями беспроводной связи такими как Wi F1 и Bluetooth Примеры популярных микрокомпьютеров достаточно подробно рассмот рены в предыдущем разделе 9 1 «Аппаратные ресурсы» Эти устройства часто используются для создания прототипов, DIY (сделай сам) проектов учебных це леи и реализации различных систем автоматизации и управления При реализации систем компьютерного зрения в различных областях таких как беспилотная авиация, железнодорожный транспорт, автотранспорт и другие выбор подходящего микрокомпьютера играет ключевую роль в обеспечении эф фективной работы системы При выборе микрокомпьютера необходимо учиты вать несколько ключевых критериев Производительность микрокомпьютер должен обладать достаточной вы числительной мощностью для обработки изображений в реальном времени и вы полнения сложных алгоритмов компьютерного зрения Надежность в контексте применения в транспортных системах, микроком- пьютер должен быть надежным и обеспечивать стабильную работу даже в усло- виях вибраций, температурных изменений и других экстремальных факторов Малые размеры и низкое энергопотребление важно выбирать компактные и энергоэффективные микрокомпьютеры, которые легко можно интегрировать в транспортные средства без значительного увеличения их габаритов или энерго- потребления Поддержка необходимых интерфейсов и дополнительных устройств мик- рокомпьютер должен им етъ необходимые порты и интерфейсы для подключения камер, сенсоров и .других устройств, необходимых для работы системы компью- терного зрения Цена выбранный микрокомпьютер должен соответствовать бюджету про- ектаи обеспечивать оптимальное соотношение цены и качества При выборе конкретного микрокомпьютера для системы компьютерного зрения в транспортной отрасли, необходимо провести тщательное сравнение до ступных моделей и учитывать специфические требования и условия эксплуата ции в конкретной области прзяиенеиия Важно также учитывать возможность расширения и дальнейшего развития системы, чтобы обеспечить ее долгосроч ную эффективность и актуальность При написании программ компьв для микрокомпьютеров далее будем использовать две популярные на 2024 год модели Raspberry Pi 5 и Jetson Nano Raspberry Pi 5 представляет собой доступный и надежный вариант подхо дящии для лтирокого спектра задач компьютерного зрения С другой стороны, Jetson Nano обладает высокой производительностью и специализированными возможностями для работы с нейросетевыми алгорит мами
Raspbeny И-^Зйбдходит дня общих'задач, в то время как Jetson Nano если ис пользовать его видеопроцессор, может бьгтыфедоочтительным для более слож ных проектов требующих высокой производительности Для начала работы с этими устройствами необходимо рассмотреть их ком плект выходов и интерфейсов на плате Эго поможет правильно распорядиться ресурсом микрокомпьютера. Raspbeny Pi 5 (рис 92) оснащен процессором ВСМ2712 Cortex А76 с так товои частотой 2 4 ГГц и видеокартой VideoCore VII, работающей на частоте 800 МГц и поддерживающей OpenGL ES 3 1 и Vulkan 1 2, обеспечивая вывод на два HDMI порта с разрешением 4К@60 с HDR, при этом доступны варианты опера тивной памяти от 1 до 8 ГБ rnnaLPDDR4X-4267 SDRAM, расширяемой через microSD илиМ 2 NVMeSSD через М2 HAT, интерфейсы USB включают 2 порта USB 2 и 2 порта USB 3, атакже имеются гигабитный Ethernet, поддержка Wi Pi 802 11 ас и Bluetooth 5IELE, кнопка включения и различные порты для подклю чения различных устройств, питание осуществляется через USB-С, РоЕ через РоЕ+ HAT или по GPIO. GPIO (General Purpose Input/Output общий ввод^ывод) это 40 пиновыи разъем позволяющий пода ; устройства, такие как датчики све тодиоды дисплеи, моторы и многое другое Распиновка его выводов представ ленана рис 9 3 Сам по себе GPIO является дискретным портом То есть он мо жет управлять двоичным состоянием объектов (включить/выключить двигатель) или контролировать их двоичное состояние (контроль состояния кнопки или тумблера)
Рисунок 9 3 - Распиновка выводов GPIO Raspberry Pi 5 Однако выводы GPIO Raspbeny Pi 5 имеют множество альтернативных назначений, а именно интерфейсов для взаимодействия с внешними устрой- ствами 1 UART (Universal Asynchronous Receivei/Transmitter) 3 порта Использу- ется для последовательной связи с другими устройствами, такими как микроконтроллеры, датчики, модемы и т д. 2 SPI (Serial Peripheral Interface! 2 порта Позволяет подключать перифе- рийные устройства с последовательным интерфейсом, такие как дисплеи, сенсоры, память и другие 3 I2C (Inter-Integrated Circuit) 1 порт Используется для подключения к устройствам, работающим по шине ЕС, таким как сенсоры, дисплеи, EEPROM и другие 4 PWM (Pulse Width Modulation). Позволяет изменять ширину импульсов для управления интенсивное моторов и другими аналогов одиодов, скоростью вращения Для задач компьютерного зрения важнейшим узлом платы является нигер феис CSI для подключения MIPI камеры О его достоинствах мы говорили в предыдущем разделе В модели Raspberry Pi 5 разработчики отошли от стаи дартного интерфейса CSI в пользу >го назначения CSI/DSI включив дополнительные пинии для подключения дисплеев Для подключения камеры важно правильно подключить шлейф к камере и к плате микрокомпью тера. На рис 9 4 представлен пример правильного подключения MIPI камеры к плате микрокомпьютера Стоит заметить что в настоящий момент уже стало стандартом оборудовать платы микрокомпьютеров двумя разъемами для подключения MIPI камер Это дает возможно реализовывать проекте на базе стереозрения
Рисунок 9 4 - Соединения MIPI камеры с платой Raspberry Pi 5 Что качается Jetson Nano (рис 9 5), то оя оснащен процессором NVIDIA Cannel четырехвдериым Cortex А57 с тактовой частотой до 1,43 ГГц и трафиче сжим процессором NVIDIA Maxwell со 128 ядрами CUDA, работающим на ча стоге до 921 МГц Он обеспечивает поддержку вывода видео с разрешением до 4К с частотой до 60 Гц через интерфейсы HDMI и DisplayPort SDRAM обеспечивая высокую производателыюстъ и эффективность в ра боте с данными Помимо этого, он также поддерживает расширение памяти че рез microSD слот Устройство обладает богатым набором интерфейсов включая 4 порта USB 3 1 Genl порт Gigabit Ethernet для быстрого подключения к сети а также Wi F1 802 11 ас и Bluetooth 5 0 для беспроводного соединения
меры дисплеи и датчики Питание Jetson Nano осуществляется через разъем USB С, а также возможно использование РоЕ (Power over Ethernet) через соответствующий адаптер NVIDIA мудро решила сохранить расположение GPIO на Jetson Nano таким же как у Raspberry Pi 4В и у Raspberry Pi 5 (рис 9 3) Этот стратегический ход обеспечивает легкую совместимость с широким спектром модулей расширении и аксессуаров для Raspberry Pi, что дает NVIDIA конкурентное преимущество в захвате рынка Кроме того, они разместили разъем GPIO J41 таким образом что модули расширения могут выступать наружу, поскольку на плате недостаточно места для их размещения, в отличж от Raspberry Pt Также разъемы интерфейсов CSI для подключения MIPI камер и сами ка меры у моделей Raspberry Pi 4 и Jetson Nano одинаковые Это позволяет исполь зоватъ весь ассортимент камер на обеих платформах Правильное подключения MIPI-камеры к микрокомпьютеру Jetson Nano представлен на рис 9 б Хочется отдельно обратить внимание на семейство Jetson ина его не совсем справедливое место в рейтинге, который приведен выше Эта одноплатные ком пьютеры выделяются среди многих своим высокопроизводительным аппарат ным обеспечением Они оснащены мощными графт торые обеспечивают быструю обработку данных, осс ми процессорами ко । в области машинного обучения и искусственного интеллекта. Jetson Nano оснащен графическим про цессором NVIDIA Maxwell с архитектурой CUD А который обладает 128 ядрами и способен обрабатывать параллельные вычисления с высокой эффективностью Это делает его превосходным выбором для задач компьютерного зрения обра ботки видео и графики Производительность этого микрокомпьютера составляет около 472 GFLOPS1 А производительность NVIDIA Jetson Xavier NX с примене нием графического процессора с 384 ядрами и вовсе достигает 21 TOPS И это не придел* Jetson Опп это флагманская линейка Jetson, оснащенная мощными графи ческими процессорами NVIDIA Ampere с архитектурой CUDA что обеспечивает
пениях из ЗЬ4 В зависимости от модели (Jetson Опп Nano, NX, AGX) графический про цессор включает в себя до 1792 ядер CUDA идо 56 тензорных ядер Это позво ляет достичь производительности от 40 до 275 TOPS (’) (триллионов операции в секунду) для задач искусственного интеллекта и глубокого обучения Такая производительность делает Jetson Опп идеальным выбором для самых передо вых задач в области компьютерного зрения, обработки естественного языка ав тономного вождения и робототехники. 9 .3. Установка и настройка окружения Raspberry Pi 5 поддерживает несколько операционных систем, включая офи циальиую Raspbeny Pi OS (ранее Raspbian), Ubuntu, Fedora, Arch Linux ARM, и Gentoo Они предоставляют разные уровни гибкости и функциональности, поз воляя выбрать наиболее подходящий вариант в зависимости от потребностей Варианты включают как общедоступные, так и более настраиваемые исходные коды, обеспечивая широкий спектр возможностей для разработки и использова- ния Raspbeny Pi 5 Далее рассмотрено практическое руководство по установке операционной системы на микрокомпьютер Предварительно необходимо подготовить и подключить к компьютеру чи- стую SD-карту Для установки операционной системы на Raspbeny Pi необходимо загрузить и установить специальную утилиту, известную как Raspberry Pi Imager (рис 9 7) Наличие данной утилиты является еще одним достоинством применения микро- компьютеров Raspbeny Pi Ее можно скачать с официального сайга Если вы ис- пользуете Ubuntu, то можете установить ее «посредственно из репозитория ко- мандой sudo apt install rpi-imager. Ж Raspberry PI
Рисунок 9 3- Выбор микрокомпьютера Затем необходимо указать тип операционной системы, которую вы хотите установить (например, Raspbeny Pi OS (64-битиый)) (рис 9 9) Затем необходимо указать SD карту, на которую предусмотрена установка операционной системы (рис 910) После чего нажать кнопку «Записать» и дождаться завершения процесса установки.
Рисунок 9 10 - Выбор SD-карты для установки операционной системы После этих манипуляций карту можно подключить в разьем Raspbeny Pi Также необходимо подключить клавиатуру, мышь и монитор к микрокомпью- теру и включить устройство Дальнейшая настройка операционной системы заключается в выборе реги- она, временной зоны, языковых параметров, подключении к сети Wi-Fi После чего можно установить другие пользовательские трограммы Для Jatson Nano процедура установки операционный системы отличается лишь тем, что специальной программы для ее установки на момент написания книги не было Но процедура не становится сложнее Образ операционной си- стемы нужно предварительно записать из файла, который напрямую скачан из официальных источников, например, https //developer nVidia сот/ Затем запи- сать образ карты памяти посредством утилиты Win32Dtsklmageг 9 .4. Работа с камерой Когда речь идет о разработке алгоритмов компьютерного зрения, предпо чтительнее использовать М1Р1 камеру вместо USB камеры с микрокомпьюге ром Напомним, MIPI (Mobile Industry Processor Interface) это стандартный про токол для передачи данных изображения ат камеры к процес устройствах и встраиваемых системах. Использование MIPI эру в вает более надежную и эффективную передачу изображений непосредственно в микропроцессор, минимизируя задержки и упрощш процесс обработки изоб ражении В отличие от USB камер, подключаемых через стандартный интерфейс USB MIPI камеры интегрированы более тесно с аппаратными ресурсами микро компьютера, что обеспечивает более высокую производительность и качество обработки изображений Это особенно важно прирешении задач компьютерного
сцен из 364 Таким образом при разработке алгоритмов компьютерного зрения рекомен MIPI камеры с микрокомпьюте дуется отдавать предпочтение: ром Raspberry Р15 и Jatson Nano дня достижения оптимальной производительно сги и качества обработки изображений. Для работы с USB и MIPI камерами на микрокомпьютерах существует не сколько популярных библиотек на языке Python picamera это официальная библиотека для работы с камерами Raspberry Pi Она обеспечивает простой и гибкий интерфейс для управления камерой съемки фотографий и записи видео Поддерживает как стандартные камеры, так и мо дули камер с интерфейсом MIPI camera resolution (640, 480) OpenCV это широко используемая библиотека компьютерного зрения, ко- торая поддерживает работу с изображениями и видео из различных источников, включая камеры С синтаксисом открытия камеры мы уже знакомы из прошлых тем работы веб-камеры на ПК import cv2 cap cv2 VideoCapture(0) Pygame это библиотека для создания компьютерных игр, но она также мо- жет быть использована для работы с видео и захвата изображений с камер pygame pygame (640, 4В0>> Эти библиотеки предоставляют различные возможности для работы с каме рами на Raspbeny Pi 5 и Jatson Nano в Python, и выбор зависит от конкретных требовании проекта и уровня вашего опыта. Остановимся на библиотеке PtCamera. библиотека PiCamera была разрабо тана командой Raspbeny Pi Foundation Эта организация является создателем и разработчиком микрокомпьютеров Raspbeny Pi, включая Raspbeny Pi 5 и ак тивно работает над подд юго обеспечения и инструментов для их использования PiCameru предоставляет простой и удобный интерфейс для
яыми для ИВтйфбкого круга пользователей, включая начинающих разработ чиков и энтузиастов А в конце 2022 года Raspberry Pi Foundation выпустила более продвинутую версию библиотеки изд названием PiCamera2 Это об новление включает в себя. [ и улучшения которые рас ширяют возможности работы с камерами на микрокомпьютерах Raspberry Pi (https //datasheets raspberrypl com/camera/ picamera2 manual pdf) Разработчик библиотеки PiCamera2 рекомендует начать с обновления до последней версии Raspberry Pi OS Самый простой способ сделать это загрузить образ Raspberry Pi OS с лзмощью инструмента Raspberry Pi Imager (рассмотрен в предыдущем разделе) для записи на microSD карты С середины сентября 2022 года РкатегаЗ предустановлен во всех образах Raspberry Pi OS Вы можете обновить его с помощью полного обновления системы или через терминал с помощью команды sudo apt install -у python 3-picamera2 Для пользователей Raspberry Pi OS в этом пакете будут содержаться все за- висимости для GUI, ио они будут опущены в Raspberry Pi OS Lite Если пользо- ватели OS Lite хотят использовать эти функции, они должны выполнить следу- ющую команду sudo apt install -у python3-pyqtS pyihon3-opengl Если вы столкнулись с системой без ц-едустановленного Picamera2, пожа- луйста, используйте sudo apt install -у python3-picameni2 для его установки со всеми зависимостями GUI, или sudo apt install -у pyihon3-picamem2 -no-insiall-recommends для установки без них Библиотеку Picamera2ttaone можно установить с помощью pip Однако раз- работчик не рекомендует это, потому что основная библиотека libcamera яе ста- бильна в отношении АВ] (бинарного интерфейса приложений), поэтому воз- можны несовместимости версий Bicameral и libcamera Если вы всегда устанав- ливаете через apt, то все эти зависимости управляются за вас Если вы все же хотите продолжить, обратите внимание, что версии Ptcamera2 после 0 3 12 несовместимы с Raspberry Pi OS Bullseye, если вы не хотите также ком пилировать свою собственную версию libcamera, что выходит за рамки этого руко водства. В какой то момент даже это i >, если ядро Linux про должит развиваться Так что в краткосрочной перспективе процесс будет намного безопаснее, если вы используете самую последнюю версию Raspberry Pi OS Если вы все равно хс обходимые зависимости , убед итесь что у вас есть не sudo apt install -y python 3-libcamera python3-kms<. sudo apt install -y python3-prcd iibatlas-base-dev ffmpegpython3-pip sudo apt install -y python3-pyqt5 python3-opengl ptp3 install nutnpy —upgrade
ptp3 iitffi£!fhcamera2~ и контроля при работе с ельнои для разработчиков , что делает ее I ганимаютцихся проектами, связанными с компьютерным зрением робототехии Рассмотрим некоторые функции и атрибуты этой библиотеки resolution этот атрибут позволяет установить разрешение (ширину и вы ') кадра ввдео framerate этот атрибут позволяет установить кадровую частоту ввдео то . количество кадров в секунду start_preview этот метод запускает превью силил с камеры, который можно использовать для настройки кадра и других параметров перед началом записи stop preview этот метод останавливает превью сигнале камеры start_recording- это метод для запуска записи ввдео stop_recor<Ung это метод для остановки записи ввдео start_prevlew(fiiUscreen=Faise, ivindow=(0, Ц 1024, 768)) метод для запуска превью сигнала с камеры Можно указать параметры для отображения г^евью в полноэкранном режиме или в окне с определенными размерами preview configuration mam format: эта кожтрукция представляет собой часть объекта preview_configitration, который используется для настройки пара метров превью (предварительного просмотра) в библиотеке PiCatnera. В данном случае мы обращаемся к нолю format, которое определяет формат отображения превью на экране или .другом устройстве вывода. Название татъ этой конструкции указывает на основное окно таковое существует В некоторых случаях может быть несколько с различными параметрами, но обычаэ основное окно называется п Теперь давайте разберемся с параметром format Этот парамет формат в котором будет отображаться треиью Например, значение вает на использование формата RGB для пренью
представляй? ?&бои размеры т окне В библиотеке PiCamera: основное окно в котором отоб ьного просмотра) в главном ме с камеры и высоту Например, значение (640,480) указывает на размер превью в 640 пик селей по ширине и 480 пикселей по высоте Настройка размеров пре сгво и размер изображения, пю контролировать каче >ся на экране в процессе предварительного просмотра. Эго полезно для адаптации превью к требуемым размерам и разрешениям экрана, а также для оптимизации производительности и эффективности работы с камерой Raspbeny Pi Используя preaiew_configuratK»ijnauisize, мы можем настроить размеры превью в соответствии снашими потребностями и предпочтениями, обеспечивая тем самым удобство и оптимальное качество предварительного просмотра при работе с камерой Эта и другие функции позволяют настраивать различные параметры видео- записи с камеры на микрокомпьютере Raspbeny Pi с помощью библиотеки PiCaniera2, обеспечивая гибкость и контроль над процессом записи видео Рассмотрим применения этой библиотеки на примере следующего кода (в данном случае используется Camera Modul 3) import cv2 Данная программа является минимальным набором инструкции для работы с MIPI камерон Она представляет собой функции захвата изображения и цикли ческого считывания кадров с камеры
взять следуй&ййй код оказываем кадр ие Данная программа захватывает видеопоток с камеры MIPI с разреше нием 1280*720 и частотой 30 кадров в секунду Она использует библиоге ки OpenCV и Picamera2 для управления видеопотоком и отображения его в ре альном времени на экране компьютера Данный пршер может служить в каче стве основы для наращивания программы, входными данными которой являются данные с MIPI камеры Ниже представлен ещз один шаблон программы, который может быть ис пользован уже для микрокомпьютера Jatson Nano Основой этого шаблона явля егся применение фреймворка GStteame. В предложенной ниже программе GSVTREAMER PIPELINE это строка, ко торая описывает последовательвэсгь обработки видеопотока с помощью
элементы GStreamer и их параметры, которые определяют, как видео будет за хватываться обрабатываться и передаваться программе для дальнейшей обра Каждый элемент в этой строке выполняет определенную функцию Напри мер marguscamerasrc указывает на использование камеры Nvidia Jetson Nano video/x raw определяет формат входного видеопотока, mvtdcom выполняет кон вертацию формата видео, a appsink представляет собой элемент, который позво ляет программе получать кадры тв видеопотока для их дальнейшей обработки в OpenCV cap - cv2 VideoCapture(6STREAMER_PIPELINE, cv2.CAP_eSTRBAMBR) while True ret, frame - cap.read О Эта протрамма использует библиотеку ОрепСУ для захвата видеопогока с камеры Raspberry Pi, подключенной к Jetson Nano Она устанавливает GStreamer Pipeline (потоковую конвейерную схему GStreamer) для обработки видеопогока от камеры Следующий пример также использует библиотеку OpenCV для захвата ви деопотока, но теперь для двух камер одновременно
width=640 CAP_GSTRE AMER) CAP_GSTRE AMER) В программе две переменные GSTREAMER PIPELINE 0 и OSTREAMER PIPELINE l, каждая из которых содержит GStreamer Pipeline для каждой ка- меры Каждый поток обрабатывает видео с определенной камеры (sensor-td=0 для первой и sensor-id=) для второй) В целом MIPI-камеры обычно предпочтительнее USB-камер из-за своей вы- сокой пропускной способности, скорости передачи данных и низкой задержки, что делает их идеальным выбором для приложений реального времени Эти ка- меры обеспечивают стабильную и надежную передачу видеопогоков высокого разрешения и частоты кадров даже в условиях высокой нагрузки В сравнении с USB-камерами, MIPI-камеры показывают более высокую производительность и меньшую задержку, что особенно важно для приложений, где даже небольшая задержка может быть критичной 9 .5. Программно-аппаратная архитектура CUDA CUDA (Compute Unified Device Architecture) это программно аппаратная патформа параллельных вычислений, разработанная компанией NVIDIA для спользоваиия их графических процессоров (GPU) в качестве вычислительных ' на позволяет программистам писать программное обеспечение ко >ффективж :пьные ресурсы GPU для уско г об иля, который может вы дач одновременно CUDA это специальный язык про >тй позволяет вам «написать инструкции» для этого двига чтобы он могрешать сложные задачи быстрее чем обычный центральный процессор (CPU).
эни могли выполняться параллельно на GPU Эго позво! ютерного зрения i мыми в реальном могут работать быстрее и эффективнее, • I времени н в более сложных сценариях ая эффективность достигается за счет наличия большого количества эрных ядер (например, 128 для Jetson Nano) И если все они задеиство что программа или ап зует полную вычисли ющностъ графического процессора Каждое ядро GPU представляет эльшой вычислительный движок, способный выполнять операции од повременно с друпии ядрами Использование всех 128 ядер означает, что задача или программа разбива ется на множество маленьких частей, которые могут быть выполнены парал дельно на каждом ядре. Это позволяет значительно ускорить вычисления, по скольку множество операций может быть выполнено одновременно, в отличие от последовательного выполнения на центральном процессоре (CPU) Таким образом, когда CUDA жпользует все 128 ядер, это означает, что про- грамма оптимально использовала возможности параллельных вычислений на GPU, что привело к более быстрой и эффективной обработке данных Сравним производительность выполнения алгоритма компьютерного зре- ния на Jetson Nano без использования CUDA и с использованием CUDA Предположим, реализуется алгоритм обнаружения объектов на изображе- нии с использованием нейронной сети YOLO Этот алгоритм требует интенсив- ных вычислений, поскольку он анализирует каждый пиксель изображения для обнаружения объектов Без CUDA, Jetson Nano будет использовать свой центральный процессор (CPU) для выполнения вычислений Предположим, что его CPU может выпол- нить 0 5 GFLOPS (0,5 миллиарда операций с плавающей запятой в секунду) А если использовать CUDA на Jetson Nano, который имеет GPU с произво дительностъю около 472 GFLOPS, можно значительно ускорить вычисления Для примера, допустим, что алгоритм обнаружения объектов на изображе нии без CUDA занимает 1 секунду на Jetson Nano А если переписать этот алгоритм, используя CUDA, то он будет работать на GPU в сотни раз быстрее, а время выполнения сократится до 0,01 секунды Таким образом, использование CUDA на GPU позволяет существенно уве личить производительность алгоритмов компьютерного зрения делая их быст рее и более эффективными в обработке изображений в реальном времени Однако стоит заметить, что горы поддерживаемые CUDA доступны далеко не на всех микрокомпьютерах Наиболее распростра ценными микрокомпьютерами с поддержкой CUDA являются устройства от NVIDIA такие как серия Jetson (тпример, Jetson Nano Jetson Xavier) Они
Однако многие другие микрокомпьютеры, такие как Raspberry Pi не имеют встроенных GPU с поддержкой CUDA Вместо этого они обычно оснащены ин (GPU), которые могут быть нс тегрированными гра пользованы для некоторых видов тираллельных вычислении, но без поддерж Для микрокомпьютеров без поддержки CUDA программисты могут исполь зовать альтернативные инструменты и библиотеки, такие как OpenCL или биб лиотеки машинного обучения, специально адаптированные для работы на цен тральном процессоре (CPU) или на других доступных вычислительных устрой ствах Эти альтернативы могут обеспечить некоторую степень параллелизма и ускорения, ио обычно не такую высокую, как при использовании CUDA на специализированных устройствах, таких как устройства Jetson Именно наличие поддержки CUDA ю микрокомпьютерах, таких как устройства Jetson от NVIDIA, делает их весьма востребованными в области вы- сокопроизводительных вычислений, особенно в контексте компьютерного зре- ния и машинного обучения Такие устройства находят применение в различных областях, включая же- лезнодорожный транспорт (автоведение и обнаружения опасных ситуаций), аз- томобильную промышленность для разработки автономных транспортных средств, медицину для обработки медт :ний и анализа данных, а также в научных исследованиях для выполнения вычислительно сложных экс- периментов Благодаря высокой производительности и эффективности обработки дан- ных, микрокомпьютеры с поддержкой CUDA остаются важным инструментом в сфере высокопроизводительных вычислений, привлекая внимание и приме- нение различных индустрий и исследовательских групп 9 .6. Настройка CUD А на микрокомпьютере Jetson Nano Какбыло отмечено выше, Jetson Nano один из немногих одноплатных мик рокомпьютеров, который поддерживает CUDA. CUDA это архитектура парал NVIDIA, которая позволяет использовать графические процессоры для ускорения обработки данных Jetson Nano осна щенныи графическим процессором NVIDIA, поддерживает эту технологию Чтобы начать использовать CUDA на Jetson Nano, потребуется установить необходимые библиотеки и инструменты, которые можно загрузить с официаль ного сайта NVIDIA После сть и компилировать про граммы используюлще CUDA, и выполняй. их на Jetson Nano для ускоренных вычислении Для включения CUDA следует выполнить такие пункты 1 Выбрать репозиторий, кодер: и скрипты для сбор ки библиотеки OpenCV на Jetson Nano Этот репозитории содержит 304
CUBSt'SA Jetson Nano Дия этого следует перейти на сайг и скопировать актуальную ссылку (рис. 911); hups //giikub com/mdegansnaHo_butld_opencv Рисунок 9 11 - Внешний вид странички репозитория 2 Следующий шаг позволит клонировать репозиторий с необходимыми скриптами для сборки ОрепСУ на Jetson Nano Для этого следует ввести команду gil clone в терминале и вставить в нее с буфера скопированную ссылку (рис. 9 12Х gilclone hups./ giihub commdegansi'nano_builii_opencv git Клонирование репозитория позволит легко получить доступ к скриптам и инструкциям которые нужны для успешной сборки ОрепСУ с поддержкой CUDA После выполнения этой команды появится локальная копия репозитория с которой можно работать После того как операция клонирования завершится, вы сможете перейти в склонированную директорию и приступить к следующим шагам в инструкциях 3 Далее в терминале следу ег ввиггикомалду cd Этоле реведет в директорию nano_build_op&icv, которая была создана после клони
4 На этом этале можно убедиться, в каком статусе CUDA на компьютере включен/выключен Команда jtop или sudo jtop запускает инструмент монито ринга ресурсов для Jetson, который позволяет отслеживать использование CPU GPU памяти и других ресурсов Она также может отображать информацию о использовании CUDA После выполнения этой команды вы сможете увидеть, используется ли CUDA в процессах связанных с OpenCV (рис. 9 13) Если CUDA успешно под ключей к OpenCV^ вы увидите, что процессы OpenCVиспользуют GPU для уско рения вычислений. Если JTOP не был установлен, вы это можете сделать, выполнив команды в терминале sudo apt-get update sudo apt-get install python 3-pq> руЛопЗ-setuptoois pylhon3-wheel sudo pip3 install jetson-stats sudo jtop 5 Далее командой gedit buildopencvsk открываем скрипт build_opencv sh в текстовом редакторе Gedit Этот скрипт содержит инструкции для сборки биб лиотеки OpenCV с поддержкой CUDA на Jetson Nano После открытия файла build_opencv sh следует ознакомиться с его содержи мым Этот скрипт содержит команда для загрузки необходимых зависимостей конфигурации OpenCV с поддержкой CUDA и его последующей сборки В этот скрипт нужно внести изменения. 6 Находим строки и вносим шменения (рис 914) Строку D CUDAARCHBIN—5 3,6.2,?.2,8 7 следует заменить на строку D CUDAARCHB1N-5 3,62,32. Строку D CUDNN_VERSION-'8 0’ следует заменить на строку D CUDNNVERSION-'S^'
Эти изменения позволят настроить сборку OpenCV с поддержкой нужных версии архитектуры CUDA и библиотеки cuDNN После этого можно запустить скрипт сборки для обновления OpenCVс новыми параметрами 7 Далее производим проверку замены в файле^д dtff Git покажет разницу между текущим состоянием файлов и их последней фиксацией Если вы внесли изменения, как описано в шаге 6, вы увидите соответствующие изменения в вы- воде git diff 8 Далее следует запустить скрипт сборки build_opencv.sh с указанием вер- сии OpenCV (в данном случае 4 8 0), команда . buiid_opencv sh 4 &0 Этот скрипт будет компилировать и устанавливать OpenCV с поддержкой CUDA на Jetson Nano Сборка OpenCV может занять некоторое время, в зависимости от производительности вашего устройства и выбранных опций сборки Обычно, ожидаемый промежуток времени для сборки OpenCV составляет около 5 7 часов Может потребоваться вводить пароль периодически, особенно если необходимо установить пакеты или выполнить действия, требующие при- вилегий суперпользователя Кроме того, важно позаботиться, чтоб Jetson Nano был подключен к источнику питания и имел достаточно свободного места на диске для сборки OpenCV Также следует не забывать периодически прове- рять процесс сборки, чтобы убедиться, что он проходит успешно 9 На данном этапе следует повторить пункт 4 и убедиться, в каком стату се CUDA находится теперь на компьютере включеи/выключен При успешной установке CUDA будет включен (рис. 9 15). После установки CUDA и проверки, что он успешно включен вам откры ваются широкие возможности для разработки и запуска приложений использу ющих GPU для ускорения вычислений. Вот несколько рекомендации что можно сделать дальше Важно изучить документацию по CUDA, доступную на официальном сайте NVIDIA Это поможет: , архитектуру и функциональ ные возможности CUDA Также рассмотреть другие обучающие материалы и примеры кода, предоставляемые NVIDIA и сообществом чтобы освоить навыки написания и запуска программы на CUDA Множество ресурсов до сгупно онлайн включая офищвльные примеры и учебные курсы
Рисунок 9 15 - Проверка подключения CUDA в программе ЛОР кроме того, следует начать разработку собственных приложении, использу ющих CUDA для ускорения вычислений. Эго может быть что угодно от науч- ных вычислений и обработки данных до графических приложений и машинного обучения Следует изучить другие методы оптимизации программ для работы на GPU Эффективное использование ресурсов GPU может значительно увеличить про- изводительность приложений. Важно уделять внимание теспфоваиик» и отладке CUDA-приложений Ис- пользуйте инструменты, такие хак NVIDIA Nsight и CUDA GDB, для профили- рования, отладки и оптимизации вашего кода Также следует отметить хороший опыт обращения за помощью в сообще- ство разработчиков CUDA Форумы NVIDIA и другие онпайн-ресурсы могут предложить поддержку и советы по различным аспектам разработки на CUDA Необходимо рассмотреть возможность участия в исследовательских проек- тах или соревнованиях, которые используют CUDA Это отличный способ при- менить навыки и получить опыт в разработке высокопроизводительных прило жений Следует экспериментировать и искать новые способы использования CUDA в проектах Хорошо изучив основы и практические аспекты разработки на CUDA, вы можете создавать мощные и эффективные программы для различ ных целей. Практическое задание Задание 1 * Разработайте программу для микрокомпьютера, которая одно временно отображает два видеопэтока в отдельных окнах один с веб камеры второй с MIPI камеры Убедитесь в корректной работе захвата и отображения с обоих источников Задание 2* Реализуйте программу для микрокомпьютера, использующую алгоритм отслеживания объектов Программа должна позволять пользователю
ванне в реяйг^^еальногсгврвяеяи; Задание 3* Напишите программу для микрокомпьютера которая в реаль ном времени распознает людей и автомобили на видеопотоке поступающем с MIPI камеры Результатом работы программы должны быть визуализированные рамки вокруг обнаруженных объектов с указанием их типа Задание 4 * Выполните настройку и подключение CUDA на микрокомпью тере согласно рекомендациям, представленным в разделе 9 5 Найдите и залу отите демонстрационную программу, использующую CUDA процессор для ускорения вычислений Убедитесь в корректной работе CUDA и продемонстри руите ускорение вычислений Задание 5* Проведите сравнительный анализ производительности про траммы реализующей алгоритмы компьютерного зрения, с использованием и без использования CUDA-процессора микрокомпьютера Задокументируйте ре зультаты тестирования, включая время выполнения и потребление ресурсов, для оценки влияния аппаратного ускорения на производительность Задание 0* Разработайте программу для микрокомпьютера, которая объ- единяет несколько алгоритмов компьютерного зрения Программа должна осу- ществлять захват видеопогока с веб-камеры, выполнять обнаружение объектов заданного типа (например, лиц или определенных предметов), затем проводить отслеживание этих объектов и наконец регистрировать их координаты и время появления в лог-файл Предусмотрите возможность настройки параметров алго- ритмов и визуализацию результатов обработки на экране
из 364 Заключение В ходе изучения представленного материала рассмотрен широкий спектр вопросов связанных с комики от его исторического развития и биологических основ цветовосприятия до практического применения современных методов обработай изображений видео, включая глубокое обуче ние и использование нейронных сетей. Учебник охватил кию* : с фундаментальных понятии таких как пиксели, цветовые пространства, и захаживая сложными алгоритмами и методами, такими хак распознавание объектов, отслеживание движущихся объектов и применение нейронных сетей, в частности, YOLO Особое внимание уделено практическому применению изученных концепции, подкрепленному за даииями, которые позволяют закрепить полученные знания и приобрести яеоб ходимые навыки Значительная часть учебника посвящена библиотеке OpenCV, которая явля- ется мощным инструментом для решения задач компьютерного зрения Изучены основные функции OpenCV, применяемые для загрузки, отображения, обра- ботки изображений и видео, а также для создания интерактивных приложений и графических отрисовок Отдельно рассмотрены вопросы, связанные с использованием компьютер- ного зрения во встраиваемых системах, в частности, на примере микрокомпью- тера Jetson Nano, и применение технологии CODA для ускорения вычислений Таким образом, данный учебник предоставляет целостное и последователь- ное изложение основ компьютерного зрения, охватывая как теоретические ас- пекты, так н практические навыки, необходимые для разработки приложений, связанных с анализом изображений и видео Полученные знания и навыки могут быть применены в широком спектре областей, включая робототехнику, автомо- билестроение, медицину, безопасность и многие другие Предполагается, что данный материал послужит надежной основой для дальнейшего изучения и применения методов компьютерного зрения в профес сиоиальной деятельности и научных исследованиях Автор выражает надежду, что представленный материал станет надежным подспорьем в изучении и методов компьютерного зрения предоставляя необходимые знания и инструменты для решения разнооб разных задач и достижения новых результатов в згой области
Словарь терминов ние Цель агрегации - уменьшить размер- ность данных, устранить избыточность и выделить наиболее важные аспекты вт по- следующей обработки [feature это механизм или функция в те, на котором дополнительно информация содержимом обычно для целей машинного обучения технология объединяющая виртуальные объекты с реальным окружением создавая улучшенный опыт восприятия Пример включает использование AR очков для отображения дополнительной информации на изображении окружающего мира Аффинное преобразование - это гео метрическое преобразование, которое со храияет прямые : объекты с 1 >ограни‘ ющих прямоугольников (bounding boxes) и указанием класса объекта, который они содержат Например, на аннотированном изображении фотографии улицы могут быть выделены bounding boxes вокруг авто- мобилей пешеходов и светофоров, с «ют аегствующими метками для каждого обь екта Это позволяет обучать модели компь применяются иию вращения, ние размера) и изображений £отч (batch) - это набор образцов данных, обрабатываемых нейронной сетью
кальные измеириигщрункций потерь, ния - программный инструментарий, обес- печивающий набор функций и алгоритмов для обработки и анализа изображений Эти библиотеки предназначены для упрощения разработки программ и приложений, свя занных с компьютерным зрением, в том числе распознавание образов обнаружение объектов трекинг сегментацию и другие задачи Bu&auomeKaNionty - эго библиотека для языка программирования Python, предоставляющая поддержку для работы с многомерными массивами и матрицами, а также математические функции дляихоб- работки Она является основой дм многих других библиотек в области научных вы числений и компьютерного зрения библиотека OpenCV - это библио- тека с открытым исходным кодом специа- лизирующаяся на компьютерном фения и ния, связанные с распознаванием образов ным восприятием билатеральный фильтр (Bilateral Fitter) - это метод фильтрации изображе- ний, который используется для сглажива ния изображений уменьшения шума, но при этом сохраняет ребра и грани Этот фильтр применяется в обработке итображе- нии с целью улучшения их визуального восприятия сохранения деталей и устране- ния шума бинарное изображение - это изобра жение в котором каждый пиксель может принимать только два значения черный или белый Бинарные изображения исполь зуются для представления форм и контуров объектов без деталей вал, что полезно например при сжатии данных или обработке изображении Видеокодек (кодек для видео) - это программа или устройство которое ежи мает а декодирует видеоданные для пере дачи, хранения или воспроизведения Он используется для уменьшения размера ви деофайлов без значительной потери каче ства изображения позволяя эффективно передавать видео через интернет или хра нить на устройствах с ограниченным ме стом Впдеокодеки могут быть стандарт иыми (например Н.264 И 265 VP9) или проприетарными и они играют ключевую роль в современных мультимедийных тех нологиях Виджет - эго элемент пользователь ского интерфейса который представляет собой небольшое приложение или компо нент обеспечивающий определенную функциональность или отображающий активными компонентами, добавляемыми на веб страницу для предоставления раз личных возможностей пользователям, та ких как формы, кнопки, чаты, календари ИТ Д Гигофтпл (GFLOPS) - это единица измерения производительности, используе мах для оценки скорости вычислений в миллиардах операций с плавающей запятой в секунду GOPS (Giga Operations Per Second) - ностн, которая измеряет скорость вы волнения операций в миллиардах опера ций в секунду Эта метрика оценивает об щее количество операций включая one рации с плавающей запятой (FLOPS) one рации без плавающей запятой (TOPS) и другие вычислительные задачи которые процессор может выполнять за одну се кунду Веиклет-анализ в компьютерном зрении - это метод использующий корот кие волны (вейвлеты) для анализа игобра жении на различных уровнях детализации Позволяет выделять и анализировать GFLOPS (GigaFLOPS) - миллиарды операций с плавающей точкой в секунду используемые для оценки производитель ностн в графических и научных вычисле 312
пения тоьекгм динаты ограничивающих рамок (bounding boxes) объектов их классы и вероятности принадлежности классам Глубокое обучение - технология ис- пользующая искусственные нейронные сети для обучения системы на основе боль- шого объема данных Пример включает обучение системы распознаванию речи на основе аудиозаписей для более точного чй - это пре ется для прео€ ния в другое и одного изображе лчно применяется в операций в математической морфологии используемая для обработки изображений Она применяется к бинарным изображе ниям (где каждый пиксель может быть либо черным либо белым) и служит для увели чення размера объектов на изображении Дисперсия - это мера разброса (или изменчивости) данных вокруг их среднего значения Она показывает, насколько да леко от среднего значения а среднем распо латаются отдельные значения набора дан ных. Проще говоря, дисперсия говорит нам, насколько «рассеянными» являются дан меняй, а также в компьютерной графике, особенно в контексте сопоставления изоб- ражений или етереозрения Извлечение притоков - это процесс выделения характеристических черт изоб ражемня для последующего анализа Например, при распознавании лиц извлече ние признаков может включать определе
глубины в виртуальной реальности для точ присвоения изооражению одной етвия пользователя с виртуальным окруже- Карта иразиакое (feature map) - это результат применения сверточного слоя в сверточной нейронной септ к входным дан ным Каждая карта признаков представляет собой двумерный массив, где каждый эле мент (пиксель) отражает активацию опре- деленного нейрона в сверточном слое входного тпобра женил Ковариация - это мера того, хак две случайные величины «меняются вместе Она показывает, есть ли между ними ли- нейная связь и какова ее направленность (положительная или отрицательная) Корреляция (или коэффициент корре- ляции) - это статистическая мера, которая показывает силу и направление линейной связи между двумя случайными величи жениях Они обладают уникальными харак теряет ками которые делают их легко обна руживаемыми и отслеживаемыми Кривые Sate представляют собой математические кривые, описываемые па раме три ческим уравнением Они исполь зуют управляющие точки для определения формы кривой Кривые Безье широко при зайне, где они используются для создания гладких и красивых криволинейных форм Они обладают свойствами гладкости, кон тролируемости и легкости анимации Линейное объединение двух изобра- жений - это процесс создания нового изоб ражемих путем комбинирования пикселей вое изображение двух входных изображений с использова нием линейной комбинации Это позволяет контролировать яркость и контраст обоих
маркеров или особых точек дая отслежива ния объектов а видеопотоке Пример вклю чает распознавание маркеров на карточной игре для создания интерактивных, вирту альных элементов Л/атрица пикеелей - это двумерный массив чисел, где каждое число представ ляет собой значение интенсивности цвета или яркости для соответствующего пикселя на изображении Каждый элемент матрицы : представление изоб пользуемой для хранения и обработки циф розых изображений в компьютерном эре не используя информацию из других кад лее (ОСЯ) Технология позволяющая ком пьютерам читать текст с изображений и преобразовывать его в текстовый формат Пример использования OCR включает ав тематическое распознавание текста на от сканированных документах Отелсжиеаяиа движущихся объек- те* - технология, позволяющая системе компьютерного чюния следить за переме щеиием объектов на видео или Поспелова тельносш изображений Пример примене кия включает системы зидеонаблюдения, которые отслеживают движущиеся люди или автомобили для обеспечения безопас ностн а определенной эоне Паттерны - это проверенные ре целы для решения проблем в программи рованни Они помогают разработчикам со здаватъ программы таким образом чтобы мыми и масштабируемыми Переобучение (или
Ишносяязяые слои нейроннат сета - это один из типов слоев, где каждый нейрон в слое соединен с каждым нейроном преды дущего слон Эти слои играют ключевую роль в архитектуре нейронных сетей и часто используются в конце септ для выполнения таи данных печение - это программа. чей исходный код закрыт для общественности и коитролиру ется ее создателем или владельцем Доступ к коду и использование программы обычно ограничены лицензионным соглашением и пользователи могут использовать про грамму в соответствии с условиями этого соглашения Обычно такие программы яв ляюгся коммерческими продуктами, за ко- торые требуется оплата и предоставляются компаниями или разработчиками с целью - эго при rrLUrS iPetarLOrS) - квадрилли Сеерточные нейронные семи (CNN) -это тип нейронных сетей специально раз рабосанный для обработки я анализа визу альных данных таких как изображения CNN эффективно распознают образы, вы деляя ключевые признаки и позволяя более точные прогнозы Сегментация изображения - это ос новное понятие в компьютерном зрении, омачающее разделение изображения на от дельные сегменты или объекты для более глубокого анализа Например, при распо знаванни контуров лиц на групповом фото, система проводит сегментацию для выделе кия каждого лица Это помотает более ражекия и принимать соответствующие ре тента на основе этого анализа ние данных а не просто их поаерхиостаые
мыи в ооратим&ез изображен там или длинам волн Свет представляет собой электромагнитную волну, которая может иметь различные длины волн Когда свет проходит через прозрачные среды или рассеивается на поверхностях, его состав ляющие части с различными длинами волн могут распространяться с разной скоро- стью или отражаться под разными углами, что приводит к разделению света на раз личные цвета или спектральные компо- ненты Спектр света обычно включает в также инфракрасный и ультрафиолетовым диапазоны, которые невидимы для челове ческого глаза Стереозреяие - это способности ком пьютерных систем воспринимать и анали- зировать трехмерное пространство, исполь зуя информацию из пары изображения, по- лученных с разных точек обзора какою де- жают это обобщение Например могут ио пользоваться дая представления множества изображений (например последователь кость кадров видео) В контексте нейронных сетей, тек эоры используются для представления входных данных, весов, смещений и выход ных данных слоев Библиотеки глубокого обучения, такие какТепаогЯо» и PyTOrch, эффективно работают с тензорами, предо ставляя функции дая их создания, манипу пирования и оптимизации Они являются формации в нейронных сетях бражение отоб TOPS - зто сокращение от «тераопе
3L£ CTtadt nnrann» 0КЫЭ90 хая» murada ооя «хюхммяои». xi/ff ншм ол вохохаи»
из 364 •• Список рекомендуемой литературы 8 9 Алго Э Python кратко Пер с англ-М ДМК Пресс, 2018 -336 с Барнс Т Ardumo Программирование и проектирование Пер с англ - М ДМК Пресс 2013 - 336 с Брегг Г Каан П Введение в микроконтроллеры Пер с англ -М Бином Лаборатория знании 2013 -352с Вакарчук И А Цветовое зрение Психофизиология и физика - Киев Изд во «Слово» 2012 - 400 с Гари Э Raspbeny Pl Полное руководство Пер с англ.-М Эксмо 2017 -480 с Зинченко В П Вергмлес Н К> Формирование зрительного образа - М Изд во Мое ковского университета 1972 —106с Марк Лутц Изучаем Python 4 е издание. Пер с англ.-М Вильямс 2019 - 1264 с Матвеев А Практическое руководство по микроконтроллерам - СПб БХВ Петербург 2019 -512 с Николенко С И,Кадурин,А Ю„ Архангельская, Е. В Глубокое обучение Погружение в мир нейронных сетей - СПб Литер, 2016 - 480 с. 10 Печатников, В Программирование микроконтроллеров на языке С - М ДМК Пресс, 2018 -464 с 12 Рейнхард К Компьютерное зрение теория и алгоритмы. - М Д МК Пресс, 2019 - 506 с Сацюк, А В Компьютерное зрение Практика - Москва, Вологда Инфра Инженерия, 2025 - 272 с 13 Bochkovskiy.A .Wang,С Y.Liao.H YM YOLOv4 OptimalSpeedandAccuracyofObject Detection -arXiv preprint arXiv-2004 10934 2020 14 15 Gonzalez, R C, Woods, R E Цифровая обработка изображений и компьютерное эре ние Пер с англ -М Бином Лаборатория знаний 2018 -1070 с 16 Goodfellow, I .Bengio.Y . Courville А Глубокое обучение Пер с англ -М Издательский дом «Вильямс» 2016 - 798 с 17 Girshick, R, Donahue, J, Danell T, Malik, J Rich Feature Hierarchies for Accurate Object Detection and Semantic Segmentation. Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, 2014 -P 580-587 18 Forsyth D A Ponce J Введение в компьютерное зрение Пер с англ -М ДМК Пресс, 2012 - 704 с 19 Joseph Redmon Ah Farhadi YOLOv3 An Incremental Improvement arXiv preprint arXiv 1804 02767 2018 20 Kuehm R G Color Space and Its Divisions: Color Order from Antiquity to the Present - Hoboken NJ John Wiley & Sons, 2013 — 368 p 21 OpenCV ALibrary for Computer Visron/Gary Bradski Adnan Kaehler -Dr Dobbs Journal 2008 - https //www drdobbs com/cpp/opencv alibrary for computer vision/184400632 Redmon J Diwala S Girshick, R_, Faihadi, A. You Only Look Once Unified Real Time Object Detection Proceedings of the IEEE Conference on Computer Vision and Pattern Recog nitron (CVPR) -2016 -pp 779-788 24 Smith J Deep Learning for Object Detection ш Autonomous Vehicles IEEE Transactions on Pattern Analysis and Madrme Intettgence, 2023,45(10), 2500-2515 New York IEEE M Бином Лаборатория знаний, 2002. -744 c. 25 Szelislu R Визуальное распознавание образов Пер саигл.-М ДМК Пресс 2010 - 624 с
ИЗ ЗЬ4 ПРИЛОЖЕНИЕ Основные функции, используемые в компьютерном зрении И cv2.addWeighted() Назначение функция, предназначенная для двух изображений Описание формата функции юи суммы cv2acWeighted(srcl, alpha, sk2 beta gamma dst), где srcl первое изображение, alpha весовой коэффициент для srcl (0,1], src2 -второе изображение; beta - весовой коэффициент для src2 (0, 1], gamma - коэффициент добавления (смещен®) Может быть представлено любым вещественным числом, dst (опционально) результирующее изображение Если не указано, функ- ция создает новое изображение Формула для вычисления взвешенной суммы dst = srcl alpha + src2 beta +gamma. Пример result = cv2 addWelghtedt/amel 07 frame! 03 0) cv2.bilateralFilterO Назначение функция библиотеки OpenCV, выполняющая билатеральное фильтрацию изображения Описание формата функции. cv2 bilateralFilterfsrc, d, sigmaCblor, sigmaSpace, dst, bardeftype) где src исходное изображение; d- диаметр каждого пикселя окрестности вокруг центрального пикселя sigmaColor стандартное отклонение в цветовом пространстве Чем выше значение тем меньше эффект фильтрации по цвету,
dst (опционально) результирующее изображение Если не указано функ ция создает новое изображение, bordeftype (опционально) способ обработки краев По умолчанию исполь зуегся cv2 BORDERDEFAULT Пример И cv2.bitwise and0 Назначение функция □теки OpenCV, которая выполняет побито вое «и» между двумя изображениями. Описание формата функции: cv2J>twise_and(sn:l, зк2 dst mask) где srcl - первое изображение, src2 - второе изображение; dst (опционально) результирующее изображение Если не указано, функ- ция создает новое изображение, mask (опционально) маска, определяющая области, в которых применя- ется операция "и" Пример result - cv2 bitwise_and(frame,frame, mask=mask) И cv2.bitwise_notQ Назначение функция библиотеки OpenCV, которая выполняет побитовое отрицание для каждого пикселя изображения Описание формата функции. cv2.bitwtse_nat(sK, dst, mask), где src исходное изображение; dst (опционально) результирующее изображение Если не указано функ ция создает новое звображение, mask (опционально) маска, определяющая области, в которых применя ется операция отрицания Пример
Назначение функция библиотеки OpenCV используется для выполнения поэлементной операции «исключающее ЮТИ» (XOR) между двумя массивами или изображениями Описание формата функции cv2 bitwise_xor(srcl, src2, dst, mask) где srcl -первый входной массив или звображение, src2 - второй входной массив или изображение. srcl и src2 должны быть одного размера и типа данных, dst (опционально) вых одной массив нлиизображеяие, в которое будет сохра иен результат операции XOR Если не указано, функция создает новый массив mask (опционально) маска, определяющая, какие элементы массива будут задействованы в операции Пример Imagel = пр aivqdffJ 0] [0, !]]. dtype=np ulntS) И Кинарные массивы для наглядности Image! = пр arrqy([[0 1], [0, 0]]. Луре=пр итЯ) xorjmage = cv! bltwlse_xor(tmaggl, image!) в cv2.boxPoint$0 Назначение функция библиотеки OpenCV, которая используется для вы- числения верлтин прямоугольника на основе информации, полученной от функ- ции cv2 minAreaRect(). Описание формата функции points = cv2J>axPoints(bax), где box- кортеж, представляющий прямоугольник, как его центр, размеры и угол поворота, как возвращается функцией cv2 minAreaRecKj Возвращаемое значение points представляет собой массив из четырех вер- Пример points = cv2 boxPomtsfrect) В cv2.calcHistO Назначение функция библиотеки OpenCV, которая используется для вы числения гистограммы изображения Описание формата функции. о2 calcHist(images, charnels, mask, histStre, ranges, hist accumulate) где images список изображений, для которых вычисляется гистограмма,
mask маска изображения Гистотрамма буд ет вычисляться только для пик селей соответствующих ненулевым значениям маски, histSrze количество корзин в гистограмме, ranges диапазон значений пикселей Обычно это [0, 256], но может быть настроено на конкретный диапазон значений; hist (опционально) результирующая гистограмма. accumulate (опционально) накапливаться «о a True, гистограмма будет Пример hist = cv2 calcHist([gray], [0]. None 056]. [О 256]) I___I cv2.CannyO Назначение функция библиотеки OpenCV для обнаружения границ наизоб ражении с использованием алгоритма Саппу Описание формата функции. cv2 Canny(image, threshold!, thresholds, edges apertureSize, L2gradient), где image исходное изображен» в оттенках серого, threshold! первый порог для гистерезиса, threshold2 второй порог для гистерезиса, edges (опционально) результирующее изображение границ Если не ука- зано, функция создает новое изображение, apertureSize (опционально) размер ядра Собеля для вычисления производ- ных По умолчанию 3, L2gradient (опционально) флаг, указывающий, следует ли использовать более точное вычисление градиента (Тше) или менее точное (False) По умолча- нию False Пример edges = cv2 Саппу (image 50 150) I cv2.CascadeClassifier() Назначение функция из библиотеки OpenCV, которая используется для загрузки каскадов Хаара или каскадов ЛБП (локальных бинарных шаблонов) для обнаружения объектов на изображения. Описание формата функции. cv2 CascadeClassifierffilename), где filename - путь к XML файлу, содержащему । l Хаара или ЛБП Этот метод возвращает объект классификатора каскада, который можно ис пользовать для дальнейшего обнаружения объектов на изображениях с помощью метода detectMultiScale()
В cv2.circlet) Назначение функция библиэтеки OpenCV, которая используется для отри совки круга Описание формата функции сс2 circiefimg, center, radius, color, thickness, linetype shift) где img изображение, на котором будет производиться отрисовка круга, center координаты центра круга (с,уу, radius радиус круга, color цвет круга в формате BGR (синий, зеленый, красный), thickness толщина границы круга. Если значение отрицательное, круг бу- дет закрашен, linetype тип линии границы По умолчанию илюльзуется cv2 LINE_S Другие возможные значения включают cv2.UNE_4 HCv2.LlHEtyiA (антиалиасинг), shift количество битовых сдвигов три вычислении координат Обычно устанавливается в О Пример center - (150 150) radius 100 color = (О 0 255) thickness ~2 cv2 circle (frame center radius color thickness) И cv2.contourAreaO Назначение функция в библиотеке OpenCV используется для вычисления площади контура Описание формата функции cv2 contourAreafcontour, oriented), rpe contour - входной контур Представляет собой массив НитРу точек контура (например как результат работы функции cv2findCortcurs()'), oriented (опционально) булево значение Если True, то функция возвра щает ориентированную плоирдь контура (с учетом знака), что может быть по лезио для определения направления обходакоитура. Если False (по умолчанию) то возвращается абсолютное значение площади. contour Если oriented равен True, to t ,, ограниченную контуром ется с учетом направления
Функция возвращает чжло (float), представ Пример . контура contours = cv2 JindCo»iours(tmage, cv2 RETRjomsRNAL, cv2 CHA1N_APPROX_SIMPLE И cv2.convertScaleAbs() Назначение функция библиотеки OpenCV, которая выполняет абсолютное масштабирование и преобразование типа данных для каждого пикселя изобра Описание формата функции: cv2.convertScaleAbs(src, dst, alpha beta) где sk-исходноеизображение, dst (опционально) результирующее изображение Если не указано, функ- ция создает новое изображение, alpha (опционально) масштабный коэффициент Если не указан, по умол- чанию равен 1, beta (опционально) аддитивный коэффициент Если не указан, по умолча- нию равен О Формул а для вычисления каждого пикселя dstfx.y) = saturate_casr<WOTtiS_t>(|sn:(5c,)') alpha + beta\) Пример firmed = cv2 conreriScdteAbsffiamc 2 0, 50). в cv2,createTrackbarQ Назначение функция используется для создания ползунка (trackbar) на окне изображения Ползунок предоставляет пользователю интерактивный способ управт. параметрами быми другими числовыми значениями. Описание формата функции как яркость, контраст, или лю где trackbarName - строковый параметр, представляющий название ползунка, wmdawHame строковый параметр, представляющий название окна, к ко торому будет привязан ползунок; mmValue macValue - числовые параметры, представляющие минимальное и максимальное значения, кота ать ползунок, onChange - функция обратного вызова (callback), которая будет вызывать ся при изменении положения ползунка. Функция должна иметь один аргумент который будет содержать текущее положение пэтвунка.
cv2 namedW:ndow(MyWmiow' cv2 WINDOW NORMAL) В cvZ.cvtColorQ Назначение функция библиотеки OpenCV используется для изменения цве тового пространства изображения. Описание формата функции: ce2^vtCdor(src, code, dst, dstCn) где src исходное изображение, которое нужно преобразовать, code код цветового пространства для преобразования Например, cn2 COLOR_BGR2GRAY преобразование из BGR в оттенки серого, cv2 COLOR_BGR2RGB. преобразование из BGR в RGB, cv2 COLOR~BGR2HSV преобразование из BGR в HSV, cv2 COLOR_BGR2LAB: преобразование из BGR в LAB, cv2 C0L0R_BGR2YW. преобразование из BGR в YUV, cv2 COLOR_BGR2HLS- преобразование из BGR в HLS, cv2 COLOR_BGR2XYZ преобразование из BGR в XYZ, cv2 COLOR_BGR2LW. преобразование из BGR в LUV, cv2 COLOR_BGR2YCrCb преобразование из BGR в YCiCb, cv2 COLOR_BGR2HSy_FULL полная версия преобразования зс BGR в HSV, cv2 COLOR BGR2HLS_FVLL полная версия преобразования из BGR в HLS, cv2 COLOR BGR2YUV 1420- преобразование ш BGR в YUV 1420, cv2 COLOR_BGR2YUV~YV12 преобразование из BGR в YUV YV12, dst (необязательный) выходное изображение Если ие указан, функция со здаст новый массив для хранения результата, dstCn (необязательный) количество каналов в выходном изображении Если dstCn равен 0 (по умолчанию), то количество каналов в выходном изображении будет равно кс । в исходном изображении (src) Если dstCn установлен в 1, то результат™ будет одноканальное (черно бе Если dstCn установлен в 3, то результатом будет трехканальное цветное изображение (например, RGB) Пример gr= cv2 cvtColor (frame cv2 COLORBGR2GRAY)
Назначение функция библиотеки OpenCV используется для закрытия всех окон которые были созданы библиотекой OpenCV Описание формата функции. cv2jiestrcyAllWindatvsO Пример cv2 destroyAHWmdowsO И cv2.detect Multi Scale() Назначение функция зв библиотеки OpenCV, используемая для обнаруже ния объектов на изображении с использованием каскадов Хаара Эта функция позволяет обнаруживать объекты разного размера и расположения на изображе Описание формата функции. detectMultiScaiefimage, scaleFactor, mmNei^tbors flags minStze maxSize), где mage входное изображение, на котором производится обнаружение объ- scaleFactor парам етр, ух азывающий, на сколько уменьшается размер окна при каждой попытке обнаружения объекта. Этот параметр определяет, на сколько уменьшается размер окна на каймой итерации Значение scaleFactor должно быть больше 1,0 Меньшие scaleFa количе- ство окон, в которых выполняется поиск, что может привести к большему коли- честву обнаруженных объектов, но также может увеличить время выполнения Обычно scaleFactor выбирают в диапазоне от 1,01 до 1,5, mtnHeighbors параметр, указывающий, сколько соседей должно иметь кан- дидат в объект, чтобы его можно было считать действительным Этот параметр используется для фильтрации ложных положительных результатов Большие значения minNeighbars уменьшают количество обнаруженных объектов, ио мо гут увеличить вероятность пропуска реальных объектов Обычно mtnHeighbors выбирают в диапазоне от 3 до 6, flags (опционально) дополнительные флаги, которые могут быть исполь зоваиы в процессе обнаружения объектов, minSae (опционально) минимальный размер объекта, который может быть обнаружен maxSize (опционально) максимальный размер объекта, который может быть обнаружен Пример
Назначение функция библиотеки OpenCV, используемая для расширения белых областей в изображении (бинарной маске) путем применения морфологи ческой операции дилатации. Описание формата функции. cv2 Matefsrc, kernel, dst, anchor, iterations, borderType borderValue) trb src- исходное изображение (входное одноканальное бинарное изображение или изображение с яркостью в одном канале); kernel прямоугольное или квадратное ядро (маска), которое определяет фор му расширения Оно должно быть неболкпюго размера и иметь значение 1 внут ри него Эго может быть создано с ; । функции cv2 geiSttucturmgElementQ dst (опционально) массив для сохранения результата дилатации, anchor (опционально) позиция якоря в ядре По умолчанию (1, I) озна чает, что якорь находится в центре ядра, iterations (опционально) количество итераций дилатации, по умолчанию 1, borderType (опционально) тип границы, который будет применяться в случае выхода за границы изображения По умолчанию используется cv2 BORDER_CONSTAJTT, border'Value (опционально) значение, которое будет использоваться для грат яичных пикселей, если тип границы cv2 BORDER_CONSTANT По умолчанию О Пример kernel = пр ones((3 3), nputrM) dllatedjmage = cv2 dtlateflmage, kernel) cv2. distance! ran sformO Назначение функция библиотеки OpenCV для вычисления карты расстоя- ний дая каждого пикселя в бинарном изображении Карта расстояний показывает расстояние от каждого пикселя до ближайшего ненулевого (белого) пикселя Описание формата функции cv2 distanceTransform(SK, distanceType, maskSize, dst, dstType), тцв src - входное однокаяалъное 8 битное бинарное изображение (черно белое) distanceType -тип метрики расстояния Возможные значения cv2 DIST_L1 или cv2 D1ST_C манхэттенское расстояние (города), о2 DIST_FAIR расстояние Фейра, cv2 DIST-HUBER расстояние Хубера, maskSize — размер маски для вычисления расстояния Возможные значения
Если не указано функция создает новое изображение, dstffype (опционально) тип данных для выходного изображения По умол чанию cv2 CE_32F для чисел с плавающей точкой одинарной точности Пример img = пр zeros((100 JOO) dtype=np wnt8) narmahzed_dist_map = cv2 iwrmalize(distjnap Попе, 0 255 cv2 NORM_MINMAX dtype= V cv2.drawContoursQ Назначение функция библиотеки OpenCV, используемая для рисования контуров на изображении Описание формата функции cv2 drawContours(mage, centaurs, contourldx, color, thickness, linetype, hierarchy, maxLevel, offset), где image изображение, на котором будут отображены контуры, contours список контуров, которые необходимо нарисовать, contourldx индекс контура из списка contours, который нужно нарисовать Чтобы нарисовать все контуры, можно передать 1, color цвет контура. Это может быть кортеж или список в формате BGR, например, (255 0,0) для синего цвета, thickness (необязательно) толщина контура Если параметр не указан, кон тур будет нарисован без заполнения, linetype (необязательно) тип линии. Может быть использован од ин из еле дующих вариантов cv2 L1HE_4, cv2.LltJE_8,cv2.LIHE_AA (антиалиасинг), hierarchy (необязательно) иерархическая структура контуров, maxLevel (необязательно) максимальный уровень иерархии, который бу дет использоваться для рисования контуров, offset (необязательно) дополнительное смещение точек контуров Пример И cv2.ellipse0 Назначение функция библиотеки OpenCV, которая используется для отри совки эллипса
thickness, lirtfType, shift), где mg изображение, некотором будет производиться отрисовка эллипса, center координаты центра эллипса (х, у), axes длины полуосей эллипса (major_axis, minor_axis), angle угол поворотаэллипса в градусах, startAngle начальный угол дуги эллипса в градусах, color цвет эллипса в формате BGR, thickness толщина границы эллипса. Если значение отрицательное, эллипс будет закрашен, linetype тип линии границы. По умолчанию используется cv2 LINE_8, shift количество битовых сдвигов при вычислении координат Обычно устанавливается в О Пример center = (300 350) axes = (200 50) angle - 30 startAngle = О endAngle = 300 thickness = 2 cv2 elllpse(ftame center axes, angle, startAngle, endAngle. color thickness) cv2.erodeQ Назначение функция библиотеки OpenCV, используемая для сужения бе- лых областей в изображении (бинарной маске) путем применения морфологиче- ской операции эрозии Описание формата функции • cv2 erode(src kernel, dst, anchor, iterations, borderType, bordervalue), где src исходное изображение (входное одноканальное бинарное изображение или изображение с яркостью в одном канале); kernel — прямоугольное или квадратное ядро (маска), которое определяет него Это может быть создано с 1 I функции cv2getStnictwingElementf) dst (опционально) массив д ля сохранения результата эрозии, anchor (опционально) позиция якоря в ядре. По умолчанию (1 ]) озна чает что якорь находится в центре ядра, iterations (опционально) количество итераций эрозии, по умолчанию 1 bordertype (опционально) тип границы, который будет применяться в случае выхода за границы изображения По умолчанию используется
Пример mage = cv2 mreadf'mxigejpg' cv2 lMREAD_GRAiSCALE) В cv2.fastNIMeansDenoisingO Назначение функция библиотеки С^епСТ^реализует алгоритм быстрого не локального среднего (Fast Non4ocal Means Denoising) для подавления шума на изображении Это эффективный метод шумоподавления, который учитывает не только локальные пиксели, но и пиксели, находящиеся на значительном удале ним от рассматриваемого, что позволяет сохранять детали изображения Описание формата функции. cv2fasMMeansDenoising(src, dst, h, temptatelVndcwSze, searchWirtdawStze), где src - входное изображение, на котором нужно подавить шум Может быть одноканальным (градации серого) или многоканальным (цветным), dst (опционально) выходное изображение в котором будет записан результат шумоподавления Если параметр ж указан, результат будет записан в новом массиве, И (опционально) - параметр, определяющий степень удаления шума. Чем больше значение h, тем сильнее будет шумоподавление, но при этом могут размываться детали изображения Рекомендуемые значения обычно находятся в диапазоне от 5 до 25 Значение по умолчанию 10, templateWindowSae (опционально) размер окна шаблона Это область во- круг пикселя, которая используется для сравнения с другими областями изобра- жения Рисомещ^емое значение 7, searchWindowSize (опционально) - размер окна поиска. Это область, в кото рой выполняется поиск похожих областей для усреднения Рекомендуемое зна чение 21 Пример В cv2.filter2D0 Назначение функция, библиотеки OpenCV выполняющая двумерную свертку изображения с ядром (фильтром) Описание формата функции. cv2filter2D(src ddepth, kernel, dst, anchor, delta, borderType) гце src исходное изображение;
та же глубтИй^^о и у входного нзоб{ижеиия) kernel ядро (фильтр), с которым выполняется свертка, dst (опционально) результирующее. шображвиие Если не указано функ ция создает новое изображение, anchor (опционально) центр ядра. По умолчанию (I, 1) что означает центр ядра delta (опционально) смещение, добавляемое к вычисленным значениям По умолчанию О, borderType (опционально) способ обработки краев По умолчанию исполь зуется cv2 BORDER DEFAULT Пример towl = пр arraytffO -1 0] [-1 5 -1], [0 -1 OJJ) filtmdjmage = с»2 ftlterZDfimage, -1 kernel) ___I cv2.findContours(} Назначение функция библиотеки OpenCV, используемая для поискакояту- ров в бинарном изображении или изображении с каналом контура Описание формата функции cv2fndContcurs(image, mode method contours, hierarchy, offset), где image исходное изображение, на котором производится поиск контуров Должно быть бинарным изображением ( обычно после пороговой обработки) или изображением с каналом контура, mode - определяет режим поиска контуров Может быть одним из следую- щих значений cv2 RETR_EXTERNAL возвращаются только внешние контуры, cv2 RETR_L1ST возвращается список всех контуров без иерархии, cv2 RETR-CCOMP возвращается иерархический список контуров с двумя уровнями иерархии, cv2 RETRfTREE возвращается полное дерево контуров всех уровней, method - определяет метод аппроксимации контуров Может быть одним из cv2 CHAINykPPROX_NONE возвращаются все точки контура, о2 CHAIN\APPROX_S1MPLE сювлаег все горизонтальные вертикальные и диагональные сегменты и оставляет только конечные точки, проксимируег контуры при пэмощи алгорип contours (необязательно) список контуров, hierarchy (необязательно) иерархическая ст wa Teh Chui, за контуров offset (необязательно) дополнительное смещение точек контуров Функция cv2 findContaursO: : из трех элементов исходное изображение contours список контуров, hierarchy иерархия контуров
contouwiia&frchy = cv2^ndebntoanfmag^-cv2 REIRJRER cv2 CHA1N_AP PROX_SIMPLE) Пример 2 tontiff _= cv 2 findContoursfbmar ce2 RETR_Ex I 1SRNAL, cv2 CHA1N_APPRDX_NONE) M cvZ.flipO Назначение отеки OpenCV, которая выполняет отражение (зеркальное отражение) изображения в указанном направлении Описание формата функции cv2.flp(sK,jlipCode) трр sk-исходное изображение; fiipCode - код направления отражения Может принимать одно из трех зяа О отражение по вертикали (переворачивание изображения вверх вниз), 1 отражение по горизонтали (зеркальное отражен»), -1 отражение и по вертикали, и по горизонтали Пример Jllpped_horlzontal = cv2$fp(tmagp, 1) Я cv2.GaussianBlurQ Назначение функция библиотеки OpenCV, применяющая размытие по Гауссу к изображению Описание формата функции cv2 GaussianBlw(src, ksze, sigmaX, dst, sigmaY, borderType), где src исходное изображение; ksze размер ядра фильтра Гаусса. Должен быть нечетным и положитель- sigmaX стандартное отклонение го осяХ, dst (опционально) результирующее изображение Если не указано, функ ция создает новое твображеиие, sigmaY(опционально) стандартное отклонение по оси Y Если не указано оно считается равным sigmaX, borderType (опционально) способ обработки краев По умолчанию исполь зуегся cv2 BORDE R_DEFAULT Пример kernel _s/ze = (15 15) sigma_x = О
Назначение функция библиотеки OpenCV используется для извлечения прямоугольной области (подокна) m изображения с подпиксельнои точностью Это означает что вы можете указать координаты центра подокна с дробными значениями Описание формата функции. cv2-getRectSubPcc(image, patchStze center) где image исходное изображение, ю кторото нужно извлечь подокно patchSize - размеры подокна, указанные в формате (ширина, высота) center - координаты центра подокна на исходном изображении Эти коор динатымогут быть указаны с лодпиксельнойточностыо, то есть с дробными зна чениями Функция возвращает извлеченное подокно изображения Пример Image = cv2 Imread(lmagejpg) patchsize = (SO SO) center = (100 S 100S) patch = cv2 getRectSubPIxflmage patchSize center) В cv2.getRotationMatrixZDQ Назначение функция библиотеки OpenCV возвращает матрицу преобразо- вания для выполнения вращения изображения вокруг определенного центра, за- данного утла и масштаба. Описание формата функции cv2getRatatiatMatnx2D(certer, angle, scale), где center - координаты центра вращения в формате (х.у), angle - угол вращения в градусах, sco/e-масштабирование (необязательный параметр) Если scale > 1,0 изоб ражение увеличится после вращения. Ecnuscate < Ifl, изображение уменьшится после вращения Если scale = Ifl, размер изображения не изменится после вра щения Пример rotation_>natrix = cv2 getFotationAfatrix2D((widOi / 2 height / 2) angle 1)
,, ИЗ 364 . ---------------- Назначение функция используется для получения текущего положения ползунка в окне Она позволяет получить текущее числовое значение уставов ленное пользователем с помотцью ползунка. Описание формата функции. cv2.getTrackbarPos(trackbamame, womame) где trackbamame строковый параметр, представляющий имя ползунка, winname - строковый параметр, представляющий имя окна, к которому при вязан ползунок, value - числовое значение, представляющее текущее положение ползунка. Пример cv2 create TrachbarfTracccc" Video Нате' 0 255 lambda x None) cv2 namedWmdowfMyWmdov' cv2 WINDOW-NORMAL) def onChangefvalue) prmtfiialue) # Получение значения ползунка trackbaryalue = cv2 getTrackbarPosfTracccc" Video Frame) # Вызов функции обратного вызова onChange ffrackbarycdue) cv2.imread0 Назначение функция библиотеки OpenCV используется для чтения изобра- жения с диска Описание формата функции. cv2.imread(fiiename, flags), где filename - строка, представляющая путь к файлу изображения, flags (необязательный) этот параметр указывает способ чтения изображения Он может принимать различные значения, ж> наиболее часто используемые это cv2JMREAD_C0L0R, cv2IMREAI)-GRAYSCALE и cv2 IMREADUNCHANGED По умолчание используется cv2JMREAI>_COLOR, который загружает изображение Пример image = cv2 imreadf С/User s/kartmlca.jpg) И cv2.imshowQ Назначение функция библиотеки OpenCV используется для отображения Описание формата функции. cv2 imshawfwumame, mat), где winname - строка, представляющая название окна, в котором будет отобра жено изображение
I__J cv2. imwriteO Назначение фуш отеки OpenCV используется для сохранения Описание формата функции cv2 vnwnteffilename, mage, params) где filename имя файла (включая путь), в который будет сохранено изображение image - изображение, которое нужно сохранить. params (необязательный) параметры сохранения изображения Например можно указать качество для формата JPEG Пример cv2 tmwrltefoutputjmagijpg', nwertedjmage) M cv2.inRangeQ Назначение функция библиотеки OpenCV, предназначенная для создания бинарного изображения, выделяя пиксели из исходного изображения, находящи- еся в заданном цветовом диапазоне, и устанавливая их в белый цвет, в то время как остальные пиксели устанавливаются в черный цвет Описание формата функции cv2.mRange(sK, lower, upper, dst), где src- исходное изображение, lower - нижняя граница цветового диапазона в формате (В, G, R), upper - верхняя граница цветового диапазона в формате (В, G, R), dst (опционально) результирующее изображение Если не указано, функ ция создает новое изображение. Пример mask = cv2 mRange (fame np array ([40 40 40]) nparray(fiO 255 255])) » cv2. Kalman FilterO Назначение функция t OpenCV для реализации фильтра Кал мана, который используется для оценки состояния динамической системы на ос нове зашумленных измерений Описание формата функции. cv2 KalmanFiitefdynamParams, measureParams, controlParams type) где dynamParams -размерность вектора состояния. Это целое число представ ляющее количество neps
нием системы contrdParams (опционально) размерность вектора управления Это целое число представляющее koi зтвии влияющих на со стояние системы Если управление не используется, следует установить значе type (опционально) тал данных для матриц фильтра Калмана По умолча нию cv2 CV_32F для чисел с плавающей точкой одинарной точности Также мо жет быть се2 CF_64F для двойной точности. Пример kf= cv2 KalmanFilterffynam_params measurejtarams controljrarams) kftransltlonMatrlx = np arraf([[l 1][0 ]]] npjloat32) tymeasurementMatrlx = np arrapfffl, 0]]. npjloat32) kfprocessNotseCov = nparray([[0001, 0] [0. OOOljJ npjloatll) “003 # Инициализация матрицы идма измерения (неопределенност, е измерениях) )tfmeasurementM>lseCm> = пр аггау([[0 0!)) прfloat32) *0.1 # Инициализация лектора состояния (накален ая оценка) kf statePost = пр anayfllO], [3]] npftoat32) М cv2.Laplacian() Назначение функция библиотеки OpenCV, выполняющая операцию Лапласа на изображении Описание формата функции cv2 Laplactan(sK, ddepth, dst, kstze, scale, delta, bordertype), где src — исходное изображение, ddepth - глубина результирующего изображения Если 1, то используется та же глубина, что и у входного изображения, dst (опционально) результирующее изображение Если не указано функ ция создает новое изображение, kstze (опционально) scale (опционально) или По умолчанию 1, delta (опционально) По умолчанию О размер ядра оператора Лапласа. По умолчанию 1 масштабный коэффициент для вычисленных значе смещение, добавляемое к вычисленным значениям bordePtype (опционально) способ обработки краев По умолчанию исполь зуется cv2 BORDER_DEFAULT
Iqplacianjmage = np umt8(hp abs(laplacian_miage)) В cv2.line0 Назначение функция бибпиэтеки OpenCV, которая используется для отри Описание формата функции. cv2hne(img,ptl,pt2,color, thickness,linetype shift) изображение, накотором будет производиться отрисовка линии ptl координаты первой точки (х, уХ pt2 координаты второй точки (х, у), color - цвет линии в формате BGR (синий, зеленый, красный') Например (255, 0, 0) представляет собой синий цвет, thickness толщина линии Если значение отрицательное (например, 1), то линия будет закрашена, linetype тип линии, Эго параметр, который определяет форму концов ли- нии По умолчанию используется cv2 LINE_S Другие возможные значения включают cv2 LINE_4 и cv2.UNE_AA (антиалиасинг), shift количество битовых сдвигов цри вычислении координат Обычно устанавливается в 0 Пример 1 ptl = (50 50) pt2 = (200 200) color = (0 255 0) thickness = 2 cv2 Une (frame ptl pt2 color thickness) Пример 2 cv2 Une frame (60100) (260350) (0,0 255) 2) cvZ.magnitudeQ Назначение функции OpenCV, которая используется для вы числения магнитуды (величины) комплексного числа, представляющего вектор в двумерном пространстве Описание формата функции. cv2 magyutude(x,y, magnitude), где х- массив с компонентами вектора по осих; у массив с компонентами вектора по оси у, magnitude (опционально) массив для сохранения результатов вычисления магнитуды Если не указан, функция создает новый массив Этот метод возвращает массив с вычисленными магнитудами для каждого вектора заданного компонентамихиу
I cv2.matchTemplate() Назначение функция библиотеки OpenCV для поиска шаблона (неболь шого изображения) в большем изображении. Она возвращает карту соответ сгвия которая показывает, насколько хорошо шаблон соответствует каждой об ласти большего изображения Описание формата функции. cv2 matchTemplate(image, tempi, method result mask) где image - исходное изображение, в котором будет производиться поиск, tempi изображение шаблож, которыйиужно найти в исходном изображении, method метод сравнения ивблонов Возможные значения cv2 TMJ1QDIFF квадрат разностей Чем меньше значение, тем лучше сов- падение, cv2 TM_SQDIFF_NORMED нормализованная квадрат разностей, а>2 TM_CCORR- кросс-корреляция Чем больше значение, тем лучше сов- падение, cv2 TM_CCORR_NORMED- нормализованная кросс-корреляция, ci>2 W_CCOEFF - коэффициент корреляции Чем больше значение, тем лучше совпадение, cv2 TM_CCOEFF_NORMED-x>pMtennoti3№aM коэффициент корреляции, result (опционально) выходная карта соответствия Если не указано, функ- ция создает новое изображение, mask (опционально) маска, определяющая, какие области изображения должны быть учтены при поиске шаблона Пример template = cv2 imreadftemplate jpg') result = cv2 matchremplatefmg, template, cv2 TM_CCOEFFJfOKMSD) cv2.medianBlurO Назначение функция библиотеки OpenCV, применяющая медианный фильтр к изображению Описание формата функции. cv2jnedtanBlur(sn:, kstze, dst), гце src исходное изображение; kstze размер квадратного окна для вычисления медианы Должен быть не четным и положительным.
Пример И cv2.merge() Назначение функция библиотеки OpenCV, используется для объединения отдельных каналов цветав одно многоцветное изображение. Описание формата функции. cv2.merge(channeis), где channels — список или кортеж отдельных изображении, представляющих от дельные каналы цвета (например, каналы В, G и R) Пример b = cv2 mreadCbiue_charmeljpg' cv2 1MREAD-GRAYSCALE) g - cv2 mread( green channel jpg' cv2 IMREAD GRAYSCALE) r = cv2 lmreadCred_channeljpg' cv2 IMREAD_GRAYSCALE) mergedJmage = c»2 mergef/b g rj) 1 cv2.m in Area RectO Назначение функция библиотеки OpenCV, которая используется для по- иска минимальной ограничивающей прямоугольной области вокруг заданного набора точек или контура на изображении Эта функция возвращает прямоуголь- ник, который описывает минимальную ограничивающую область Описание формата функции red =c\OjmnAreaBect(points), где points - массив точек или контур, вокруг которых требуется построить ми- нимальную ограничивающую прямоугольную область Возвращаемое значение rest представляет собой кортеж, содержащий ин- формацию о прямоугольнике, включая центр, размеры, угол поворота. Пример < cv2.minMaxLoc() Назначение функция библиотеки OpenCV для нахождения минимального и максимального значений в массиве, а также их местоположений Описание формата функции. о2 minMatLoc(src, mmVd, mazVal, minLoc, maxLoc mask)
производит)® йгйтск^ minVal (опционально) переменяя для хранения минимального значения Если не указано функция вернет минимальное значение, maxVal (опционально) переменная для хранения максимального значения Если не указано фр ьное значение, maiLoc (опционально) переменная для хранения местоположения (коорди нат) минимального значения в формате (с, у) Если не указано, функция вернет местоположение, тахЬос (опционально) переменная для хранения местоположения (коор динат) максимального значения в формате (х,у) Если не указано, функция вер нет местоположение, mask (опционально) маска, определяющая, какие элементы массива src должны быть учтены Маска должна быть того же размера, что и sk Элементы соответствующие нулевым значениям маски, игнорируются Функция возвращает кортеж значений (niin^al maximal minLoc maxLoc"), если ни один из параметров не передан Пример 1 найти минимум и максимум, а также их положения в массиве src = пр arrqp([[l 2 3] [4 5 t] [7 S 9]], dtype=npfioal32) min_val max_val mtn Joe max Joe = cv2 mmMaxLoc(src) Пример 2 использовать маску для поиска минимума и максимума mask = пр arrcy([[0 1 0] П > Ц [О 1 0}} <Цуре=пр иМЗ) mtn_val_masfad, max_vat_maskei mlnjocjnaskat, maxjocjnashid = cv2 mtnMaxLoc (src mask=mask) В cv2.moveWindowO Назначение функция библиотеки OpenCV, которая используется для пере мещеиия окна с изображением на экране. Эта функция принимает д ва аргумента имя окна и координаты, куда следует пере Описание формата функции: cv2 jnoveWnciaw(wtndoyv!2ame, х,у), где windowName название окна, которое вы хотите переместить, х координата х (горизонтальная позиция) на экране, куда следует переме стить окно у координата у (вертикальна» стить окно на экране, куда следует переме Пример о2 maeeWindow( Image', 100,100)
cv2JlftS&lracter() или cv2Midt3Tracker_createO это конструктор класса в библиотеке OpenCV для создания объекта множественного трекера Множе сгвенныи трекер предназначен для отслеживания нескольких объектов одновре менно на видеопотоке или в потоке изображений. В cv2.namedWindow() Назначение функция библиотеки OpenCV, которая используется для созда ния окна с заданным именем. Это окно предназначено для отображения изобра женин или визуализации видео Описание формата функции cv2.namedlFindawfmnname, flags) где winname строковый параметр, представляющий имя окна, flags (необязательный) флаг, который определяет поведение окна Может принимать одно или несколько значений, объедиигиных побитовым ИЛИ ф Наиболее часто используемые флаги- cv2 WJNDOW_NORMAL. позволяет пользователю изменять размер окна вручную Размеры окна не будут автоматически подстраиваться под размер изоб- ражения, отображаемого в нем; cv2 WINDOW AUTOSIZE. (ло умолчанию) окно автоматически жменяег свой размер, чтобы соответствовать размерам отображаемого изображения При изменении размера изображения окно также изменит свои размеры, cv2 \VWDO\V_FRbERATJO окно будет масштабировать изображение, со- храняя его соотношение сторон При ручном изменении размеров окна, соотно- шение сторон отображаемого изображения будет сохраняться, cv2 W1NDOW_KEEPRAT1O (устарел, рекомендуется использовать cv2 \VTNDOW_FREERAT1O) окно будет пытаться сохранять соотношение сто- рон изображения при изменении размеров окна, cv2 W1ND0WGU1EVPANDED устанавливает расширенный интерфейс окна с возможностью скрывать/отображать панель инструментов (кнопок) и строку состояния, cv2 WINDOWGUINORMAI- устанавливает стандартный интерфейс окна (без панелей инструментов) Пример cv2 namedWmdow(MyWmdow' cv2 WINDOW NORMAL) И cv2.normalize() Назначение функция библиэтеки OpenCV выполняет нормализацию мае сила (изображения) Нормализация : ному диапазону или распределению Описание формата функции. пикселей к определен cv2 normalizefstc, dst, alpha, beta, nomjype, dtype mask)
—ЙЗ'-ЗБ1[. ч I ~ — j, . , , - ast (опционально) - выходной массив, куда будет записан результат норма лизации Если не указан, результат будет записан в новый массив alpha (опционально) значение, к которому будет приведено минимальное значение входного массива при нормалтации; beta (опционально) значение, к которому будет приведено максимальное значение входного массивалри нормалтации; norm_type (опционально)—тип нормализации Возможные значения (наибо лее часто используемые) cv2 NORM_L2 нормализация, приводящая 12-норму массива к единице с»2 NORM_L1 нормализация, приводящая LI норму массива к единице cv2 NORMJNF нормализация, приводящая максимальное значение массива к единице dtype (опционально) - тип выходного массив! Если не указан, тип выход ного массива будет таким же, хак у входного массива, mask (опционально) - маска, указывающая, какие элементы массива нужно нормализовать Пример Image = cv2 tmreadftnputjmage.jpg', cv2 !MREAD_GRAYSCALE) normalize djmage = cv2 normaHze(lmage, None, 0, 255 cv2 NORM_M1NMAX) М cv2.polylines0 Назначение функция библиотеки OpenCV, которая ^пользуется для отри- совки многоугольника Описание формата функции • cv2 polylmesfimg, pts, isClased, color, thickness, linetype, shift), где img изображение, на котором будет производиться отрисовка полигона, pts список точек, задающих вершины полигона. Массив, в котором пере- числены вершин многоугольника, isClased флаг, указывающий, замкнут ли полигон Если True, то полигон замкнутый (первая и последняя вершины соединены линией), color цвет линии полигона в формате BGR, thickness толщина линии полигона. Если значение отрицательное полигон будет закрашен, linetype- тип линии границы. По умолчанию используется cv2 LINE_8 Дру гие возможные значения включают се2I2NE_4 ucv2 LINE_AA (антиалиасинг) shift количество битовых сдвигов при вычислении координат Обычно устанавливается в О Пример cv2 polylmesfpame [пр array([[50 50] П50 280] [210 250] [250 130] [150 50]] пр mt32)J True (0 255 0) 2)
Назначение функция библиотеки OpenCV, которая используется для отри совки текста Описание формата функции. cv2 putText(img, text, org,fcntFace,fontScale, color, thickness linetype bottom ty/l. Origin), где img изображение, на котором будет проиводиться отрисовка текста text строка с текстом, который вы хотите отобразить, org координаты началънсй точки текста (левый верхний угол) в формате (х у) fontFace шрифт текста. Он может быть одним из предложенным ниже cv2 FONT_HERSH£Y_PLAIN простой шрифх без засечек, cv2 FONT_HERSH£Y_S1MPLEX. пропорциональный шрифт без засечек cv2 FONT_HERSHEY_DUPLEX пропорциональный шрифт с поддержкой двойной вы cv2FONT_HERSHEY_COMPLEX шрифх с засечками, cv2FONT_HERSHEY_TR)FLEX пропорциональный црифг с тройной высотой символов, CT2FONT HERSHEY COMPLEX SMALL шрифт с засечками и малыми символами, ст2 FONT~HERSH£Y~SCRiPT SIMPLEX. рукописный простой шрифт, cv2 FONT_HERSHEY_SCMPT_COMPLEX. рукописный сложный шрифт, cv2 FONT ITALIC- константа для указания- наклонного шрифта (например, cv2 FONTJI£RSHEY_SiMPLEX | cvZ FONTJTAUC), fontScale масштаб текста; color цвет текста в формате BGR thickness толщина линии (если отрицательная, текст будет отображен с за- крашенным фоном): linetype тал линии По умолчанию используется ai2.LINE_AA, battomLeftOrigm флаг, который указывает, что начальная точка текста левый нижний угол (если True} Пример tea = Прилет h/HPr org = (100 100) fontFace - cv2 FO№_HERSHEY_COMPLEX fontScale = 1 color = (0 255 0) thickness = 2 В cv2.rectangle0 Назначение функция библии совки прямоугольников Описание формата функции. aCV, которая используется для отри о2 rectangle(eng,ptl, pt2, color, thickness, linetype shift) где mg - изображение, на котором будет производиться отрисовка прямоуголь
рС2 - ккйрУйнаты нижнего правого угла прямоугольника (х у) color - цвет прямоугольника в формате BGR (синим, зеленый красный) thickness толщина границы прямоугольника. Если значение отрицатель ное прямоугольник будет закрашен; lineType тип линии границы. По умолчанию используется cv2 LINE_8 Другие возможные значения включают cv2 LINE _4 и cv2 LINE_АА (антиали асинг) shift количество битовых сдвигов при вычислении координат Обычно устанавливается в О Пример 1 thickness = 2 cv2 rectan gleijrame ptl pt2 color thickness) Пример 2 cv2 rectanglefframe (300 400), (400, 450). (0. 0.255) 12) cvZ.remapQ Назначение функция библиотеки OpenCV для применения произвольного геометрического преобразования к изображению, используя карты отображения (mapping) Описание формата функции cv2 remap(src, mapi, тар2, interpolauat, borderMode, borderValue), где src исходное изображение, первая карта отображения Может быть карта, представляющая преобразование х-коорданат (тип данных з держащая преобразования как х-, так и/ координат (тип ,рта отображения. Может быть представляющая преобразование у координат (тип данных алгоритм интерполяции, используемым при отображении
рабатываюШййксели за’пределами исходного «обряжения Возможные значе borderValue (опционально) згаченге, = cv2 BORDER_CONSTANT По умолчанию О зуемое при bonderMode = Притер тар_х = npzerosffli w) dtppe=npftoat32) •map_y = npzeroifft w) dtppe=npfloat32) remapped img = cv2 remapftmg map x, тару cv2INTER_LINEAR border№ode= = cv2 BORDER_CONSTANr borderV<due=(255 0 0)) В cv2.resize0 Назначение функция библиотеки OpenCV «пользуется для изменения раз- мера изображения Описание формата функции cv2.resae(src, dsize, dst Jx fy. interpolation), где src исходное изображение; dstze размер выходного изображения может быть кортежем (width, height) или Wone (в этом случае параметры ft nfy должны быть установлены), dst (опционально) выходное изображение Если указано, изображение из- меняется в этот объект Если не указано, создается новое изображение, fx (опционально) к сэффициеит м аспгтабироваиия по оси г, fy (опционально) к оэффициент масштабирования по оси у, interpolation (опционально) метод интерполяции для изменения размера. По умолчанию используется cv2.nn’BR_LWEAR. Притер resizedjmage = cv2 reilze (originalJmage na>_stzt) В cv2.saturate cast() Назначение функция библиотеки OpenCV «пользуется для приведения значения к заданному типу с насыпанием Описание формата функции. cv2 saturatejtastfdtype, value), где dtype - требуемый тип данных, к которому будет приведено значение Это может быть например, гр шгЛ8, пр mtl6, пр float32 и т д value значение, которое необходимо привести к заданному типу Это мо жет быть число переменная или результат вычисления
с насыщенйёМ^Лто особенно "В£*ак> ври работе с изображениями Эта функ ция «обрезает» значения, выходящие за допустимый диапазон типа данных (например 0 255 для iunt8), что предотвращает искажения при операциях с пик селями и гарантирует корректное отображение твображении Пример value 1 = 300 value? = 40000 cast_yaluel = cv2 saturate_cast(np umt8 value!) cast_yalue2 = cv2 saturaie_cast(np mi!6 value!) cv2.selectROIQ Назначение функт отеки OpenCV, которая позволяет пользова телю выбирать интерактивно прямоугольную область (ROI) на изображении Описание формата функции: cv2 selectROIfwindowHame, img, shawCrossHair fromCenter) tbs wndawName -название окна, в котором отображается изображение, img - изображение, некотором пользователь будет выбирать RO1, shawCrossHair (опционально) флаг, указывающий, следует ли отображать перекрестие в центре выбранной области По умолчанию True, fromCenter (опционально) флаг, указывающий, следует ли начинать выбор ROI от центра По умолчанию False Функция возвращает кортеж, представляющий координаты и размер вы- бранной области (х,у, ж, й). Пример х, у w h = cv2 selectRO!(ftame fiomCenter=Fake). М cv2.setMouseCallbackO Назначение используется для установки функции обратного вызова (callback function) для обработки событий мьшш в определенном окне Она обес печивает взаимодействие с изображением через мышь, позволяя пользователю определить свою собственную функцию об ваться при определенных событиях мышат Описание формата функции. которая будет визы cv2 setMauseCallbackfwmdawHame, onMcuse, param=None) где wmdawName - строковый параметр, представляющий название окна к ко торому привязывается функция обратного вьвова, onMouse - функция обратного вьвова, которая будет вызываться при собы тиях мыши Эта функция должна иметь определенный формат defonMatsefevent, х, у, flags, param) где event тип события (например, cv2JEVENT_IBUTTONDOWN)
cv2 EVENT_МОЦЕЕМОУЕ-ррнжпшеюшш, cv2 EVENT_LBUTTONDOWN- нажата левая кнопка мыши cv2 EVENT_RBUTTONDOWN-нажата правая кнопка мыши cv2 EVENT_RBUTTONUP-ощущена правая кнопка мыши cv2 EVENT_MOUSEWHEEL a cv2 EVENT_MOUSEHWHEEL - прокрутка колеса мыши cv2 EVENT_MOUSEHWHEEL—горизонтальная прокрутка колеса мыши (если поддержи i Shift; cv2 EVBJT_FLAGJO.TKEY-нажата клавиша Alt; param (необязательный) дополнительный параметр, который будет пере дан в функцию обратного вызова Пример dtf onMousefevent x. у fiags, param) /event = - cv2 EVENT_LBUTTONDOWN prtnt(fLeft button down at ({x} (y))) cv2 setMouseCaHbackfhnage' onMouie) cv2.setWindowPropertyO Назначение в библиотеке OpenCV используется для установки свойств окна, таких как размер, положение и др Описание формата функции' cv2 setWmdcnvPropertyfwindawName, propjd, prop_value), me - имя окна, дая которого нужно установить свойство, идентификатор свойства, которое нужно установить Это может FULLSCREEN устанавливает полно 'BEEN или cv2 WINDOW_NORMAL), v2 WINDOW_NOItMAL), 1MAL илиги? WINDOWJVLLSCREEN); - значение свойства, которое нужно установить Для больший булево значение (True или False), указывающее следует ли уста I включенным или выключенным. •rty (wmdowName, cv2 WND_PROP_FULLSCREEN cv2 WINDOW_
Назначение функция библиотеки OpenCV, применяющая оператор Собеля к изображению для выделения градиентов Описание формата функции. cv2 Sobelfsrc, ddepth, dx, cfy, kstze, scale, delta borderType) где src исходное изображение; ddepth глубина результирующего изображения Если 1, то используется та же глубина, что и у входного изображения, dx порядок пр оизводной по х; dy -порядок производной по у; kstze (опционально) размер ядра Собеля. Должен быть нечетным и поло жительным Если не указано, используется 3, scale (опционально) масштабный коэффициент для вычисленных значе ний По умолчанию 1, delta (опционально) смещение, добавляемое к вычисленным значениям По умолчанию О, bordertype (опционально) способ обработки краев По умолчанию исполь- зуется ст2 BORDERDEFAULT. Пример sobeljc = cv2 Sobelflmage cv2 CV_64F, 1, 0 hsz«=3) sobelj> = cv2 Sobel(tma%e cv2 CV_i4F 0 I bee=3) # Конвертация результатов в изображения с глубиной в ulntl sobeljc = пр ulntt(np abs(sobel_x)) sobelj> = np ulnttfnp abs(sobel_y)) cv2 Imshow (Sobel ЗГ sobel_x) cv2 Imshow (Sobel V sobelj) В cv2.splitO Назначение функция библиотеки OpenCV, используется для разделения многоцветного изображения на отдельные каналы цвета. Это позволяет получить отдельные изображения для каждого цветового канала, таких как красный (R) зеленый (G) и синий (В) каналы в случае изображений в формате BGR Описание формата функции ce2^pia(sK), где src исходное изображение. Пример
Назначение функция библиотеки OpenCV, используемая для преобразова ния изображения в изображение с бинарными значениями (черно белое изобра жение) на основании порогового значения Описание формата функции. о2 threshoidfsnc, thresh, maxval, type dst) где src исходное изображением, thresh пороговое значение, используемое для преобразования пикселей maxval значение, присваиваемое пикселям, значения которых превышают пороговое значение, type тип бинаризации, указк быть одно из следующих значений: как применять порог Это может cv2 1HRESH_BINARY если значение пикселя превышает порог, ему присва ивается maxval, в противном случае О, cv2 THRESH_BINARYJNV если зжчеие пикселя превышает порог, ему присваивается 0, в противном случае waratf, cv2 THRESH_TRVNC'. если значение пикселя превышает порог, ему присваи- вается пороговое значение, в противном случае значение остается неизменным, сь2 THRESH_TOZERO- если значение пикселя превышает порог, ему при- сваивается значение пикселя, в противном случае О, cv2 THRESH_TOZEROJNV если значение пикселя превышает порог, ему присваивается 0, в противном случае значение пикселя остается неизменным, dst (опционально) результирующее изображение Если не указано, функ- ция создает новое изображение Пример gray Jrarta = ci>2cvtCoiortfiame cv2 COLOR_BGR2GRAY) binary-frame = cv2 thrcsholdfgray-frame, 127 25S cv2 TURESfi-BINARY) IВ cv2.subtract() Назначение функция библиотеки OpenCV используется для поэлементного вычитания одного массива или изображения из другого Описание формата функции cv2.suttnact(SKl, src2, dst, mask, фуре), где srcl первый входной массив или изображение (из которого вычитается) src2 второй входной массив или юображвнне (который вычитается) srcl и src2 должны быть одного размера и типа данных или когда один из массивов является скаляром, а второй массивом, dst (опционально) выходной массив или изображение в которое будет со хранен результат вычитания. Если не указано, функция создает новый массив mask (опционально) маска, определяющая, какие элементы массива будут задействованы в операции.
дет испольйй^Ыся тип входных । Пример image! = nparray([[10 20] [30 40]] dtgpe=npumtS) image! = np arrap([[5 10] [15 20]] dtype=np игЛ8) subtractedjmage = cel subtractfimage 1 image!) В cv2.TrackerCSRTQ cv2 TrackerCSRTf) или cv2 TrackerCSRT_create() это конструктор класса для создания объектатрекераСККТ (Channel andSpatial Reliability Tracker) в биб лиотеке OpenCV Этот трекер предназначен дая отслеживания объектов на видео и в реальном времени, обеспечивая высокую точность и устойчивость к раз личным условиям, таким как изменения освещения и частичные блокировки объекта Пример tracker = cv2 Tracker CSRTjrreateO Cv2.TrackerKCFQ cv2 TrackerKCFf) или cv2 TrackerKCF_create( - это конструктор класса в библиотеке OpenCV дая создания объекта трекера KCF (Kemelized Cotrelation Filters) Этот трекер предназначен дая отслеживания объектов в видеопотоке или на изображении с использованием корреляционных фильтров с ядром Пример tracker = cv2.TrackerKCF_createf). И Cv2.TrackerMedianFlowO cv2 TrackerMedianFiowf) или cv2.TrackerMed<anFlw_create() это конструктор класса в библиотеке OpenCV для создания объекта трекера Median Flow Трекер MedianFlow предназначен дая отслеживания объектов в вцдеопо токе или на изображении с использованием метода оптического потока и меди энных фильтров cv2.Tracker MILO cv2 TrackerMIL() или cv2 TrackerMIL_createO это конструктор класса в библиотеке OpenCV дая создания объекта трекера MIL (Multiple Instance Learning) Трекер MIL предназначен для отслеживания объектов в видеопотоке или на изображении с использованием метода множественного обучения экзем пляра
cv2 TrackerMOSSEf) cv2 TrudcerMOSSEjcreatef) это конструктор класса в библиотеке OpenCV для создания объекта трекера MOSSE Трекер MOSSE (Minimum Output Sum of Squared. Error) предназначен для отслеживания объектов в видеопотоке или на изобр ратичных ошибок : минимизации суммы квад Пример tracker = cv2 TrackerMOSSE_create() I___J cv2.VideoCaptureQ Назначение функция библиотеки OpenCV используется для захвата видео потока с устройства захвата, такого как камера или видеофайл Описание формата функции: cv2 VideoCaptuxe(mdex) где index целочисленный параметр, определяющий устройство захвата (id ка- меры) Обычно 0 соответствует веб-камере на компьютере или MIPI-камере на микрокомпьютере Если у вас есть несколько устройств захвата, вы можете ис- пользовать различные значения, чтобы выбрать конкретное устройство Если index указывает на файл (назример, "video mp4"), то функция читает видеопоток из файла Пример 1 cap = cv2 VtdeoCapturefO) Пример 2 cap = cv2 VldeoCaphiref'C /VsenMdeo.mp4"). Q cvZ.VideoWriterQ Назначение функция библиотеки OpenCV предоставляет возможность за- писи видео Он используется для создания объекта, который отвечает за запись последовательности изображений в видеофайл. Описание формата функции cv2 VideoWrOerffdename,fourcc, fps, frameSae, tsCdor), где filename - имя файла, в который будет записано видео, fourcc кодек, используемый для сжатия видео Например 'XPID или MJPG jps количество кадров в секунду (частотакадров), frameSize - размер кадра в иидеопсггоке; isColor (необязательный) флаг, указывающий, являются ли кадры цвет ными (True) или черно белыми (False) Но умолчанию - True Пример
Назначение функция библиотеки OpenCV, используемая для определения четырехсимвольиого кода (FourCQ кодека, который будет использоваться при записи вццео с помощью cv2 VideoWnter FourCC это четырехсимвольныи идентификатор который определяет формат видеокодирования Описание формата функции. со2 VideoWriter_famcc(cl, с2, сЗ с4) где cl с2 сЗ, с4 четыре > .кодек В OpenCV четырех символьные коды (fourcc) представлены строками где каждый символ представляет собой ASCII код Ниже приведены некоторые ча сто используемые кодеки и их соответствующие строковые представления XVID (кодек Xvid MPEG-4)-re) VukoWriterJburccC'XVlD') MJPG (кодек Motion JPEG) -cv2 VideoWnterJbarccC'MJPG'), DIVX (кодек DivX MPEG 4) - cv2 VideoWriterJourccC'DIVXy. H264 (кодек H 264) -c»2 VideoWriterJburccCTGSt'), X264 (кодек x264 H 264) -cv2 VideoWriterА>ип;<:Г'Х2Ю, WMV1 (кодек Windows Media Video 7)-cv2 VideoWriterJburcc(-WMV]), WMV2 (кодек Windows Media Video 8)-cv2 VideoWriler _f>ura:(*WMV2 ) Пример Jburcc = cvi VtdeoWrlter Joiner (“XV!D) И cvZ.waitKeyf) Назначение функция библиотеки OpenCV используется для ожидания нажатия клавиши Описание формата функции ' cv2 waiKey(delay), где delay это целочисленный параметр, указывающий время ожидания в мил- лисекундах Если delay равно 0 или отрицательно, функция ожидает бесконечно Если delay положительно, функция ждет указанное количество миллисекунд и возвращает кодклавипш, которая быланажатав это время Пример 1 В cv2.warpAffine() Назначение функция библиотеки OpenCV, которая выполняет аффинное пре образование изображения с исиэльзованжм заданной матрицы преобразования Описание формата функции. с>2 watpAffine(src, М, dstze, dst,flags, borderMode borderlValue) где src - исходное изображение
ТЬИЫЙ) иного изображали в формате (ширина высота) 1) выходное тображение Если не указан будет со По умолчаиию использу (необязательный) ых пикселей По пользуется cv2.BORDER_CONSTANT, (необязательный) значение для граничных пикселей при ис BORDERCONXTANT cv2gplRotationMatra2D((width/2height/2) angle I) i>2 warpA№ne(prigfncdjmasi. rotatton_matrix, (width height)) 'I numpy.arrayO Назначение функция библиотеки NumPy, используется для создания мас- Описание формата функции nparruyfobject, dtype, copy, order, subok, ndmtn), где object - обязательный аргум ент Может быть списком, кортежем, другим мас- сивом или любым объектом, который может быть интерпретирован как массив, dtype (опционально) тип данных для элементов массива Если не указан, тип данных будет определен автоматически на основе типа данных объекта, сору (опционально) если True, создается коши объекта, если False, массив создается, ссылаясь на объект По умолчаиию True, orde - (опционально) указывает на лэрядок хранения элементов в памяти Может быть С (по умолчанию) для С-style, Р для Fortran-style или А для авто- матического выбора порядка subok - (опционально) если True, подклассы будут передаваться, если это возможно, если False, передается только базовый массив По умолчаиию False, ndmtn - (опционально) минимальное количество измерений в результирую щем массиве По умолчанию О Пример 1 arrjist = пр аггау([1 2 3 4 5]) arr_2d = пр array ([[1 2 3] [4 5 6] [7 8 9JJ) Пример 3
Назначение зуется для создания после довательности чисел которая может быть использована, например для генера ции координат пикселей в изображении или для создания массива индексов Описание формата функции. numpy.arange(stnrt, step, step, dtype=None) трр start начальное значение последовательности (включительно) stop конечное значение последовательности (исключительно), ся По умолчанию ранен 1 step - шаг, с которым: citype (опционально) тип данных для элементов массива. Если не указан тип данных выводится автоматически Пример arr = пр arangi(lO) prmtfarr) # Вывод [0123 4 567 6 9} np.clipO Назначение функция библиотеки NumPy, используется для ограничения значений в массиве заданным диапазоном Описание формата функции np.clip(a, а_тт ajnat, out = Hone), где а - исходный массив (или число), значения которого нужно ограничить, а_тт - минимальное значение, до которого будет ограничено значение, а_тах максимальное значение, до которого будет ограничено значение, out (опционально) вых одной массив, в который будут помещены резуль- таты Если не указан, функция вернет новый массив Пример arr = пр array([-2 1 5 S 12 -5J) clipped_arr - пр chp(arr 0 10). ® numpy.concatenateO Назначение функция бнбт □Ру, используется для объединения последовательности массивов вдоль существующей оси Описание формата функции. numpy concatenate((al, 02, .), axts=O, cut, dtype, castmg="samejand ) где (al a2 ) кортеж или список массивов, которые нужно объединить Все массивы должны иметь одинаковую форму, за исключением размерности соот axis (опционально) ось, вдоль которой выполняется объединение По умолчанию axis = О, то есть массивы объединяются по строкам (добавляются друг под друга)
axis =-l - объел го измерения ит д Ось может быть отрицательной, отсчишваясь от последнего твмере ния (1) предпоследнего ( 2)ит д, out (опционально) выходноймассив, в который помещается результат объ единения Если параметр не задан, создается новый массив, dtype (опционально) тип данных выход [ не указан тип данных выходного массива будет таким же, как у входных массивов casting (опционально) - быть приведены безопасно В тя типов, когда данные не могут я. 'по едим safe samejand Пример image! = cv! imreadfimagel jpg) mage! = cv! imreadfimage! jpg) # Вертикальное о&ъе<3инение (снизу) vertical_cmeat = np concatenaK((/mageI image!) аш=0) nurnpy.emptyQ Назначение функция библиотеки NumPy, используется для создания но- вого массива указанной формы и типа данных, ж> не инициализирует его значе- ниями Вместо этого она оставляет массив жт , это означает, что его значения мотут быть произвольными и зависят от состояния памяти в момент создания массива Описание формата функции питру£mpty(shape, dtype=float, order='С), где shape - форма создаваемого массива, заданная в виде кортежа целых чисел Каждое целое число определяет размерность массива, dtype (необязательно) тип данных элементов массива По умолчанию ис- пользуется тип данных float, order (необязательно) порядок расположения элементов в памяти Это мо жет быть С (С style по умолчанию) или 'F (Fortran-style) Функция возвращает новый массив указанной формы и типа данных но без инициализации его значениями. Пример сот = пр empty ((3 3)) numpy.flipO Назначение функция библиотеки N реворота) массива вдоль указанной оси. зуется для отражения (пе
питруflrpfm, axis=Ncne), где m — исходный массив, который нужно отразить, axis (опционально) ось, вдоль которой нужно выполнить отражение Если не указана массив отражается вдоль всех осей. Этот метод возвращает новый массив, который является результатом отра жения исходного массива. Пример fiipped_arr = npjlipfarr сак-l) numpy.fullO Назначение функция библиотеки NumPy, используется для создания мас- сива, в котором все элементы инициализируются одним и тем же заданным зна- чением (в контексте компьютерного зрения, цветом) Описание формата функции numpy.jull(shape,fiU_yalue, dtype, order), где shape это кортеж, определяющий размеры массива Например, для одно- мерного массива (5,), для двумерного массива (3,4) и так далее, flll_yalue значение, к оторым будут заполнены элементы массива, dtype (необязательный) тип данных элементов массива По умолчанию ис- пользуется Попе, что означает использование типа данных по умолчанию Мо- жет принимать значения, такие как Ж float, прмиХ8 и другие, order (необязательный) опциональный аргумент, который определяет по- рядок размещения элементов в памяти. Может быть 'С (по умолчанию) для по рядка C-style (по строкам) или У для порядка Fonran-atyie (по столбцам) Пример mage = npJUll((500 500 3) 255 dtype-np umtS) И numpy.hstackO Назначение функция библиотеки NumPy, используется для вертикальной стыковки (конкатенации) массивов Она принимает список или кортеж массивов и объединяет их вдоль вертикальной оси, создавая новый массив Описание формата функции. питру3istack(tup), где tup список или кортеж массивов, которые нужно горизонтально стыковать
Пример array! = np array([[l 2] P 4]]) « numpy.meanQ Назначение фунта отеки NumPy, используется для вычисления среднего значения элементов массива. Описание формата функции: numpy теап(а, axis^None, dtype=None, aut=None keepdims=<no value>) где а массив, для которого нужно вычислить среднее значение, acts (опционально) ось или оси, вдоль которых будет вычисляться среднее значение Если не указана, среднее значенж будет вычислено по всем элементам массива, dtype (опционально) тип данных, используемый для вычисления среднего значения и возвращаем ого массива, out (опционально) массив, в который будут записаны результаты, keepdtms (опционально) если True, размерность возвращаемого массива будет сохранена для осей, по которым производилось усреднение Этот метод возвращает среднее значение элементов массива. Пример arr = np аггау([[! 2 3]. meanyaiuc = np mtan(arr) М numpy.onesO Назначение функция библиотеки NumPy, предназначенная для создания массива, элементы которого иницналюироваиы единицами Описание формата функции. numpy orresfshape, dtype, order). где shape это кортеж, определят Например для одно мерного массива (5), для двумерного массива (3,4) итак далее, dtype (необязательный) тип данных элементов массива По умолчанию ис пользуется None что означает использование типа данных по умолчанию Мо жет принимать значения, такие как mt,float, npnmt8 и другие
рядка С style (по строкам) или 'F для порящса. Fortran-style (по столбцам) Пример numpy.randomO Назначение модуль гр randomQ библиотеки NumPy предназначен для гене рации псевдослучайных чисел с различными распределениями Он предостав ляет широкий набор функций для создания случайных массивов, выборки слу чайных элементов и других операций, связанных со случайностью Описание формата функций: питру random randfdO, dl,dn) функция генерирует массив случайных чисел с плавающей точкой в диапазоне [0, 1). Числа берутся из равномерного распределения dO, dl, ,dn (необязательные) целые числа, определяющие раз- меры возвращаемого массива Если аргументы не указаны, функция возвращает одно случайное число с плавающей точкой; питру random randmtflow, high=Nom, size =None dtype ='l) функция гене- рирует массив случайных целых чисел из заданного дискретного равномерного распределения law нижияя граница диапазона (включительно) high верхняя граница диапазона (исключительно! Если ж указано, то числа генерируются в диапазоне от 0 до low 1 size (необязательный) кортеж или целое число, опре- деляющее размер возвращаем ого массива dtype (необязательный) тип данных массива, питру random randn(d), dl,dn) функция генерирует массив случайных чисел ж стандартного нормального (гауссова) распределения со средним значе- нием 0 и стандартным отклонением 1, питру random random(size=Hone) - функция возвращает массив случай- ных чисел с плавающей точкой из равномерного распределения в диапазоне от [О 0,1 0) size (необязательный) кортеж или целое число, определяющее размер возвращаемого массива, питру random chotce(a, size=None, replace=True, p=Mone) функция гене рирует случайную выборку из заданного массива (или последовательности) эле ментов а одномерный массив или целое число, из которого производится вы борка Если целое число, тоэлемемты выборки будут генерироваться в диапазоне [0 a) size (необязательный) кортеж или целое число, определяющее размер возвращаемого массива leplace (необязательный) булевый параметр указыва р (необязательный) одномерный ющии разрешено ли повто| массив вероятностей, соответствующих каждому элементу в а гр random seedfseecO - функция используется для инициализации генера тора псевдослучайных чисел в NumPy Установка начального значения (seed) обеспечивает воспроизводимость последовательности случайных чисел Это
программы pnnt( Уппитру random randmtQ \n" random array _randmt) pnnt( Уппитру random randnQ \n" random„array_randn) random_array „random - np random random((2 3)) pnnt( "innumpy random randomO to" random_arrqy_random) arr = np arrqy(flO 20 30 40 50]) random_choice_arrqy = np randomchoice(arr sae=3) prlnt( '•nnumpy random choice]) In" random_r.hoice„anay) random„choice„withj>robs = np randomchoicefarr sae=5 p=[01 02 03 02 02]) prlntf'innumpy random cholcef) withprobabilities to" random „choice „with„probs) np random seed(42) random_arrq>_rand_seed = np random r<md(2 3) prlntf'innumpy random rand()wlth seed 42 to" random „array „rand„seed) numpy.reshapeQ Назначение функция библиотеки NumPy, используется для изменения формы массива без изменения его данных Она позволяет переформатировать массив, изменяя его размерность или форму Описание формата функции питру reshapefa, newshape, arder='C), где а - исходный массив, который нужно переформатировать, newshape - новая форма (размерность) массива. Это может быть цепочно лую форму массива. ленный кортеж или список,: order (опционально) порядок, в котором элементы массива должны быть прочитаны Может быть С (порядок строк) или rF' (порядок столбцов) По умол чаиию используется порядок 'С Этот метод возвращает новый массив с указанной формой Пример arr = пр аггау(]]1 2 3] [4 5 6]J)
Назначение функция библиотеки Numpy, используется для вычисления стандартного отклонения значений элементов массива Описание формата функции. numpy std(a axis=None, dtype=None, ajt=Ncne, ddof=0 keepdims=<no vaiue>) где а - массив для которого нужно вычислить стандартное отклонение axis (опционально) ось или оси, вдоль которых будет вычисляться стаи дартное отклонение Если не у» по всем элементам массива. toe отклонение будет вычислено dtype (опционально) тип данных, используемый для вычисления стандарт ного отклонения и возвращаемого массива, out. (опционально) массив, в который будут записаны результаты, «Йо/(опционально) степень свободы, используемая при вычислении стаи дартного отклонения Значение по умолчанию равно О, keepdims (опционально) если True, размерность возвращаемого массива будет сохранена для осей, по которым производилось вычисление Пример arr = пр аггау([1 2 3 4 5]) it Вычисление стандартною отклонения всех элементов массива std_yalue = пр stdfarr) numpy.vstackO Назначение функция библиотеки NumPy, используется для вертикальной стыковки (конкатенации)массивов Она принимает список или кортеж массивов и объединяет их вдоль вертикальной оси, создавая нэвый массив Описание формата функции numpy.vstack(tup), где tup список или кортеж массивов, которые нужно вертикально стыковать Этот метод возвращает новый массив, который является результатом верти кальиой конкатенации входных массивов Пример И numpy.zerosO Назначение функция библиотеки NumPy, предназначенная для создания массива элементы которого инициализированы нулями
питруzeros(shape, dtype, order) где shape это кортеж, определяющий размеры массива. Например для одно мерного массива (5), для двумерного массива (3,4) итак далее dtype (необязательный) опциональный аргумент, указывающий тип дан ных элементов массива. По умолчанию используется float Может принимать значения такие как mt, float, rpjjirts и другие, order (необязательный) опциональный аргумент, который определяет по рядок размещения элементов в памяти Может быть 'С (по умолчанию) для по рядка С style (по строкам) или 'Р для порядкаFortmn-style (по столбцам) Пример image = пр zeros((500 500 3) dtype) tracker.init() Назначение метод в библиотеке OpenCV используется для инициализации трекера объектов перед его использованием Описание формата метода. trncker.inafframe, bbax) где frame - текущий кадр, в котором необходимо инициализировать трекер bbox - ограничивающий прямоугольник (bounding box) вокруг объекта, ко- торый требуется отслеживать Он может быть представлен в виде кортежа (х, у, w, И), где (р,у) координаты верхнего левого угла прямоугольника, a (w, И) его ширина и высота соответственно: Метод tracker.imtO инициализирует трекер с заданным ограничивающим прямоугольником в первом кадре видеопотока или последовательности кадров После инициализации трекер готов к отслеживанию объекта на последующих кадрах Пример tracker = cv2 TrackerKCF_create()» Ihnnfuamnaipa трекера KCF tracker.updateQ Назначение метод в библиотеке OpenCV исдользуется для обновления со стояния трекера объектов на новом кадре вцдеоиэтока Описание формата метода. success, Ыюх = trackerupdatetframe), где frame новый кадр видеопотока, на котором необходимо обновить состоя ние трекера
трекера. ЕсЙВ-крекер обнаружил объект на новом кадре, то success будет равно True в противном случае False', bbox — новый ограничивающий гфямоуголышк (bounding box) вокруг объ екта, который был обнаружен на новом кадре Этот прямоугольник представлен в виде кортежа (х у, w, И), где (х,у) координаты верхнего левого угла прямо угольника a(w h) его ширина и высота соответственно Метод tracker updated обновляет состояние трекера на новом кадре и воз вращает новый ограничь юугольиик вокруг объекта, атахжеинфор мацию о том удалось ли трекеру успешно обновить состояние на новом кадре success bbox = tractor updaie(fiame) tracker. getQ Назначение метод в библиотеке OpenCV, используется для получения те- кущего состояния трекера объектов Описание формата метода value = trackergetiparam), где param - параметр трекера, знач еиие которого необходимо получить Метод t гас berget О позволяет получить значение определенного параметра трекера Например, можно получить текущее положение объекта (ограничиваю- щий прямоугольник вокруг объекта), скорость движения объекта и другие харак- теристики трекера iiox = tracker get(cv2 Tractor BBOX) velocity = tractor get(cv2 Tracker VEL) print( Current bounding box "bbox) tracker.releaseQ Назначение метод в библиотеке OpenCV, используется в библиотеке OpenCV для освобождения ресурсов, занимаемых трекером объектов Описание формата метода. tracker released Этот метод освобождает память, выделенную для объекта трекера и закры вает его После вызова этого метода объект трекера больше не будет доступен и для дальнейшего использования потребуется повторная инициализация
Учебное издание Сацюк Александр Владимирович КОМПЬЮТЕРНОЕ ЗРЕНИЕ И НЕЙРОННЫЕ СЕТИ ПРАКТИКА Учебное пособие Подписано в печать 30 04 2025 Формат 60x84/16 Усп печ л. 21,16 Печать по требованию Бумага офсетная. Гарнитура «Таймс» Издательство «Цифра Инженерия» 160011, г Вологда, ул Козленская, д 63 Тел. 8(800)250-66-01 Е mail bookmg@infra-e ru https J/infra-exu научно-технической литературы