计算机视觉项目

项目的GitHub仓库

关于

此仓库展示了所有编码项目(实验)MehmetJeanCSCI437课程期间于科罗拉多矿业学院2020年秋季学期注册时完成的项目,覆盖的时间段为2020年8月28日2020年12月14日。这些实验提供了一个全面的平台,用于学习Python、OpenCV和基础计算机视觉概念。

关于课程

我在2020年秋季学期选修了计算机视觉导论 (CSCI437)课程。在此期间,William Hoff博士和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).

致谢

在课堂讲授、幻灯片或 Canvas 中提供了由 CSCI437 课程提供的 Python 脚本和/或代码片段。CSCI437 课程由科罗拉多矿业学院提供。这些实验与以下合作伙伴完成:

  • Jean Duong
  • Mehmet Yilmaz

实验描述

实验 1

实验 1 侧重于使用 OpenCV 与 Python 的基础。要求参与者编写一个 Python 程序,读取视频文件,在视频的每一帧上投影形成正方形的四个点,并通过逐步调整每个点的 Z 坐标来模拟正方形向远处后退的效果。此外,还需在每帧上显示帧号,并上传带有图形叠加的最终视频以供评估。

实验 2

实验 2 处理图像变换,特别是围绕 X、Y、Z 轴的旋转,使用“XYZ 固定角度”约定。学生需要计算旋转矩阵,求解相机姿态的齐次变换矩阵,创建标定矩阵,并使用 OpenCV 的 line 函数将点投影到图像上形成熟悉的对象。该实验强调对相机几何和计算机视觉中变换矩阵的理解。

实验 3

实验 3 关于模板匹配,学生需要使用归一化互相关在电影文件的每一帧中跟踪模板子图像。任务包括让用户从电影的第一帧中选择模板,随后在后续图像中跟踪该模板,在每张图像上绘制矩形以指示模板位置,并生成输出电影文件展示这些位置。鼓励学生尝试不同的模板,以了解哪种模板能够实现最佳跟踪以及原因,并讨论在正确匹配时观察到的相关分数。

实验 4

实验 4 侧重于使用 HSV 颜色空间进行颜色分割,这一技术在课堂上因其在处理彩色图像时的有效性而被讨论。学生需要使用 Python/OpenCV 程序对提供的图像执行阈值操作,以分割出停止标志的像素。任务要求找到能够最佳检测停止标志像素的阈值,执行形态学操作以清理结果,并提交分割后的图像、Python 程序以及使用的阈值和形态学操作参数。

实验 5

实验 5 的任务是将新图像纹理插入现有图像的特定区域,使投影看起来正确。此过程称为平面替换,要求学生使用投影变换(单应性)技术将新图像映射到现有图像的平面区域。实验强调单应性在保持透视正确性的同时修改图像内容的实际应用。学生需提交原始图像、替换纹理后的图像、合成图像以及相应的 Python 程序。

实验 6

实验 6 指导学生检测并计算图像中由五个对比鲜明的同心圆(CCC)组成的目标的姿态。任务包括使用 OpenCV 检测 CCC 目标,正确排序,使用 OpenCV 的 solvePnP() 函数计算姿态,并在图像上绘制坐标轴和姿态。实验强调目标检测、姿态估计以及在计算机视觉中可视化输出的概念应用。

实验 7

实验 7 以检测和匹配图像之间的 SIFT 特征为中心。目标是识别一幅图像到另一幅图像的正确 SIFT 特征匹配并分析这些匹配的准确性。实验使用提供的 Python 代码和数据集中的图像,调整算法参数以优化匹配检测,并计算精确率和召回率指标以评估特征匹配过程的性能。学生需提交他们的 Python 程序以及不同参数设置下计算的精确率和召回率值。

实验 8

实验 8 侧重于使用特征匹配和仿射变换拟合进行目标检测,将训练图像中的对象检测并叠加到查询图像上。实验包括在不同场景下检测对象,调整内点匹配阈值以减少误报,并计算精确率、召回率和准确率指标以评估目标检测系统的性能。学生需修改并运行提供的 Python 代码,分析系统在不同条件下的表现,并提交他们的发现和修改后的代码。

实验 9

实验 9 包含在训练图像中的对象上放置标注点,并在后续查询图像中自动正确显示这些点。该实验强调特征提取、使用比值测试消除模糊匹配、使用 RANSAC 拟合 2D 仿射变换以剔除离群点,并将变换应用于将标注点从训练图像映射到查询图像。关键任务是调整内点匹配阈值,以在误报和漏报之间取得平衡,力求在正确分类图像时达到最高准确率。

实验 10

实验 10 致力于使用霍夫变换寻找线段并识别图像中平行线的集合。它利用 OpenCV 的 cv2.HoughLinesP() 函数通过概率霍夫变换检测由端点表示的线段。实验还涉及通过分析这些线段的方向向量来识别消失点,旨在理解平行线在三维空间中的方向如何在二维图像平面上呈现。学生需处理测试图像以寻找平行线段,尝试不同参数以优化检测,并提交结果以及相应的 Python 程序。

备注

  • 您需要以下第三方 Python 包来运行这些脚本/实验:cv2 & numpy。
  • 其中一些实验可能需要使用特定版本的 cv2。遗憾的是,需求未被记录,您需要自行摸索。如果您找到了答案或遇到困难,请在问题表单中报告。