Dự án Thị giác Máy
Giới thiệu
Kho lưu trữ này trình bày tất cả các dự án mã (các lab) mà Mehmet và Jean đã làm khi theo học CSCI437 trong học kỳ Mùa Thu 2020 tại Trường Khoa học Mỏ Colorado, bao gồm khoảng thời gian từ 28 tháng 8, 2020, đến 14 tháng 12, 2020. Những lab này đã cung cấp một nền tảng toàn diện để học Python, OpenCV và các khái niệm cơ bản về thị giác máy.
Về Lớp Học
Tôi đã học Giới Thiệu Về Thị Giác Máy (CSCI437) trong học kỳ Mùa Thu 2020. Trong thời gian này, Tiến sĩ William Hoff và Tiến sĩ Tom Williams đã giảng dạy lớp. CSCI437. Sau đây là mô tả chính thức của lớp 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).
Ghi công
Có các script Python và/hoặc đoạn mã được cung cấp bởi lớp CSCI437 trong bài giảng, trên slide, hoặc thông qua Canvas. Lớp CSCI437 được tổ chức tại Trường Khoa học Mỏ Colorado. Những lab này được thực hiện cùng các cộng tác viên sau:
- Jean Duong
- Mehmet Yilmaz
Mô tả các Lab
Bài Lab 1
Bài Lab 1 tập trung vào những điều cơ bản của việc sử dụng OpenCV với Python. Thí sinh được yêu cầu viết một chương trình Python đọc một tệp video, chiếu bốn điểm tạo thành một hình vuông lên mỗi khung của video, và mô phỏng hình vuông lùi về phía xa bằng cách tăng dần điều chỉnh tọa độ Z của mỗi điểm. Ngoài ra, số khung cũng phải được hiển thị trên mỗi khung, và video cuối cùng với các lớp đồ họa cần được tải lên để đánh giá.
Bài Lab 2
Bài Lab 2 xử lý các phép biến đổi ảnh, tập trung cụ thể vào việc xoay quanh các trục X, Y và Z sử dụng quy ước “góc cố định XYZ”. Sinh viên được giao nhiệm vụ tính các ma trận quay, tính ma trận biến đổi thuần nhất cho các vị trí camera, tạo một ma trận hiệu chỉnh, và chiếu các điểm lên một ảnh để hình thành một đối tượng quen thuộc bằng hàm line của OpenCV. Lab nhấn mạnh việc hiểu hình học camera và các ma trận biến đổi trong thị giác máy.
Bài Lab 3
Bài Lab 3 về việc so khớp mẫu, nơi sinh viên được giao nhiệm vụ theo dõi một ảnh mẫu con qua mỗi khung của một tệp phim sử dụng tương quan chéo chuẩn hóa. Bài tập bao gồm cho phép người dùng chọn một mẫu từ ảnh đầu tiên của phim, theo dõi mẫu này qua các ảnh tiếp theo, vẽ các hình chữ nhật để chỉ vị trí của mẫu trên mỗi ảnh, và tạo một tệp phim đầu ra để hiển thị các vị trí này. Sinh viên được khuyến khích thử nghiệm với các mẫu khác nhau để hiểu mẫu nào cho phép theo dõi tốt nhất và tại sao, và thảo luận về các điểm số tương quan quan sát được khi các khớp đúng được xác định.
Bài Lab 4
Bài Lab 4 tập trung vào phân đoạn màu sử dụng không gian màu HSV, một kỹ thuật đã được thảo luận trong bài giảng vì hiệu quả của nó trong xử lý ảnh màu. Sinh viên được giao nhiệm vụ áp dụng các phép ngưỡng để tách các điểm ảnh biển dừng từ các ảnh được cung cấp, sử dụng chương trình Python/OpenCV. Bài tập yêu cầu tìm các giá trị ngưỡng tốt nhất để phát hiện điểm ảnh biển dừng, thực hiện các phép toán hình thái để làm sạch kết quả, và nộp các ảnh đã phân đoạn cùng với chương trình Python và các tham số ngưỡng và phép toán hình thái đã sử dụng.
Bài Lab 5
Bài Lab 5 liên quan đến nhiệm vụ chèn một kết cấu ảnh mới vào một vùng cụ thể của một ảnh hiện có sao cho phép chiếu trông đúng. Quá trình này, được gọi là thay thế mặt phẳng, yêu cầu sinh viên sử dụng kỹ thuật biến đổi projective (homography) để ánh xạ một ảnh mới lên một vùng phẳng của ảnh hiện có. Lab nhấn mạnh ứng dụng thực tế của homography để sửa đổi nội dung ảnh trong khi vẫn giữ đúng phối cảnh. Sinh viên được mong đợi nộp ảnh gốc, ảnh có kết cấu thay thế, ảnh kết hợp, và chương trình Python của họ như một phần của bài lab.
Bài Lab 6
Bài Lab 6 hướng dẫn sinh viên phát hiện và tính tư thế của một mục tiêu gồm năm vòng tròng đồng tâm tương phản (CCCs) trong một ảnh. Nhiệm vụ bao gồm sử dụng OpenCV để phát hiện mục tiêu CCC, sắp xếp chúng đúng thứ tự, tính tư thế với hàm solvePnP() của OpenCV, và vẽ các trục tọa độ cùng tư thế lên ảnh. Lab nhấn mạnh ứng dụng của các khái niệm như phát hiện mục tiêu, ước lượng tư thế, và định dạng đầu ra trực quan trong thị giác máy.
Bài Lab 7
Bài Lab 7 tập trung vào việc phát hiện và ghép các đặc trưng SIFT giữa các ảnh. Mục tiêu là xác định các khớp SIFT đúng từ một ảnh sang ảnh khác và phân tích độ chính xác của các khớp này. Lab bao gồm việc sử dụng mã Python và ảnh được cung cấp từ một tập dữ liệu, điều chỉnh các tham số thuật toán để tối ưu hóa việc phát hiện khớp, và tính các chỉ số precision và recall để đánh giá hiệu suất của quá trình ghép đặc trưng. Sinh viên được yêu cầu nộp chương trình Python của họ và các giá trị precision và recall đã tính cho các thiết lập tham số khác nhau.
Bài Lab 8
Bài Lab 8 tập trung vào phát hiện đối tượng bằng cách sử dụng ghép đặc trưng và phù hợp biến đổi affine để phát hiện và phủ các đối tượng từ ảnh huấn luyện lên ảnh truy vấn. Lab bao gồm việc phát hiện đối tượng trong các kịch bản khác nhau, điều chỉnh ngưỡng số lượng khớp inlier để giảm dương tính giả, và tính các chỉ số precision, recall và accuracy để đánh giá hiệu suất hệ thống phát hiện đối tượng. Sinh viên được mong đợi sửa đổi và chạy mã Python được cung cấp, phân tích hiệu suất hệ thống dưới các điều kiện khác nhau, và nộp kết quả cùng mã đã chỉnh sửa.
Bài Lab 9
Bài Lab 9 liên quan đến việc đặt các điểm chú thích trên một đối tượng trong ảnh huấn luyện và tự động hiển thị các điểm đó chính xác trên đối tượng trong các ảnh truy vấn tiếp theo. Lab này nhấn mạnh trích xuất đặc trưng, ghép sử dụng bài kiểm tra tỉ lệ (ratio test) để loại bỏ các khớp mơ hồ, phù hợp biến đổi affine 2D bằng RANSAC để loại bỏ ngoại lệ, và áp dụng biến đổi để ánh xạ các điểm chú thích từ ảnh huấn luyện sang ảnh truy vấn. Nhiệm vụ quan trọng là điều chỉnh ngưỡng số lượng khớp inlier để cân bằng giữa dương tính giả và âm tính giả, nhằm đạt độ chính xác cao nhất trong phân loại ảnh đúng.
Bài Lab 10
Bài Lab 10 dành cho việc sử dụng biến đổi Hough để tìm các đoạn thẳng và xác định các tập các đường thẳng song song trong một ảnh. Nó sử dụng biến đổi Hough xác suất thông qua hàm cv2.HoughLinesP() của OpenCV để phát hiện các đoạn thẳng được biểu diễn bởi điểm đầu và điểm cuối. Lab cũng bao gồm việc xác định các điểm biến mất bằng cách phân tích các vectơ hướng của các đoạn thẳng này, nhằm hiểu hướng của các đường song song trong không gian 3D khi chúng xuất hiện trên mặt phẳng ảnh 2D. Sinh viên được giao nhiệm vụ xử lý các ảnh thử nghiệm để tìm các đoạn thẳng song song, thử nghiệm với các tham số để tối ưu hóa việc phát hiện, và nộp kết quả cùng chương trình Python.
Ghi chú
- Bạn sẽ cần các gói Python của bên thứ ba sau để chạy các script/lab này: cv2 & numpy.
- Một số lab này có thể yêu cầu bạn sử dụng một phiên bản cụ thể của cv2. Thật không may, các yêu cầu không được ghi lại, nên bạn sẽ phải tự tìm hiểu. Nếu bạn tìm ra hoặc gặp khó khăn, vui lòng báo cáo nó tới mẫu issues.