计算机视觉项目
关于
该仓库展示了在科罗拉多矿业学院于2020年秋季学期选修CSCI437课程期间,Mehmet和Jean完成的所有编码项目(实验),时间跨度为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).
致谢
有些 Python 脚本和/或代码片段是由 CSCI437 课程在课堂讲授、幻灯片或 Canvas 上提供的。CSCI437 课程在 科罗拉多矿业学院 开设。这些实验是与以下伙伴一起完成的:
- Jean Duong
- Mehmet Yilmaz
实验描述
实验 1
实验 1 侧重于使用 Python 的 OpenCV 基础知识。参与者需要编写一个 Python 程序来读取视频文件,在视频的每一帧上投影形成正方形的四个点,并通过逐步调整每个点的 Z 坐标来模拟正方形向远处退去的效果。此外,需要在每帧上显示帧编号,并上传带有图形覆盖的最终视频以供评估。
实验 2
实验 2 涉及图像变换,特别是使用“XYZ 固定角”约定围绕 X、Y 和 Z 轴的旋转。学生需要计算旋转矩阵、为相机位姿计算齐次变换矩阵、创建内参矩阵(calibration matrix),并使用 OpenCV 的 line 函数将点投影到图像上以形成熟悉的物体。该实验强调理解相机几何与变换矩阵在计算机视觉中的作用。
实验 3
实验 3 关于模板匹配,学生需要使用归一化互相关在电影文件的每一帧中跟踪模板子图像。作业要求允许用户从电影的第一帧中选择模板,在后续图像中跟踪该模板,在每张图像上绘制矩形以指示模板的位置,并创建输出电影文件以显示这些位置。鼓励学生尝试不同的模板以理解哪些模板能够实现最佳跟踪以及原因,并讨论在正确识别匹配时观察到的相关性得分。
实验 4
实验 4 侧重于使用 HSV 颜色空间进行颜色分割,这是讲座中讨论的一种在处理彩色图像时效果良好的技术。学生需要使用 Python/OpenCV 对提供的图像应用阈值操作以分割出停车标志像素。作业要求找到能最好检测停车标志像素的阈值,执行形态学操作以清理结果,并提交分割后的图像、Python 程序以及使用的阈值和形态学操作参数。
实验 5
实验 5 涉及在现有图像的特定区域内插入新的图像纹理,使得投影看起来正确。这个过程称为平面替换,需要学生使用投影变换(homography)技术将新图像映射到现有图像的平面区域。该实验强调单应性在实际修改图像内容同时保持透视正确性方面的应用。学生应提交原始图像、替换纹理后的图像、合成图像及他们的 Python 程序作为实验提交的一部分。
实验 6
实验 6 要求学生检测图像中由五个对比明显的同心圆(CCCs)组成的目标并计算其位姿。任务包括使用 OpenCV 检测 CCC 目标、正确排序它们、使用 OpenCV 的 solvePnP() 计算位姿,并在图像上绘制坐标轴和位姿。该实验强调目标检测、位姿估计和视觉输出格式等概念在计算机视觉中的应用。
实验 7
实验 7 以检测和匹配图像间的 SIFT 特征为中心。目标是识别从一幅图像到另一幅图像的正确 SIFT 特征匹配并分析这些匹配的准确性。该实验涉及使用提供的 Python 代码和数据集中的图像,调整算法参数以优化匹配检测,并计算精确率和召回率指标以评估特征匹配过程的性能。学生需要提交他们的 Python 程序以及不同参数设置下计算的精确率和召回率值。
实验 8
实验 8 侧重于使用特征匹配和仿射变换拟合进行目标检测,以便将训练图像中的对象检测并叠加到查询图像上。该实验包括在不同场景中检测对象,调整内点匹配数阈值以减少误报,并计算精确率、召回率和准确率指标以评估目标检测系统的性能。学生需要修改并运行提供的 Python 代码,分析系统在不同条件下的表现,并提交他们的发现和修改后的代码。
实验 9
实验 9 涉及在训练图像中的某个对象上放置标注点,并在后续的查询图像中自动正确显示这些点。该实验强调特征提取、使用比值检验来消除模糊匹配、使用 RANSAC 拟合二维仿射变换以消除外点,以及应用该变换将标注点从训练图像映射到查询图像。关键任务是调整内点匹配数阈值,以在误报与漏报之间取得平衡,力求在正确分类图像方面达到最高准确率。
实验 10
实验 10 专注于使用霍夫变换查找线段并识别图像中成组的平行线。它通过 OpenCV 的 cv2.HoughLinesP() 函数使用概率霍夫变换来检测由端点表示的线段。该实验还涉及通过分析这些线段的方向向量来识别消失点,旨在理解三维空间中平行线在二维图像平面上的取向。学生需要处理测试图像以找到平行线段,尝试不同参数以优化检测,并提交他们的结果和 Python 程序。
注意事项
- 运行这些脚本/实验需要以下第三方 Python 包:cv2 和 numpy。
- 其中一些实验可能要求使用特定版本的 cv2。遗憾的是,具体要求未记录,所以你需要自行查明。如果你查明了或遇到困难,请将其报告到 问题表单。