p.s.
Назначение этой книги состоит в объяснении новичку шагов, касающиеся создания с помощью OpenCV/C++ и развертывания сквозного приложения из области машинного зрения. Книга начинается с инструкций по установке библиотеки OpenCV и заканчивается подготовкой читателя, способного разработать приложение, которое делает что-то реальное и полезное в машинном зрении/машинном обучении(computer vision/machine learning). Все понятия, включенные в текст, были выбраны из-за их частого использования и уместности в практических проектах на базе машинного зрения. Чтобы избежать излишнего теоретизирования, описание понятий сопровождается одновременно разработкой некоторых сквозных приложений. Проекты будут объяснены и разработаны постепенно во время всего текста курса, и тогда же будут представлены соответствующие теоретические понятия. Это поможет читателям при обучении схватывать практические применения понятий, не теряя из виду общую картину.
Изучение разработки OpenCV 3.0-приложений является совершенной книгой для любого, кто хочет погрузиться в захватывающий мир обработки изображений и машинного зрения. Эта книга нацелена на программистов, имеющих практическое знание языка C++. Предварительные знания библиотеки OpenCV не требуются. Книга также не требует предварительного понимания алгоритмов машинного зрения/машинного обучения(computer vision/machine learning), поскольку все понятия объяснены на основе базовых принципов. Хотя знакомство с этими понятиями помогло бы. К концу этой книги читатели получат личный опыт построения и развертывания приложений машинного зрения, используя библиотеку OpenCV и язык C++ и следуя подробным, пошаговым инструкциям. Они начнут ценить мощь библиотеки OpenCV в упрощении на вид сложных и интенсивных задач, таких как контрастное улучшение в изображениях, обнаружение границ, обнаружение лиц и классификация.
Глава 1 «Закладывание основ» рассмотрит фундамент структур исходных данных и контейнеров в библиотеке OpenCV, например объекты Mat, Rect, Point и Scalar. Она также объясняет необходимость в каждом из них в качестве отдельных типов данных, предлагая понимание случаев возможного применения. Основная часть главы фокусируется на том, как библиотека OpenCV использует объект Mat для сохранения изображений так, чтобы ваш код мог получить доступ к ним, рассматривает основы сканирования изображений, используя объект Mat и понятие R, G и B -каналов цвета. После того, как читатели будут комфортно работать с изображениями, мы представим понятие по-пиксельных преобразований изображений и покажем примеры простого кода, который может выполнять модификации контраста/яркости(contrast/brightness), используя простые обходы объекта Mat.
Глава 2 «Фильтрация изображений» углубляется до немного продвинутых по-пиксельных алгоритмов обхода. Мы представляем понятия масок и фильтрации изображений и говорим о стандартных фильтрах в библиотеке OpenCV, таких как бокс-фильтр, медианный(средний) фильтр и Гауссова размытость(Gaussian blur). Кроме того, мы математически объясним понятия свертки(convolution) и корреляции(correlation) и покажем, как универсальный фильтр может быть записан, используя метод filter2D библиотеки OpenCV. В качестве случая практического применения, мы реализуем популярный и интересный метод манипулирования изображением, именуемый фильтром Vignette.
Глава 3 «Пороговая обработка изображений» рассказывает о пороговой обработке изображений, являющейся еще одним процессом, который часто подходит для решения большинства проблем машинного зрения. В этой главе читателям дадут понять, что алгоритмы, которые попадают в эту область в основном, включают операции, которые производят двоичное изображение из полутонового. Объяснены подробно различные варианты, такие как двоичное изображение и инвертированное двоичное изображение, доступные в виде части модуля imgproc библиотеки OpenCV. Глава также кратко затронет понятия эрозии(erosion) и расширения (морфологические преобразования; dilation; morphological transformations) в качестве шагов, имеющих место после пороговой обработки.
Глава 4 «Гистограммы изображений» повествует об агрегации пиксельных значений, обсуждая гистограммы изображений и связанные с гистограммами операции на изображениях, такие как вычисление и отображение гистограмм, понятия цветных и многомерных гистограмм.
Глава 5 «Производные изображения и обнаружение границ» фокусируется на других типах информации, которая может быть извлечена из пикселей нашего изображения. Читателям будут представлены понятия производных изображений, и обсуждение затем пойдёт дальше к приложению производных изображений в алгоритмах обнаружения границ. Представлена демонстрация методов обнаружения границ в библиотеке OpenCV, например, методов Sobel, Canny и Laplacian. В качестве маленького практического примера «использования метода Laplacian, мы покажем, как он может использоваться для обнаружения нерезкости(blurriness) изображений.
Глава 6 «Обнаружение лиц с помощью библиотеки OpenCV» повествует об одной из самых популярных и повсеместных проблем в сообществе машинного зрения - об обнаружении объектов, в частности лиц на изображениях. Основная мотивация этой главы состоит в рассмотрении алгоритма классификатора Haar-каскада(Haar-cascade classifier algorithm), который используется в обнаружении лиц, и затем продолжена показом того, как сложный алгоритм может быть выполнен, используя одну строку кода из библиотеки OpenCV. В этой точке мы представляем наш проект программирования предсказания пола человека по изображению лица. Читателю будет дано понимание того, что любой системный анализ, касающийся изображений лиц (будь то распознавание лиц или пола, возраста или прогноз этнической принадлежности) требует точного и устойчивого обнаружения лиц в качестве своего первого шага.
Глава 7 «Аффинные преобразования и выравнивание лиц» служит естественным преемником предыдущей главы. После обнаружения лиц на изображениях читателям будут рассказано о предпринятых шагах пост-обработки, о геометрических(аффинных) преобразованиях, таких как изменение размеров(resizing), обрезка(cropping) и поворот(rotating) изображений. Объяснена необходимость в таких преобразованиях. Все изображения в проекте классификации полов должны пройти через этот шаг перед выделением признаков.
Глава 8 «Дескрипторы признаков в библиотеке OpenCV» вводит понятие дескрипторов признаков. Читатели понимают, что, чтобы вывести значимую информацию из изображений, нужно из пиксельных значений создать надлежащие признаки(черты лица). Другими словами, изображения должны быть преобразованы в векторы признаков(характеристик) прежде, чем подать их в алгоритм машинного обучения. С этой целью глава также вводит понятие локального двоичного шаблона(local binary pattern; LBP) в качестве признаков(характеристик) и также рассказывает о деталях реализации. Мы демонстрируем процесс вычисления LBP-характеристик из обрезанных(cropped) «и выровненных(aligned) изображений лиц, которые мы получили в предыдущих главах.
Глава 9 «Машинное обучение с помощью библиотеки OpenCV» знакомит читателей с различными классификаторами и алгоритмами машинного обучения, доступными в виде части библиотеки OpenCV и рассказывает о том, как они могут использоваться для производства значимых прогнозов из данных. Читатели засвидетельствуют, что алгоритмы обучения на входе принимают векторы характеристик, вычисленные в предыдущих главах, и на выходе делают интеллектуальные прогнозы. Будут раскрыты подробно все шаги, связанные с использованием алгоритма обучения: обучение, тестирование, перекрестная проверка, выбор гиперпараметров и оценка результатов.
Приложение «Параметры командной строки в языке C++» говорит о параметрах командной строки в языке C++ и о том, как извлечь самое лучшее из использования их при написании OpenCV-программ.
Книга предполагает наличие у читателя базовых практических знаний языка C++. Однако предварительные знания машинного зрения, обработки изображений или машинного обучения не предполагаются. Вам нужна установка библиотеки OpenCV 3.1 на своих системах, чтобы выполнять примеры программ, распространённые в различных главах этой книги. Установка и детали настройки были уже совместно использованы.