ĐẠI HỌC QUỐC GIA HÀ NỘI ĐẠI HỌC CÔNG NGHỆ Tiểu luận Tìm “bẩn” trên tiền bằng C++ và OpenCV Lớp Lập trình ứng dụng 2223II ELT2014 22 Giảng viên Hoàng Văn Xiêm Nhóm Nguyễn Anh Tuấn 20021594 Phạm Văn Cườ[.]
ĐẠI HỌC QUỐC GIA HÀ NỘI ĐẠI HỌC CÔNG NGHỆ Tiểu luận : Tìm “bẩn” tiền C++ OpenCV Lớp : Lập trình ứng dụng 2223II_ELT2014_22 Giảng viên : Hồng Văn Xiêm Nhóm : Nguyễn Anh Tuấn - 20021594 Phạm Văn Cường - 20021500 Hà Nội - 2023 Giới thiệu toán Xử lý tiền bẩn toán quan trọng lĩnh vực đếm tiền, tài ngân hàng Trong thực tế, loại tiền tệ thường bị bẩn, rách có dấu hiệu khác sử dụng, làm cho việc đếm tiền xác trở nên khó khăn Để giải vấn đề này, công nghệ xử lý ảnh máy học áp dụng rộng rãi để phát loại bỏ tiền bẩn khỏi dãy tiền OpenCV thư viện xử lý ảnh mã nguồn mở, cung cấp công cụ mạnh mẽ để phát phân tích đặc trưng ảnh Kết hợp với ngơn ngữ lập trình C++, OpenCV sử dụng để xử lý tiền bẩn thông qua bước tiền xử lý ảnh, phân vùng, phát đối tượng, phân loại Ảnh tiền xử lý phương pháp lọc Gauss, cân histogram, loại bỏ nhiễu độ sáng tối Tiếp theo, ảnh phân vùng để xác định vùng chứa tiền Sau đó, đặc trưng tiền phát phương pháp phát cạnh, phát màu sắc, phát hình dạng phát kích thước Cuối cùng, đặc trưng sử dụng để phân loại tiền loại bỏ tiền bẩn khỏi dãy tiền Xử lý tiền bẩn OpenCV C++ ứng dụng tiềm công nghệ xử lý ảnh máy học, đem lại giải pháp đáng tin cậy hiệu cho vấn đề liên quan đến đếm tiền kiểm tra tính xác tiền tệ 2.Thuật tốn sử dụng Tìm kiếm đặc trưng ảnh khớp chúng với kĩ thuật feature matching Feature matching trình so khớp đặc trưng hai nhiều hình ảnh để tìm điểm chung chúng Khi hai hình ảnh chụp từ góc độ khác chụp thời điểm khác nhau, đặc trưng chúng khác việc tìm điểm chung chúng quan trọng để thực tác vụ ghép ảnh, đo khoảng cách, nhận diện vật thể nhiều ứng dụng khác std::vector keypoints1, keypoints2; cv::Mat descriptors1, descriptors2; detector->detectAndCompute(img1, cv::Mat(), keypoints1, descriptors1); detector->detectAndCompute(img2, cv::Mat(), keypoints2, descriptors2); std::vector matches; matcher->match(descriptors1, descriptors2, matches); Lọc khớp khơng xác double max_dist = 0; double min_dist = 100; for (int i = 0; i < descriptors1.rows; i++) { double dist = matches[i].distance; if (dist < min_dist) min_dist = dist; if (dist > max_dist) max_dist = dist; } std::vector good_matches; for (int i = 0; i < descriptors1.rows; i++) { if (matches[i].distance detectAndCompute(img1, cv::Mat(), keypoints1, descriptors1); detector->detectAndCompute(img2, cv::Mat(), keypoints2, descriptors2); std::vector matches; matcher->match(descriptors1, descriptors2, matches); // Lọc khớp khơng xác double max_dist = 0; double min_dist = 100; for (int i = 0; i < descriptors1.rows; i++) { double dist = matches[i].distance; if (dist < min_dist) min_dist = dist; if (dist > max_dist) max_dist = dist; } std::vector good_matches; for (int i = 0; i < descriptors1.rows; i++) { if (matches[i].distance