Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Программирование компьютерного зрения на языке Python

Покупка
Артикул: 651162.03.99
Доступ онлайн
559 ₽
В корзину
Если вы хотите разобраться в основах теории и алгоритмов компьютерного зрения, то эта книга — как раз то, что вам нужно. Вы узнаете о методах распознавания объектов, трехмерной реконструкции, обработке стереоизображений, дополненной реальности и других приложениях компьютерного зрения. Изложение сопровождается понятными примерами на языке Python. При этом объяснения даются в общих чертах, без погружения в сухую теорию. Издание идеально подходит для студентов, исследователей и энтузиастов-любителей с базовыми знаниями математики и навыками программирования.
Солем, Я. Э. Программирование компьютерного зрения на языке Python : практическое руководство / Я. Э. Солем ; пер. с англ. А. А. Слинкина. - 2-е изд. - Москва : ДМК Пресс, 2023. - 313 с. - ISBN 978-5-89818-310-3. - Текст : электронный. - URL: https://znanium.com/catalog/product/2102597 (дата обращения: 05.05.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
Ян Эрик Солем

Программирование 
компьютерного 
зрения на языке
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 
Доступ онлайн
559 ₽
В корзину