Сацюк А. В.
Представляет собой комплексное руководство, включающее как краткое изложение теоретических основ, так и подробное описание практических методов компьютерного зрения. Рассматриваются основные принципы работы с изображениями и видео, методы их обработки, выделения объектов, а также интерактивного управления. Практическая часть учебника сопровождается программными примерами на языке Python, начиная с базовых операций над пикселями и заканчивая применением глубокого обучения для решения задач распознавания. Особое внимание уделено использованию библиотеки OpenCV и применению полученных знаний на встраиваемых системах. Для студентов технических вузов, инженеров и аспирантов, специализирующихся в области автоматизации, искусственного интеллекта, программирования и робототехники.
ВВЕДЕНИЕ 8
1. ОСНОВЫ КОМПЬЮТЕРНОГО ЗРЕНИЯ 10
1.1. История развития компьютерного зрения 10
1.2. Биологические основы цветовосприятия 14
1.3. Пиксели и их представление 17
1.4. Цветовые пространства 22
1.5. Библиотеки для работы с изображениями. OpenCV 26
Практическое задание 30
2. ОСНОВЫ ОБРАБОТКИ ИЗОБРАЖЕНИЙ И ВИДЕО 31
2.1. Представление изображений 31
2.2. Загрузка, отображение и сохранение изображений 38
2.3. Захват видео с камеры и из файла 40
2.4. Операции над пикселями 43
2.5. Основные операции с изображением 47
2.5.1. Изменение размера изображения 47
2.5.2. Обрезка изображения 51
2.5.3. Вращение изображения 53
2.5.4. Отражение изображения 56
2.6. Конкатенация изображений 58
Практическое задание 60
3. МЕТОДЫ ОБРАБОТКИ ИЗОБРАЖЕНИЙ 62
3.1. Преобразование между цветовыми пространствами 62
3.2. Цветовая коррекция 65
3.3. Фильтрация цветов и цветовая сегментация 67
3.4. Инверсия изображения 72
3.5. Линейное объединение двух изображений 75
3.6. Вычисления абсолютной разницы изображений 77
3.7. Преобразование изображения с использованием абсолютных значений и масштабирования 81
3.8. Бинаризация и пороговая обработка 83
3.9. Фильтрация 86
3.9.1. Основные термины и явления фильтрации 86
3.9.2. Принцип фильтрации 88
3.9.3. Ядро фильтра 97
3.9.4. Фильтрация без использования ядер свертки: нелинейные фильтры 103
3.9.5. Практическое применение фильтров 105
3.10. Нормализация и масштабирование значений пикселей 122
3.11. Выделение контуров и краев на изображениях 125
3.11.1. Обнаружения границ 125
3.11.2. Обнаружения контуров 128
3.12. Гомография изображений 132
3.13. Вычисление гистограммы изображения 137
3.14. Сегментация изображений 142
Практическое задание 145
4. ИНТЕРАКТИВНОЕ УПРАВЛЕНИЕ В КОМПЬЮТЕРНОМ ЗРЕНИИ 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.2.2. Отрисовка прямоугольника 162
5.2.3. Отрисовка кругов и эллипсов 164
5.2.4. Отрисовка полигональных фигур 166
5.2.5. Создание холста 168
5.3. Позиционирование геометрических фигур 171
5.4. Динамическая отрисовка прямоугольной области 173
5.5. Добавление текста к изображению 176
Практическое задание 178
6. ОБРАБОТКА ДВИЖУЩИХСЯ ОБЪЕКТОВ 180
6.1. Основы обработки движущихся объектов 180
6.2. Предварительная обработка изображений 181
6.3. Выбор области интереса 184
6.4. Фильтр Калмана 192
6.4.1. Принцип работы фильтра Калмана 192
6.4.2. Математическая модель фильтра Калмана для отслеживания 195
6.4.3. Практическое применение фильтра Калмана 200
6.4.4. Расширенный фильтр Калмана для нелинейных моделей 207
6.5. Трекинг движущихся объектов 208
6.6. Анализ траекторий движущихся объектов 215
Практическое задание 219
7. РАСПОЗНАВАНИЕ ОБЪЕКТОВ: КЛАССИЧЕСКИЕ МЕТОДЫ 222
7.1. Введение в распознавание объектов 222
7.2. Поиск объектов с помощью сопоставления шаблонов 223
7.3. Признаки Хаара 228
7.4. Применение каскадов Хаара 232
Практическое задание 235
8. ГЛУБОКОЕ ОБУЧЕНИЕ И НЕЙРОННЫЕ СЕТИ 237
8.1. Основы нейронной сети 237
8.1.1. Нейрон: от аналогии к техническому пониманию 237
8.1.2. Искусственная нейронная сеть 240
8.2. Введение в глубокое обучение 245
8.3. Сверточная нейронная сеть 247
8.4. Пример применения сверточной нейронной сети 248
8.5. Обобщенная структура сверточной нейронной сети 257
8.6. YOLO (You Only Look Once) 258
8.6.1. История развития YOLO 258
8.6.2. Принцип работы YOLO 264
8.6.3. Работа YOLO на этапе обучения 266
8.6.4. Практическое применение YOLO 273
Практическое задание 277
9. ВСТРАИВАЕМЫЕ СИСТЕМЫ КОМПЬЮТЕРНОГО ЗРЕНИЯ 278
9.1. Аппаратные ресурсы 278
9.2. Выбор микрокомпьютера 287
9.3. Установка и настройка окружения 293
9.4. Работа с камерой 295
9.5. Программно-аппаратная архитектура CUDA 302
9.6. Настройка CUDA на микрокомпьютере Jetson Nano 304
Практическое задание 308
Заключение 310
Словарь терминов 311
Список рекомендуемой литературы 319
ПРИЛОЖЕНИЕ 320
cv2.addWeighted() 320
cv2.bilateralFilter() 320
cv2.bitwise_and() 321
cv2.bitwise_not() 321
cv2.bitwise_xor() 322
cv2.boxPoints() 322
cv2.calcHist() 322
cv2.Canny() 323
cv2.CascadeClassifier() 323
cv2.circle() 324
cv2.contourArea() 324
cv2.convertScaleAbs() 325
cv2.createTrackbar() 325
cv2.cvtColor() 326
cv2.destroyAllWindows() 327
cv2.detectMultiScale() 327
cv2.dilate() 328
cv2.distanceTransform() 328
cv2.drawContours() 329
cv2.ellipse() 329
cv2.erode() 330
cv2.fastNlMeansDenoising() 331
cv2.filter2D() 331
cv2.findContours() 332
cv2.flip() 333
cv2.GaussianBlur() 333
cv2.getRectSubPix() 334
cv2.getRotationMatrix2D() 334
cv2.getTrackbarPos() 335
cv2.imread() 335
cv2.imshow() 335
cv2. imwrite() 336
cv2.inRange() 336
cv2.KalmanFilter() 336
cv2.Laplacian() 337
cv2.line() 338
cv2.magnitude() 338
cv2.matchTemplate() 339
cv2.medianBlur() 339
cv2.merge() 340
cv2.minAreaRect() 340
cv2.minMaxLoc() 340
cv2.moveWindow() 341
cv2.MultiTracker() 342
cv2.namedWindow() 342
cv2.normalize() 342
cv2.polylines() 343
cv2.putText() 344
cv2.rectangle() 344
cv2.remap() 345
cv2.resize() 346
cv2.saturate_cast() 346
cv2.selectROI() 347
cv2.setMouseCallback() 347
cv2.setWindowProperty() 348
cv2.Sobel() 349
cv2.split() 349
cv2.threshold() 350
cv2.subtract() 350
cv2.TrackerCSRT() 351
cv2.TrackerKCF() 351
cv2.TrackerMedianFlow() 351
cv2.TrackerMIL() 351
cv2.TrackerMOSSE() 352
cv2.VideoCapture() 352
cv2.VideoWriter() 352
cv2.VideoWriter_fourcc() 353
cv2.waitKey() 353
cv2.warpAffine() 353
numpy.array() 354
numpy.arange() 355
np.clip() 355
numpy.concatenate() 355
numpy.empty() 356
numpy.flip() 356
numpy.full() 357
numpy.hstack() 357
numpy.mean() 358
numpy.ones() 358
numpy.random() 359
numpy.reshape() 360
numpy.std() 361
numpy.vstack() 361
numpy.zeros() 361
tracker.init() 362
tracker.update() 362
tracker.get() 363
tracker.release() 363