Проекты по компьютерному зрению

Репозиторий проекта на GitHub

О проекте

Этот репозиторий демонстрирует все кодовые проекты (лабораторные работы), над которыми работали Mehmet и Jean, будучи зачисленными на курс CSCI437 в течение осеннего семестра 2020 года в Colorado School of Mines, охватывающий период с 28 августа 2020 г. по 14 декабря 2020 г.. Эти лабораторные работы предоставляли всестороннюю платформу для изучения Python, OpenCV и базовых концепций компьютерного зрения.

О курсе

Я посещал Введение в компьютерное зрение (CSCI437) в осеннем семестре 2020 года. В это время курс вели Dr. William Hoff и Dr. Tom Williams. CSCI437. Ниже приведено официальное описание курса CSCI437:

(I) Computer vision is the process of using computers to acquire images, transform images, and extract symbolic descriptions from images. This course provides an introduction to this field, covering topics in image formation, feature extraction, location estimation, and object recognition. Design ability and hands-on projects will be emphasized, using popular software tools. The course will be of interest both to those who want to learn more about the subject and to those who just want to use computer imaging techniques. Must be Senior level standing. 3 hours lecture; 3 semester hours. Prerequisite: (MATH201 or MATH334 or EENG311),and,MATH332,and,(CSCI200 or CSCI261).

Благодарности

В репозитории есть Python-скрипты и/или фрагменты кода, которые были предоставлены на занятиях по CSCI437, в слайдах или через Canvas. Курс CSCI437 проводится в Colorado School of Mines. Эти лабораторные работы выполнялись с следующими партнерами:

  • Jean Duong
  • Mehmet Yilmaz

Описание лабораторных работ

Лабораторная работа 1

Лабораторная работа 1 фокусируется на основах использования OpenCV с Python. Участникам необходимо написать программу на Python, которая читает видеофайл, проектирует четыре точки, образующие квадрат, на каждый кадр видео и моделирует уход квадрата в глубину, постепенно изменяя Z-координату каждой точки. Кроме того, на каждом кадре должен отображаться номер кадра, а итоговое видео с графическими наложениями должно быть загружено для проверки.

Лабораторная работа 2

Лабораторная работа 2 посвящена преобразованиям изображений, в частности вращениям вокруг осей X, Y и Z с использованием соглашения «XYZ фиксированные углы». Студенты должны вычислить матрицы вращения, вычислить гомогенные матрицы преобразования для поз камер, создать матрицу калибровки и спроецировать точки на изображение, чтобы сформировать знакомый объект, используя функцию line из OpenCV. Лабораторная работа акцентирует внимание на понимании геометрии камеры и матриц преобразования в компьютерном зрении.

Лабораторная работа 3

Лабораторная работа 3 посвящена поиску шаблонов, где студентам требуется отслеживать шаблон — подизображение — в каждом кадре видеофайла с использованием нормализованной кросс-корреляции. Задание включает возможность выбора шаблона пользователем из первого изображения фильма, отслеживание этого шаблона на последующих изображениях, рисование прямоугольников для указания местоположения шаблона на каждом изображении и создание выходного видеофайла, показывающего эти местоположения. Студентов поощряют экспериментировать с разными шаблонами, чтобы понять, какой из них обеспечивает наилучшее отслеживание и почему, а также обсудить наблюдаемые оценки корреляции при правильных совпадениях.

Лабораторная работа 4

Лабораторная работа 4 сосредоточена на сегментации по цвету с использованием цветового пространства HSV, техники, обсуждаемой на лекциях за её эффективность при работе с цветными изображениями. Студентам нужно применить операции пороговой фильтрации для выделения пикселей стоп-знака на предоставленных изображениях с помощью программы на Python/OpenCV. В задании требуется подобрать значения порогов для наилучшего обнаружения пикселей стоп-знака, выполнить морфологические операции для очистки результата и прислать сегментированные изображения вместе с программой на Python и использованными параметрами порога и морфологических операций.

Лабораторная работа 5

Лабораторная работа 5 включает задачу вставки новой текстуры изображения в определённую область существующего изображения таким образом, чтобы проекция выглядела правильно. Этот процесс, известный как замена плоскости, требует от студентов использования методов проективного преобразования (гомографии) для отображения нового изображения на плоскую область существующего изображения. Лабораторная работа подчёркивает практическое применение гомографии для изменения содержания изображения при сохранении корректности перспективы. Ожидается, что студенты представят исходное изображение, изображение с заменённой текстурой, объединённое изображение и программу на Python в рамках сдачи лабораторной работы.

Лабораторная работа 6

Лабораторная работа 6 инструктирует студентов обнаруживать и вычислять позу цели, состоящей из пяти контрастных концентрических кругов (CCC), на изображении. Задача включает использование OpenCV для обнаружения целей CCC, правильную их сортировку, вычисление позы с помощью функции solvePnP() из OpenCV и отрисовку координатных осей и позы на изображении. Лабораторная работа подчёркивает применение таких концепций, как обнаружение цели, оценка позы и форматирование визуального вывода в компьютерном зрении.

Лабораторная работа 7

Лабораторная работа 7 сконцентрирована на обнаружении и сопоставлении признаков SIFT между изображениями. Цель — выявить корректные совпадения признаков SIFT из одного изображения в другое и проанализировать точность этих совпадений. Лабораторная работа включает использование предоставленного кода на Python и изображений из набора данных, настройку параметров алгоритма для оптимизации обнаружения совпадений и вычисление метрик precision и recall для оценки производительности процесса сопоставления признаков. Студенты должны предоставить свою программу на Python и вычисленные значения precision и recall для разных настроек параметров.

Лабораторная работа 8

Лабораторная работа 8 посвящена обнаружению объектов с использованием сопоставления признаков и подгонки аффинного преобразования для обнаружения и наложения объектов из обучающего изображения на запросное изображение. Лабораторная работа включает обнаружение объекта в разных сценариях, настройку порога числа inlier-совпадений для уменьшения ложных срабатываний и вычисление метрик precision, recall и accuracy для оценки производительности системы обнаружения объектов. Студентам предлагается модифицировать и запускать предоставленный код на Python, анализировать работу системы при разных условиях и представить свои выводы и изменённый код.

Лабораторная работа 9

Лабораторная работа 9 включает размещение точек аннотаций на объекте в обучающем изображении и автоматическое корректное отображение этих точек на объекте в последующих запросных изображениях. Эта лабораторная работа подчёркивает извлечение признаков, сопоставление с использованием ratio-теста для устранения неоднозначных соответствий, подгонку 2D-аффинного преобразования с использованием RANSAC для исключения выбросов и применение преобразования для отображения точек аннотаций из обучающего изображения в запросные изображения. Критическая задача — подобрать порог числа inlier-совпадений, чтобы сбалансировать ложноположительные и ложноотрицательные срабатывания, стремясь к наивысшей точности классификации изображений.

Лабораторная работа 10

Лабораторная работа 10 посвящена использованию преобразования Хафа для поиска отрезков линий и определения множеств параллельных линий в изображении. Используется вероятностное преобразование Хафа через функцию cv2.HoughLinesP() из OpenCV для обнаружения отрезков линий, представленных их конечными точками. Лабораторная работа также включает идентификацию точек схода путем анализа векторов направления этих отрезков линий, с целью понимания ориентации параллельных линий в 3D-пространстве при их отображении в 2D-плоскости изображения. Студентам предлагается обработать тестовые изображения для поиска параллельных отрезков линий, поэкспериментировать с параметрами для оптимизации обнаружения и представить свои результаты вместе с программой на Python.

Примечания

  • Для запуска этих скриптов/лабораторных работ вам понадобятся следующие сторонние пакеты Python: cv2 и numpy.
  • Некоторые из этих лабораторных работ могут требовать использования определённой версии cv2. К сожалению, требования не были задокументированы, поэтому вам придётся разбираться с этим самостоятельно. Если вы выясните это или столкнётесь с затруднениями, пожалуйста, сообщите об этом через форму для сообщений об ошибках.