Программирование компьютерного зрения на языке Python
Покупка
Издательство:
ДМК Пресс
Автор:
Солем Ян Эрик
Перевод:
Слинкин Алексей Александрович
Год издания: 2023
Кол-во страниц: 313
Дополнительно
Вид издания:
Практическое пособие
Уровень образования:
ВО - Бакалавриат
ISBN: 978-5-89818-310-3
Артикул: 651162.03.99
Доступ онлайн
В корзину
Если вы хотите разобраться в основах теории и алгоритмов компьютерного зрения, то эта книга — как раз то, что вам нужно. Вы узнаете о методах распознавания объектов, трехмерной реконструкции, обработке стереоизображений, дополненной реальности и других приложениях компьютерного зрения. Изложение сопровождается понятными примерами на языке Python. При этом объяснения даются в общих чертах, без погружения в сухую теорию. Издание идеально подходит для студентов, исследователей и энтузиастов-любителей с базовыми знаниями математики и навыками программирования.
- Полная коллекция по информатике и вычислительной технике
- Аналитика данных
- ДМК Пресс. Информационные системы и технологии
- ДМК Пресс. ИТ-технологии для обучающихся
- Интермедиатор. Информационные системы и технологии (сводная)
- Интермедиатор. ИТ-технологии для обучающихся (сводная)
- Искусственный интеллект и машинное обучение
- Программирование на Python
- Проектирование баз и банков данных
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 09.03.01: Информатика и вычислительная техника
- 09.03.02: Информационные системы и технологии
- 09.03.03: Прикладная информатика
- 09.03.04: Программная инженерия
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов.
Для полноценной работы с документом, пожалуйста, перейдите в
ридер.
Ян Эрик Солем Программирование компьютерного зрения на языке Python
Programming Computer Vision with Python Jan Erik Solem Beijing • Cambridge • Farnham • Köln • Sebastopol • Tokyo
Москва, 2023 Программирование компьютерного зрения на языке Python Ян Эрик Солем 2-е издание, электронное
УДК 004.93Python ББК 32.972.1 С60 С60 Солем, Ян Эрик. Программирование компьютерного зрения на языке Python / Я. Э. Со- лем ; пер. с англ. А. А. Слинкина. — 2-е изд., эл. — 1 файл pdf : 313 с. — Москва : ДМК Пресс, 2023. — Систем. требования: Adobe Reader XI либо Adobe Digital Editions 4.5 ; экран 10". — Текст : электронный. ISBN 978-5-89818-310-3 Если вы хотите разобраться в основах теории и алгоритмов компьютерного зрения, то эта книга — как раз то, что вам нужно. Вы узнаете о методах распознавания объектов, трехмерной реконструкции, обработке стереоизображений, дополненной реальности и других приложениях компьютерного зрения. Изложение сопровождается понятными примерами на языке Python. При этом объяснения даются в общих чертах, без погружения в сухую теорию. Издание идеально подходит для студентов, исследователей и энтузиастов-любителей с базовыми знаниями математики и навыками программирования. УДК 004.93Python ББК 32.972.1 Электронное издание на основе печатного издания: Программирование компьютерного зрения на языке Python / Я. Э. Солем ; пер. с англ. А. А. Слинкина. — Москва : ДМК Пресс, 2016. — 312 с. — ISBN 978-5-97060-200-3. — Текст : непосредственный. Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Материал, изложенный в данной книге, многократно проверен. Но поскольку вероятность технических ошибок все равно существует, издательство не может гарантировать абсолютную точность и правильность приводимых сведений. В связи с этим издательство не несет ответственности за возможные ошибки, связанные с использованием книги. В соответствии со ст. 1299 и 1301 ГК РФ при устранении ограничений, установленных техническими средствами защиты авторских прав, правообладатель вправе требовать от нарушителя возмещения убытков или выплаты компенсации. ISBN 978-5-89818-310-3 © Jan Erik Solem, 2012. © Оформление, перевод на русский язык, ДМК Пресс, 2016
Оглавление Предисловие.................................................... 11 Требования к читателю и структура книги ...................................... 12 Необходимые знания и навыки ............................................................. 12 Чему вы научитесь ................................................................................ 12 Структура книги .................................................................................... 13 Введение в компьютерное зрение ................................................. 14 Python и NumPy ............................................................................. 14 Обозначения и графические выделения ........................................ 15 О примерах кода ........................................................................... 16 Как с нами связаться ..................................................................... 17 Благодарности .............................................................................. 17 Об авторе ...................................................................................... 18 Глава.1..Основы.обработки.изображений............... 19 1.1. PIL – библиотека Python Imaging Library ................................... 19 Преобразование изображения в другой формат ................................... 20 Создание миниатюр.............................................................................. 21 Копирование и вставка областей .......................................................... 21 Изменение размера и поворот .............................................................. 22 1.2. Библиотека Matplotlib ............................................................. 22 Рисование точек и прямых линий .......................................................... 22 Изолинии и гистограммы изображений ................................................ 25 Интерактивное аннотирование ............................................................. 26 1.3. Пакет NumPy ........................................................................... 27 Представление изображения в виде массива ....................................... 27 Преобразование уровня яркости .......................................................... 29 Изменение размера изображения ........................................................ 31 Выравнивание гистограммы ................................................................. 31 Усреднение изображений ..................................................................... 33 Метод главных компонент для изображений ......................................... 34 Использование модуля pickle ................................................................ 37 1.4. Пакет SciPy ............................................................................. 39 Размытие изображений ........................................................................ 39 Производные изображения ................................................................... 40 Морфология – подсчет объектов........................................................... 43 Полезные модули в пакете SciPy ........................................................... 46
Оглавление 1.5. Более сложный пример: очистка изображения от шумов ........ 47 Упражнения ................................................................................... 50 Соглашения в примерах кода ........................................................ 51 Глава.2..Локальные.дескрипторы.изображений...... 53 2.1. Детектор углов Харриса .......................................................... 53 Нахождение соответственных точек в изображениях ............................ 57 2.2. SIFT – масштабно-инвариантное преобразование признаков . 62 Особые точки ........................................................................................ 62 Дескриптор ........................................................................................... 63 Обнаружение особых точек ................................................................... 63 Сопоставление дескрипторов ............................................................... 67 2.3. Сопоставление изображений с геометками ............................ 70 Загрузка изображений с геометками из Panoramio ............................... 71 Сопоставление с помощью локальных дескрипторов ............................ 74 Визуализация связанных изображений ................................................. 76 Упражнения ................................................................................... 78 Глава.3..Преобразования.изображений................. 80 3.1. Гомографии ............................................................................ 80 Алгоритм прямого линейного преобразования ..................................... 82 Аффинные преобразования .................................................................. 84 3.2. Деформирование изображений .............................................. 85 Изображение внутри изображения ....................................................... 86 Кусочно-аффинное деформирование ................................................... 91 Регистрация изображений .................................................................... 95 3.3. Создание панорам ................................................................ 101 RANSAC .............................................................................................. 101 Устойчивое вычисление гомографии .................................................. 102 Сшивка изображений .......................................................................... 106 Упражнения ................................................................................. 109 Глава.4..Модели.камер.и.дополненная.реальность.... 110 4.1. Модель камеры с точечной диафрагмой ............................... 110 Матрица камеры ................................................................................. 111 Проецирование точек трехмерного пространства ............................... 113 Вычисление центра камеры ................................................................ 116 4.2. Калибровка камеры .............................................................. 116 Простой метод калибровки ................................................................. 117 4.3. Оценивание положения по плоскостям и маркерам .............. 119 4.4. Дополненная реальность ...................................................... 123 PyGame и PyOpenGL............................................................................ 124
Оглавление От матрицы камеры к формату OpenGL ............................................... 125 Помещение виртуальных на изображение .......................................... 127 Собираем все вместе ......................................................................... 129 Загрузка моделей ............................................................................... 132 Упражнения ................................................................................. 134 Глава.5..Многовидовая.геометрия...................... 135 5.1. Эпиполярная геометрия ....................................................... 135 Демонстрационный набор данных ...................................................... 138 Построение трехмерных графиков в Matplotlib .................................... 140 Вычисление F – восьмиточечный алгоритм ......................................... 141 Эпиполюс и эпиполярные прямые ...................................................... 142 5.2. Вычисления, относящиеся к камерам и трехмерной структуре .................................................................................... 145 Триангуляция ...................................................................................... 145 Вычисление матрицы камеры по точкам в пространстве ..................... 148 Вычисление матрицы камеры по фундаментальной матрице .............. 150 5.3. Многовидовая реконструкция ............................................... 153 Устойчивое вычисление фундаментальной матрицы ........................... 154 Пример трехмерной реконструкции .................................................... 156 Обобщения и случай более двух видов................................................ 159 5.4. Стереоизображения ............................................................. 161 Вычисление карт диспаратности......................................................... 163 Упражнения ................................................................................. 167 Глава.6..Кластеризация.изображений................. 170 6.1. Кластеризация методом K средних ....................................... 170 Пакет кластеризации в SciPy ............................................................... 171 Кластеризация изображений .............................................................. 172 Визуализация проекций изображений на главные компоненты ........... 174 Кластеризация пикселей .................................................................... 175 6.2. Иерархическая кластеризация .............................................. 178 Кластеризация изображений .............................................................. 182 6.3. Спектральная кластеризация ................................................ 186 Упражнения ................................................................................. 191 Глава.7..Поиск.изображений.............................. 193 7.1. Поиск изображений по содержанию ..................................... 193 Векторная модель – инструмент анализа текста ................................. 193 7.2. Визуальные слова ................................................................. 195 Создание словаря ............................................................................... 195 7.3. Индексирование изображений ............................................. 198 Подготовка базы данных ..................................................................... 198
Оглавление Добавление изображений ................................................................... 200 7.4. Поиск изображений в базе данных ........................................ 202 Использование индекса для получения кандидатов ............................ 203 Запрос по изображению ..................................................................... 205 Эталонное тестирование и построение графика ................................. 206 7.5. Ранжирование результатов с применением геометрических соображений ............................................................................... 209 7.6. Создание демонстраций и веб-приложений ......................... 212 Создание веб-приложений с помощью CherryPy ................................. 212 Демонстрация поиска изображений ................................................... 212 Упражнения ................................................................................. 215 Глава.8..Классификация.изображений. по.содержанию............................................... 217 8.1. Метод k ближайших соседей ................................................ 217 Простой двумерный пример ............................................................... 218 Плотные SIFT-дескрипторы в качестве признаков изображения ......... 222 Классификация изображений – распознавание жестов ...................... 223 8.2. Байесовский классификатор ................................................ 227 Использование метода главных компонент для понижения размерности ....................................................................................... 231 8.3. Метод опорных векторов ...................................................... 232 Использование библиотеки LibSVM .................................................... 233 И снова о распознавании жестов ........................................................ 235 8.4. Оптическое распознавание символов ................................... 237 Обучение классификатора .................................................................. 238 Отбор признаков ................................................................................. 238 Выделение клеток и распознавание символов .................................... 240 Выпрямление изображений ................................................................ 243 Упражнения ................................................................................. 245 Глава.9..Сегментация.изображений.................... 247 9.1. Разрезание графов ............................................................... 247 Графы изображений ........................................................................... 249 Сегментация с привлечением пользователя ....................................... 254 9.2. Сегментация с применением кластеризации ........................ 258 9.3. Вариационные методы ......................................................... 264 Упражнения ................................................................................. 265 Глава.10..OpenCV............................................. 268 10.1. Интерфейс между OpenCV и Python .................................... 268 10.2. Основы OpenCV .................................................................. 269
Оглавление Чтение и запись изображений ............................................................. 269 Цветовые пространства ...................................................................... 270 Отображение изображений и результатов обработки ......................... 270 10.3. Обработка видео ................................................................ 273 Ввод видео ......................................................................................... 273 Чтение видео в массивы NumPy .......................................................... 275 10.4. Трассировка ....................................................................... 276 Оптический поток ............................................................................... 276 Алгоритм Лукаса-Канаде .................................................................... 279 Использование трассировщика .......................................................... 283 Применение генераторов ................................................................... 284 10.5. Другие примеры ................................................................. 285 Ретуширование ................................................................................... 285 Сегментация по морфологическим водоразделам .............................. 286 Обнаружение фигур с помощью преобразования Хафа....................... 288 Упражнения ................................................................................. 288 Приложение.А..Установка.пакетов...................... 291 А.1. NumPy и SciPy....................................................................... 291 Windows .............................................................................................. 291 Mac OS X ............................................................................................. 291 Linux ................................................................................................... 292 А.2. Matplotlib .............................................................................. 292 А.3. PIL ........................................................................................ 292 А.4. LibSVM .................................................................................. 293 А.5. OpenCV ................................................................................. 293 Windows и Unix .................................................................................... 293 Mac OS X ............................................................................................. 294 Linux ................................................................................................... 294 А.6. VLFeat ................................................................................... 294 А.7. PyGame ................................................................................ 295 А.8. PyOpenGL ............................................................................. 295 А.9. Pydot .................................................................................... 295 А.10. Python-graph ....................................................................... 296 А.11. Simplejson ........................................................................... 296 А.12. PySQLite.............................................................................. 297 А.13. CherryPy ............................................................................. 297 Приложение.Б..Наборы.изображений.................. 298 Б.1. Flickr ..................................................................................... 298 Б.2. Panoramio ............................................................................. 299 Б.3. Оксфордская группа Visual Geometry .................................... 300
Оглавление Б.4. Эталонные изображения для распознавания Кентуккийского университета ..................................................... 301 Б.5. Другие наборы ..................................................................... 301 Пражский генератор данных и эталонный набор для сегментации текстур ............................................................................................... 301 Набор данных Grab Cut научно-исследовательского центра Microsoft в Кембридже ........................................................................ 301 Caltech 101.......................................................................................... 302 База данных статических положений руки ........................................... 302 Наборы стереоизображений Мидлбери-колледжа .............................. 302 Приложение.В..Благодарности.авторам.. изображений.................................................. 303 В.1. Изображения с сайта Flickr ................................................... 303 В.2. Прочие изображения ............................................................ 304 В.3. Иллюстрации ....................................................................... 304 Литература.................................................... 305 Предметный.указатель..................................... 308
предислОвие В современном мире изображения и видео встречаются повсюду. На сайтах обмена фотографиями и в социальных сетях миллиарды таких файлов. Поисковые системы предлагают изображения едва ли не на каждый запрос. Практически все мобильные телефоны и компьютеры оснащены камерами. В телефонах многих людей хранятся гигабайты фотографий и видео. Алгоритмы, позволяющие понять, что изображено на этих фотографиях, относятся к дисциплине, называемой «компьютерным зрением». Компьютерное зрение лежит в основе таких приложений, как поиск изображений, ориентация роботов в пространстве, анализ медицинских изображений, управление фотографиями и многих других. Эта книга задумана как доступное введение в практические вопросы компьютерного зрения с изложением теоретических и алгоритмических основ и ориентирована на студентов, научных работников и энтузиастов-любителей. Для языка программирования Python имеется много отличных и при том бесплатных модулей для обработки изображений, математических вычислений и добычи данных. Работая над этой книгой, я придерживался следующих принципов. • Излагать материал так, чтобы у читателя возникало желание выполнять на своих компьютерах примеры по мере чтения текста. • Использовать по преимуществу бесплатное ПО с открытым исходным кодом, не требующее много времени на начальное изучение. Python казался мне очевидным выбором. • Полнота и замкнутость. В этой книге рассматривается не весь предмет компьютерного зрения, но она полна в том смысле, что весь используемый в примерах код присутствует и снабжен пояснениями. Читатель сможет повторить все примеры и на их основе писать собственные программы. • Отдавать предпочтение широте охвата, а не деталям. Способствовать рождению идеи и побуждать к самостоятельным исследованиям, а не излагать сухую теорию.
Предисловие Короче говоря, я хотел написать книгу, которая станет источником вдохновения для всех, кто интересуется программированием компьютерного зрения. Требования.к.читателю. и.структура.книги В этой книге рассматриваются теоретические основы и алгоритмы решения широкого круга задач. Ниже приведено краткое описание излагаемого материала. Необходимые знания и навыки • Начальный опыт программирования. Вы должны знать, как пользоваться редактором и запускать скрипты, уметь структурировать код и иметь представление о базовых типах данных. Знакомство с Python или еще каким-либо скриптовым языком, например Ruby или Matlab, будет дополнительным подспорьем. • Основы математики. Для понимания примеров следует знать о матрицах, векторах, умножении матриц, стандартных математических функциях и понятиях, в частности, о производной и градиенте. Примеры, в которых используется более сложный математический аппарат, можно пропустить без ущерба для понимания. Чему вы научитесь Практическое программирование обработки изображений на Py- thon. • Методы компьютерного зрения, лежащие в основе разнообразных реальных приложений. • Многие фундаментальные алгоритмы и способы их реализации и применения в собственных программах. В примерах демонстрируется решение следующих задач: распознавание объектов, поиск изображений по содержанию, оптическое распознавание символов, оптический поток, трассировка, трехмер- ная реконструкция, обработка стереоизображений, дополненная реальность, определение положения камеры, создание панорамных
Предисловие изображений, очистка от шумов, группировка изображений и многое другое. Структура книги Глава 1 «Основы обработки изображений» Знакомство с основными средствами работы с изображениями и используемыми модулями Python. Здесь же рассматриваются многие базовые примеры, которые потребуются в других главах. Глава 2 «Локальные дескрипторы изображений» Описываются методы обнаружения особых точек в изображении и использование их для поиска соответственных точек и участков в разных изображениях. Глава 3 «Преобразования изображений» Описываются основные преобразования изображений и методы их вычисления. Рассматриваются, в частности, деформирование изображений и создание панорам. Глава 4 «Модели камер и дополненная реальность» Дается введение в модели камер, создание проекций трехмер- ных изображений и оценивание положения камеры. Глава 5 «Многовидовая геометрия» Объясняется, как работать с несколькими изображениями одной и той же сцены, дается введение в многовидовую геометрию и вычисление трехмерной реконструкции изображений. Глава 6 «Кластеризация изображений» Описано несколько методов кластеризации и показано, как с их помощью сгруппировать изображения по сходству или по содержанию. Глава 7 «Поиск изображений» Показано, как хранить изображения, чтобы их можно было эффективно искать по визуальному содержанию. Глава 8 «Классификация изображений по содержанию» Описаны алгоритмы классификации изображений по содержанию и их применение для распознавания объектов в изображениях. Глава 9 «Сегментация изображений» Описаны различные методы разбиения изображений на значимые участки с применением кластеризации, интерактивного взаимодействия с пользователем или моделей изображений.
Предисловие Глава 10 «OpenCV» Показано, как использовать интерфейс из Python к популярной библиотеке компьютерного зрения OpenCV и как работать с данными, полученными от фото- или видеокамеры. В конце книги приведен список литературы. Библиографические ссылки представлены номером работы в квадратных скобках, например [ 20]. Введение.в.компьютерное.зрение Под компьютерным зрением понимается автоматическое извлечение информации из изображений. В роли информации может выступать все, что угодно: 3D-модели, положение камеры, обнаружение и распознавание объектов, группировка изображений и поиск изображений по содержанию. В этой книге принято широкое определение компьютерного зрения, включающее такие вещи, как деформирование, очистка от шумов и дополненная реальность1. Иногда требуется, чтобы компьютерное зрение моделировало зрение человека, иногда данные подвергаются статистической обработке, а иногда ключом к решению задачи являются геометрические соображения. Мы попытаемся охватить все эти подходы. На практике компьютерное зрение представляет собой сплав программирования, моделирования и математики, иногда довольно сложный для усвоения. Я сознательно стремился свести теорию к минимуму – в духе максимы «делай настолько просто, насколько возможно, но не проще». Математические пассажи необходимы для понимания алгоритмов. Некоторые главы, по самой природе материала, насыщены математикой (особенно главы 4 и 5). При желании можно пропустить всю математику и просто пользоваться кодом. Python.и.NumPy Все примеры программ в этой книге написаны на языке Python. Это лаконичный язык с хорошей поддержкой ввода-вывода, численных расчетов, обработки изображений и построения графиков. У языка есть некоторые особенности, например синтаксически значимые отступы и компактный синтаксис, к которым нужно привыкнуть. 1 В этих примерах порождаются новые изображения, так что они относятся скорее к обработке изображений, чем к выделению информации как таковому.
Предисловие Все примеры рассчитаны на версию не ниже Python 2.6, поскольку большинство пакетов доступны только для таких версий. В версиях Python 3.x имеется много отличий, не всегда совместимых с Python 2.x и с экосистемой нужных нам пакетов (но это временно). Знакомство с основами Python облегчит понимание материала. Для начинающих хорошими отправными точками могут стать книга Mark Lutz «Learning Python» [20] и документация на сайте http:// www.python.org/. При программировании компьютерного зрения необходимы средства для представления векторов и матриц и операций над ними. Все это есть в модуле NumPy, где векторы и матрицы представлены типом array. Такое же представление используется и для изображений. Хорошим справочным пособием по модулю NumPy является бесплатная книга Travis Oliphant «Guide to Num- Py» [24]. Тем, кто только начинает осваивать NumPy, поможет также документация на сайте http://numpy.scipy.org/. Для визуализации результатов мы пользуемся модулем Matplotlib, а для более сложных математических вычислений – модулем SciPy. Это основные пакеты, знакомству с ними посвящена глава 1. Помимо основных, есть много других бесплатных пакетов на Python, применяемых для таких задач, как чтение данных в формате JSON и XML, загрузка и сохранение данных, генерация графиков, графическое программирование, создание демонстраций в вебе, построение классификаторов и многих других. Обычно они нужны только для разработки определенных приложений или демонстраций, в противном случае их можно не устанавливать. Заслуживает упоминания также интерактивная оболочка IPython, упрощающая отладку и экспериментирование. Скачать ее (вместе с документацией) можно с сайта http://ipython.org/. Обозначения.и.графические. выделения Код выглядит следующим образом: # точки x = [100,100,400,400] y = [200,500,200,500] # нанести точки на график plot(x,y)
Предисловие В книге применяются следующие графические выделения. Курсив Определения терминов, имена файлов и переменных. Моноширинный Имена функций, модулей Python, примеры кода и вывод на консоль. Гиперссылка URL-адреса Простой текст Все остальное. Математические формулы приводятся либо в основном тексте, например f (x) = wTx + b, либо в отдельной строке: f (x) = ∑i wixi + b Формулы нумеруются, только если на них имеются ссылки. Скалярные величины обозначаются строчными буквами (s, r, λ, θ, …), матрицы – заглавными буквами (A, V, H, …) (буквой I обозначается изображение, представленное в виде массива), а векторы – полужирными строчными буквами (t, c, ...). Точки на плоскости (в изображении) и трехмерном пространстве обозначаются соответственно x = [x, y] и X = [X, Y, Z]. О.примерах.кода Эта книга призвана помогать вам в работе. Поэтому вы можете использовать приведенный в ней код в собственных программах и в документации. Спрашивать у нас разрешение необязательно, если только вы не собираетесь воспроизводить значительную часть кода. Например, никто не возбраняет включить в свою программу несколько фрагментов кода из книги. Однако для продажи или распространения примеров из книг издательства O'Reilly на компакт-диске разрешение требуется. Цитировать книгу и примеры в ответах на вопросы можно без ограничений. Но для включения значительных объемов кода в документацию по собственному продукту нужно получить разрешение. Мы высоко ценим, хотя и не требуем, ссылки на наши издания. В ссылке обычно указываются название книги, имя автора, издательство и ISBN, например: Jan Erik Solem «Programming Computer Vision
Доступ онлайн
В корзину